大家好,请问当程序中配置ePWM触发中断和ADC采样的条件都是TBCTR=0,那么在中断程序中读取ADC采样值时当前的值已经更新了吗?之间会有先后顺序吗?
配置的部分程序如下:
EPwm1Regs.ETSEL.bit.INTSEL= 1; // ePWM中断选择条件(当TBCTR=0时)
EPwm1Regs.ETSEL.bit.SOCASEL = 1; // ePWMxSOCA信号产生条件:TBCTR=0
Young Hu:一般来说使用ePWM触发ADC采样,然后使用ADC中断
大家好,请问当程序中配置ePWM触发中断和ADC采样的条件都是TBCTR=0,那么在中断程序中读取ADC采样值时当前的值已经更新了吗?之间会有先后顺序吗?
配置的部分程序如下:
EPwm1Regs.ETSEL.bit.INTSEL= 1; // ePWM中断选择条件(当TBCTR=0时)
EPwm1Regs.ETSEL.bit.SOCASEL = 1; // ePWMxSOCA信号产生条件:TBCTR=0
user4369064:
回复 Young Hu:
很感谢您的回复,您的这种方法也很好。
另外,还有两个疑问:
(1)比如我想在TBCTR=TBPRD和TBCTR=0处都触发一次中断,并且ADC都进行一次更新和一次占空比更新。那我设置触发ADC采样的条件为TBCTR=TBPRD和TBCTR=0,程序如下。然后都用ADC转化完成触发中断,这样可以吗?
EPwm1Regs.ETSEL.bit.SOCASEL= 1;// ePWMxSOCA信号产生条件:TBCTR=0
EPwm1Regs.ETSEL.bit.SOCASEL= 2;// ePWMxSOCA信号产生条件:TBCTR=TBPRD
(2)假如可以实现两次采样,但是PWM的占空比更新只能选择在TBCTR=TBPRD或者TBCTR=0才能实现,程序如下。这个又怎么解决呢?难道是在每次的中断中,修改如下的寄存器吗?
EPwm1Regs.CMPCTL.bit.LOADAMODE = 1; // (CTR=PRD)
EPwm1Regs.CMPCTL.bit.LOADAMODE = 2; // (CTR=0)