用HCG生成的代码,配置如下图所示
我DEBUG时,PIN3的PWM波形正常,
但在void hetLowLevelInterrupt(void)以及void hetHighLevelInterrupt(void)函数中均设置断点时,结果断点均没有触发。
同样的情况发生在设置Edge及Cap时,均无法进入HET高低中断。。。我设置的时钟中断均能正常进入。
请问还需设置哪里才能正常的进入HET的中断?
forever one:
另我也在初始化后调用了 pwmEnableNotification(pwm0, pwmEND_OF_PERIOD);
还是不能进入中断,请帮忙看看,谢谢!
Renton:
回复 forever one:
Hi Forever,
有没有打开CPU的全局中断呢?
如果使用的是CCS的话,直接调用编译器的内嵌函数_enable_interrupts();就可以了。
forever one:
回复 Renton:
RTI中断能正常进入,分别设置了RTI的compare0,1,2三个中断,我用的是CCS4.1.3,找不到_enable_interrupts();
开始时已执行了void nestEnable(void) { vimREG->NESTCTL = 0x0AU;}函数,
且vimREG->REQMASKSET0也配置正常,就是无法进入HET的中断,还请支招,谢谢!
forever one:
回复 Renton:
确实如你所描述的,我将HETRAM调整后就可以中断了。
另还想请教一个问题,如第一张图所示我产生的PWM波形周期是1000us,但实际产生的波形周期却是4倍4000us。
用RTI模块时,时钟定时是准确的,就是HET的时钟不准,不知为何。这个是HET的配置图,帮忙分析下吧,谢谢了!
Renton:
回复 forever one:
Hi Forever,
这个可能是晶振的设置不对造成的吧。
在Oscillator选项卡里面,默认是16MHz的晶振,是不是你的板子上使用了4MHz振荡器?
forever one:
回复 Renton:
我使用的是16M的晶振,RTI的时钟是准的
Renton:
回复 forever one:
Hi Forever,
抱歉刚没注意你的描述。
这样的话,可能要仔细看一下设置了。
如果能够确认其他HALCoGen内部的设置(clock tree, oscillator, het clock等)都没有问题的话, 我们仔细看一下HET的代码吧。
PWM0的周期对应的更新指令是第42条指令,你可以打开het.c源文件来查看:
const hetINSTRUCTION_t hetPROGRAM[] 这个数组的内容。
找到第42条指令,如图:
这里的Data段,319872U就相当于比较寄存器的值。
我们需要把它右移7bit,得到真正的(周期值 – 1)。
319872U >>7U = 2499
周期是2499+1= 2500个LR clock.
根据你前面的描述,你的LR Clock设置为400ns。
即周期为1000us。
所以,请你看一下,是不是这个数字有问题?如果不是319872U或者比较接近的值,那么说明这个值错了。
Renton:
回复 Renton:
或者,进入调试状态,在Memory窗口中观察这个指令的值,第42条指令在0xff4602a0地址上。
找到后看看Data中的值是否是0x0004E180U。
运行一段时间后再观测这里的值,看看是否被改动过。
Renton:
回复 Renton: