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.

[参考译文] TMS320F280049C:280049 CLA 调试中的问题

Guru**** 2380550 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/994563/tms320f280049c-a-problem-in-280049-cla-debug

器件型号:TMS320F280049C

现在在我的项目中,我使用 CLA,但我有一个程序,我使用 PWM7 TBCTR=CMPB 作为 CLA 触发器,我可以进入 CLA 代码运行,但我发现所有 PWMx.TBPRD=0xFFFF (初始值不是0xFFFF)

因此、我尝试通过阶跃调试来找出原因、然后我找到当单步执行"EPwm7Regs.ETSEL.bit.inten = true;"以及 所有 PWMx.TBPRD=0xFFFF 时的情况

这是我的 PWM7触发器初始代码: 原因是什么? 谢谢!

/ /
// ePWM 模块7配置:用于 ISR 和 ADC 触发
EPwm7Regs.TBPRD = PWM_INTPRD;//20160121更改为45k ISR 频率!!
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数/dn

EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE;//从机模块
EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm7Regs.TBPHS.bit.TBPHS = 2;
EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;//禁用同步输出
//TBCLK=SYSCLKOUT/(HSPCLKDIV * CLKDIV)=SYSCLKOUT
EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;//时基时钟预分频
EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//高速时间预分频
EPwm7Regs.CMPB.bit.CMPB = INT_CMPB;

EPwm7Regs.ETSEL.bit.INTSEL = ET_CTRL_CMPB;
EPwm7Regs.ETSEL.bit.INTEN = 0;//禁用 INT
EPwm7Regs.ETPS.bit.INTPRD = et_1st;//在发生第一个事件时生成 INT
EPwm7Regs.ETCLR.ALL = 0x000F;//清除所有 ETFLAG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是从 CPU 还是 CLA 运行上述代码?
    从 CPU 运行代码时是否观察到类似的行为?
    启用中断与 TBPRD 值更改为0xFFFF 之间没有关系。
    您能否从代码中读取 TBPRD 值并确认它返回的值、而不是在调试器窗口中查看?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、这是我的问题;由于在 CLA 中、我的代码 写入了 PWM.PRD 寄存器、写入值 计算错误、为0xFFFF;

    因此、当"EPwm7Regs.ETSEL.bit.INTEN = true"运行时、CLA 代码开始运行、PWM.PRD 值由0xFFFF 写入