我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
hongyue yu:
回复 Eric Ma:
Eric Ma,
谢谢您的答复!对于何时产生中断还不是很明白,比如说我设置CMPA=200;TBPRD=1000时,是不是说当计数器的值加到200时是不会触发中断的,而只有当计数器的值等于TBPRD的值的时候才会触发中断并去执行中断服务程序呢?还有就是芯片管脚电平的翻转是何时产生的呢,是在计数器的值等于CMPA的值时还是等于TBPRD的值时呢?
我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
hongyue yu:
回复 Eric Ma:
谢谢Eric,我还有问题需要请教一下就是手册中关于shadowmode与immediatemode两者之间的区别或是优缺点还不是很清楚,还麻烦Eric讲解一下,谢谢!
我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
hongyue yu:
回复 Eric Ma:
非常感谢Eric,若现在我使用shadow模式,计数模式设置为up-down计数模式,那我如果想每个周期产生一次中断的话就只能设置CTR=0或TBPRD对吗?这样每个周期CMP的值会更新一次,由于在每个周期都会产生两次比较,因此每个周期GPIO管脚可以动作两次。
还有就是LOADMODE和中断的产生是同时发生的,比如说CTR=0那一刻即产生中断并去执行ISR,也可以将shadow寄存器的值加载到active寄存器中。
我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
Eric Ma:
回复 hongyue yu:
hongyue,
你所说的都对。但有一点需要强调的是,中断可以在很多种事件产生,counter的值与CMPA,CMPB的值相等的时候,也可以产生中断。另外,up-down mode是会在每个周期比较两次,GPIO管教可以设置动作或不动作。
Eric
我现在使用ePWM模块产生SPWM波,程序中使用了中断服务子程序,经过测试发现中断周期的时间较长,也即中断服务子程序中的计数比较寄存器器CMPA值更新较慢影响PWM的精度。
请问1、如何才能缩短中断周期呢或是不使用中断来较快更新计数比较器CMPA的值呢???
2、当计数器的值与CMPA值相等时是否即可产生中断并去执行中断服务子程序还是要计数到TBPRD的值时才可产生中断去执行中断程序呢???
期待朋友们的解答,谢谢!
hongyue yu:
回复 Eric Ma:
非常感谢Eric!