我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
hongyue,
immediate mode, 顾名思义,就是当你改变比较寄存器或周期寄存器时,下一个TBCLK就马上载入该值。如果只有这种模式的话,那么当我们在使用PWM模块的时候,下个PWM周期的CMP的值如果要更新,比如在TB 计数器等于0的时候,马上进入中断,然后计算出该周期的比较寄存器的值,马上赋给它,然后在该PWM周期生效。当有可能你计算出CMP的值的时候,计数器已经过了那个点了,所以该CMP的值就变成是接下来的PWM周期的值了。
而如果使用shadow模式的话,你可以在前一个PWM周期就把CMP的值计算好,然后在TB counter等于0的时候赋给它。
大部分情况下都是用到shadow模式。
Eric