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.

在TMS320F28377S的CLA task 中无法修改PWM的比较寄存器的值

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文件需要特别的配置。

  • 一般不太会直接对寄存器进行加减运算,试一下定义一个变量,对变量进行加减操作,然后把变量值赋给EPwm1Regs.CMPA.bit.CMPA呢?
    另外在CLA中使用变量需要在.cla中先声明,定义位置,然后在task8中初始化才能正常使用。

    —————————————————————————————————————————————————————————————————————————

    TI 诚邀您参加全新设计的产品页面测试,参加测试即可享有 TI 购物 9 折优惠码,点击加入 EP产品页面测试报名,名额有限。感谢您的参与!

  • 你说的这个办法我已经试过了,还是不行。

    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的值没有改变,还是我初始化时的值。

    我看到网上很多人遇到这个问题,请问怎么解决?比较急

  • 请问你是如何验证CMPA寄存器没有得到更新的?是否有查看EPWM输出波形?还是只是在CCS的expression窗口中观察到了寄存器值?因为expression窗口中的更新值只能在C28x调试范围中观察到,而不能在CLA调试范围中观察到。
    你也可以参考一个类似的例子“cla_ex4_pwm_control”,在C2000Ware中作为F28004x CLA driverlib例子的一部分,它也更新了CLA任务内EPWM的CMPA寄存器,以更新PWM的占空比。
  • 我在expressiong窗口中观察过,也用示波器观察过EPWM的波形,都显示没有更新CMPA。如果需要,我可以把整个工程都发给你
  • 你好,我看了一下之前回复你的例程,例程中是使用了影子寄存器的,你参考F280049的例程,用影子寄存器测试一下呢?
    C:\ti\c2000\C2000Ware_3_01_00_00\driverlib\f28004x\examples\cla中的cla_ex4_pwm_control例程
  • 请问您的问题解决了吗?我遇到的问题和您的一模一样。真是令人捉急。