Other Parts Discussed in Thread:C2000WARE
interrupt void Cla1Task1 (void)
{
//Local Variables
//i=fGridVoltRatio;
//Code
__mdebugstop();
//int i;
Num = 100.0;
Den = 10.0;
//i++;
GpioDataRegs.GPATOGGLE.bit.GPIO20 = 1;
__meallow();
EPwm12Regs.CMPB.bit.CMPB = 10;
EPwm1Regs.CMPA.bit.CMPA = 100;
__medis();
//
/*if(EPwm1Regs.CMPA.bit.CMPA >= 400)
{
EPwm1Regs.CMPA.bit.CMPA–;
}
if(EPwm1Regs.CMPA.bit.CMPA <= 40)
{
EPwm1Regs.CMPA.bit.CMPA++;
}*/
// Res = CLAdiv(Num,Den);
Res = Num/Den;
}
可以肯定程序是进到CLA TASK了,因为测试到GPIO20反转了,也计算出来了RES的值,但是单步调试时,EPwm1Regs.CMPA.bit.CMPA是我初始化的值,而不会变成100,请问这是什么原因?CLA访问EPwm1Regs.CMPA.bit.CMPA还需要配置其他的吗?或者是CMD文件需要特别的配置。
Green Deng:
一般不太会直接对寄存器进行加减运算,试一下定义一个变量,对变量进行加减操作,然后把变量值赋给EPwm1Regs.CMPA.bit.CMPA呢? 另外在CLA中使用变量需要在.cla中先声明,定义位置,然后在task8中初始化才能正常使用。
—————————————————————————————————————————————————————————————————————————
TI 诚邀您参加全新设计的产品页面测试,参加测试即可享有 TI 购物 9 折优惠码,点击加入 EP产品页面测试报名,名额有限。感谢您的参与!
,
user1078330:
你说的这个办法我已经试过了,还是不行。
interrupt void Cla1Task1 (void){ //Local Variables
//i=fGridVoltRatio;
//Code __mdebugstop(); //int i;
Num = 100.0; Den = 10.0;
//i++; GpioDataRegs.GPATOGGLE.bit.GPIO20 = 1; __meallow(); EPwm12Regs.CMPB.bit.CMPB = 10; EPwm1Regs.CMPA.bit.CMPA = Num; __medis(); // /*if(EPwm1Regs.CMPA.bit.CMPA >= 400) { EPwm1Regs.CMPA.bit.CMPA–; } if(EPwm1Regs.CMPA.bit.CMPA <= 40) { EPwm1Regs.CMPA.bit.CMPA++; }*/
// Res = CLAdiv(Num,Den); Res = Num/Den;
}
我利用Num给EPwm1Regs.CMPA.bit.CMPA赋值,通过单步运行,Num是变成了10.0,但是EPwm1Regs.CMPA.bit.CMPA的值没有改变,还是我初始化时的值。
我看到网上很多人遇到这个问题,请问怎么解决?比较急
,
Green Deng:
请问你是如何验证CMPA寄存器没有得到更新的?是否有查看EPWM输出波形?还是只是在CCS的expression窗口中观察到了寄存器值?因为expression窗口中的更新值只能在C28x调试范围中观察到,而不能在CLA调试范围中观察到。
你也可以参考一个类似的例子“cla_ex4_pwm_control”,在C2000Ware中作为F28004x CLA driverlib例子的一部分,它也更新了CLA任务内EPWM的CMPA寄存器,以更新PWM的占空比。
,
user1078330:
我在expressiong窗口中观察过,也用示波器观察过EPWM的波形,都显示没有更新CMPA。如果需要,我可以把整个工程都发给你
,
Green Deng:
你好,我看了一下之前回复你的例程,例程中是使用了影子寄存器的,你参考F280049的例程,用影子寄存器测试一下呢?
C:\ti\c2000\C2000Ware_3_01_00_00\driverlib\f28004x\examples\cla中的cla_ex4_pwm_control例程
,
user6119125:
请问您的问题解决了吗?我遇到的问题和您的一模一样。真是令人捉急。