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.

[参考译文] CCS/TMS320F28377D:ePWM TBPRD 寄存器复位

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/700006/ccs-tms320f28377d-epwm-tbprd-register-resets

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

我通过 GPIO 将 ePWM 1和2路由为控制信号、并将 ePWM 5、6和9路由为提供中断触发。

我尝试添加 EPWM 3和4作为额外的 GPIO。 程序已编译并启动、但现在所有 TBPRD 都已复位为0、因此所有 PWM 都无法正常工作。 我已经逐行单步执行代码、并确认每个 ePWM 最初加载了正确的 TBPRD、但正是在 main 中的 while (1)循环期间、它们被复位为0、我无法进一步跟踪问题。

我能够注释掉 ePWM 1和2设置、以使 ePWM 3、4、5、6和9正常工作、但我无法使全部7个同时工作。 我在使用优化选项时运气不佳。 有什么想法吗?

谢谢、
Eric

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

    我建议您发布主 C 文件和 PWM 初始化例程。 您是否尝试使用断点来确定何时复位 TBPRD? 请注意、使用断点或运行到行时、您可能会看到与使用单步执行时不同的行为。 运行到行或断点与运行时间更相似。

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

    在通过 CCS 调用 PWM 初始化函数并确认 TBPRD 均已正确设置后、我将断点设置为。 在单步执行时、TBPRD 似乎在 CLA 强制函数调用后被复位。 我把这个问题追溯到我的 CLA 任务中有一个 for 循环、看起来是这样的:

    _interrupt void Cla1Task1 (void)
    {
    unsigned int i;
    
    for (i=0;i <nfreqs;i++) { phase[i] = phase_init[i]; } }
    
    
    
    

    其中、nfreqs 被定义为 int。 出于某种原因、它会编译并经常运行而不会出现问题、但当我尝试添加更多 PWM 时、这会导致所有 TBPRD 复位。 将 nfreqs 更改为 uint8_t 类型似乎可以解决这个问题... 有什么关于 CLA 如何影响 PWM 寄存器的想法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这将如何解决这个问题尚不清楚。

    您能告诉我在两种情况下(int、uint8_t) nfreqs 的存储器位置吗?

    此致、
    SAL