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.

[参考译文] TMS320F28379D:EnDat 时钟问题:GPIO6上没有 PWM、代码在 dataReady 检查循环中挂起

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1500492/tms320f28379d-endat-clock-issue-no-pwm-on-gpio6-code-hangs-in-dataready-check-loop

部件号:TMS320F28379D
主题: C2000WARE 中讨论的其他器件

工具/软件:

您好:

我正在开发基于 TMS320F28379D 芯片的定制电路板、并尝试使用 EnDat 库实现与编码器的 SPI 通信。

但是、我目前面临一个问题。 为了使 SPI 通信正常工作、必须从 GPIO 引脚6生成 PWM 时钟信号并将其发送到编码器。 目前、此 PWM 信号未被输出。 因此、不会触发 spiRxFifoIsr 中断、并且永远不会满足条件 endat22Data.dataReady = 1;。 因此、程序仍停留在 while (endat22Data.dataReady!= 1){}循环中。

请帮助我启用 GPIO6上的 PWM 时钟输出。

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

    您好:

    C2000Ware 中有一些软件示例可帮助您完成代码和 PWM 配置: C:\ti\c2000\C2000Ware_5_04_00_00\driverlib\f2837xd\examples\cpu1\epwm

    如果您有任何问题、敬请告知。

    此致、

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

    您好:

    首先、我想澄清一下、我不熟悉如何在 TMS320F28379D 上配置和运行 PWM。 我当前的目标是使用 EnDat 库驱动编码器、并且我正在使用EnDat_Init();函数对其进行初始化。

    在此初始化期间、调用以下函数:

    PM_endat22_generateCRCTable (NBITS_POLY1、POLY1、endat22CRCtable);
    pm_endat22_setupPeriph();
    PM_endat22_setFreq (ENDAT_INIT_FREQ_DIVIDER);
    retval1 = PM_endat22_setupCommand (ENCODER_RECEIVE_RESET、0xAA、0x2222、0);
    pm_endat22_startOperation ();

    但是、这些函数是在预编译PM_endat22_lib.lib文件中定义的、因此无法直接检查或调试内部实现。

    我怀疑其中一个功能(很可能PM_endat22_startOperation())应该在 GPIO6上配置和输出 PWM 时钟信号。 遗憾的是、GPIO6上当前未生成 PWM 信号。 因此、endat22Data.dataReady == 1绝不会触发 SPI 接收中断、并且永远不会满足该条件。 这会导致程序卡在相应的循环中。

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

    e2e.ti.com/.../endat_5F00_init.zip

    请查看代码

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

    您好:

    感谢您的进一步澄清。 让我与 EnDat 库中的相关专家交流、更好地帮助您完成调查。

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

    再次大家好:

    现在我已经解决了上一个问题、它似乎是根本原因与.cmd 文件配置有关。

    我想提出一个跟进问题。

    我计划使用 GPIO0、GPIO2和 GPIO4作为由 CPU2控制的 PWM 输出。

    但是、在 Enn Dat_Init ()函数中、我看到 ePWM1、ePWM2、ePWM3和 ePWM4的时钟都被启用:

    CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;

    CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;

    CpuSysRegs.PCLKCR2.bit.EPWM3 = 1;

    CpuSysRegs.PCLKCR2.bit.EPWM4 = 1;

    这表明 EnDat 库利用 ePWM1至 ePWM4。

    考虑到这一点、如果我也尝试从 CPU2使用任何这些 PWM 模块(特别是 ePWM1-ePWM3)、可能会发生冲突。

    我的问题是:

    使用 EnDat 时、是否全部四个 ePWM 模块(1–4)都专门保留供其使用?

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

    在该器件上、CLBx 时钟由 EPWMx 时钟驱动。 我记得、使用了4个 CLB 逻辑块中的3个。 作者必须已初始化所有4个时钟。  

    此致

    Lori