我使用PWM模拟不归堆码,进行相位控制,设置中断每两个事件触发一次,因为应用的要求,没有开中断,用了查询法。然后关PWM时,为了时序上不出问题,只是把各个触发事件都设置为输出清零。当我再次开启时,却发现PWM在开启的第一次,总是第一个事件触发完后,第二个事件就触发了。
开启时的代码如下:
EPwm1Regs.ETCLR.bit.INT = 1;
for(i=0;i<TR1;i++)
{
while(!EPwm1Regs.ETFLG.bit.INT);
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm1Regs.ETCLR.bit.INT = 1;
}
我是想先清除下中断,就可清除计时器,然后按理来讲应该过两个事件才触发,后续的波形也可以观察是两个事件触发一次,但是为什么起始时就是只间隔了一个事件。
另外也想问一下仿真进中断时,外设的计时会怎样,外设会不会继续工作
Soldier 76:
你好,我也遇到了类似的问题,并且没有找到答案,手册里写,重写ETPS[INTPRD]这个周期可以清空事件计数ETPS[INTCNT],事实上没有清空,我也不知道什么原因,在英文论坛提问也没人回复出来。
我问题是这样,我也是配置事件一次触发,但是我没有开ET中断,我是使用的时候准备清除掉标志位,还有事件计数ETPS[INTCNT],然后开中断,然而我发现在使能中断后会立刻进入,原因是前面的事件计数ETPS[INTCNT]没有清空,很头大,但是手册里说重写可以清空,