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/TMS320F2.8379万D:ePWM初始化

Guru**** 2573695 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/642537/ccs-tms320f28379d-epwm-initialization

部件号:TMS320F2.8379万D

工具/软件:Code Composer Studio

您好,

我的同事和我正在尝试在 TMS320F2.8379万D中实施12个ePWM通道。 在main函数的开头,我们将ePWM初始化函数从"InitEPwm1Gpio()"调用到"InitEPwm12Gpio()",这些函数在"F2837xD_ePWM.c"中定义。 但是,测试结果显示只有EPWM1至EPWM8可以工作,而EPWM9至EPWM12不能工作。 因此,我们深入研究 "F2837xD_ePWM.c"并尝试找出原因。

在数据表中,GPIO0或GPIO145可定义为EPWM1A,GPIO1或GPIO146可 定义为EPWM1B。  在"F2837xD_ePWM.c"中,我们可以选择两个选项之一。 在EPWM8之前,EPWM2也是如此。

void InitEPwm1Gpio (void)
{
EALLOW;

gpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;//在GPIO0上禁用上拉(EPWM1A)
gpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;//在GPIO1上禁用上拉(EPWM1B)
// GpioCtrlRegs.GPEPUD.bit.GPIO145 = 1;//在GPIO145上禁用上拉(EPWM1A)
// GpioCtrlRegs.GPEPUD.bit.GPIO146 = 1;//在GPIO146上禁用上拉(EPWM1B)

gpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将GPIO0配置为EPWM1A
gpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;//将GPIO1配置为EPWM1B
// GpioCtrlRegs.GPEMUX2.bit.GPIO145 = 1;//将GPIO145配置为EPWM1A
// GpioCtrlRegs.GPEMUX2.bit.GPIO146 = 1;//将GPIO0146配置为EPWM1B

EDIS;
} 

但是,从EPWM9到EPWM12,我们在"F2837xD_ePWM.c"中只有一个选项。 从数据表中,EPWM12A可在GPIO22或GPIO167上激活,但仅可在GPIO167的功能中激活:

void InitEPwm12Gpio (void)
{
EALLOW;

gpioCtrlRegs.GPFPUD.bit.GPIO167 = 1;//在GPIO167上禁用上拉(EPWM12A)
gpioCtrlRegs.GPFPUD.bit.GPIO168 = 1;//在GPIO168上禁用上拉(EPWM12B)

gpioCtrlRegs.GPFMUX1.bit.GPIO167 = 1;//将GPIO167配置为EPWM12A
gpioCtrlRegs.GPFMUX1.bit.GPIO168 = 1;//将GPIO168配置为EPWM12B

EDIS;
} 

我们希望在GPIO22上激活它,因为连接更容易,因此我们将代码更改为:

gpioCtrlRegs.gpapud.bit.gPIO22 = 1;//在GPIO22 (EPWM12A)
gpioCtrlRegs.gpapud.bit.gPIO23 = 1;//在GPIO23 (EPWM12B)

上禁用上的上拉;gpoCtrlRegs.gpiporegs.gpipoes.gpipoapud.bit.gPIO23 = gpipoesp
组22/配置为gPIO22.gPIO23= gPIO23= gPIO212.gPIO2// gPIO23= gPIO23GPUgPIO2p组2gPIO23= gPIO212.gPIO2gPIO 

我们将GPEMUX2更改为GPBMUX2,因为我们看到在"F2837xD_GPIO .h"中,GPIO22和GPIO23属于 GPBMUX2。 将“5”而不是“1”分配给寄存器的原因是,在数据表中,mux应设置为5以激活EPWM12A和B:

但是,这实际上并不起作用,因为 GPBMUX2中只定义了2位,但数字5需要3位:101。  

那么,为什么“F2837xD_GPIO.h”只考虑ePWM 8至12的其中一个引脚,以及 如何解决此问题? 是否应更改 "F2837xD_GPIO.h"? 也许TI将 很快发布新版本的“F2837xD_GPIO.h”?

非常感谢!

邓俊飞

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

    唐英年:

    [引用] 但是这并不真正有效,因为 GPBMUX2中只定义了2位,但数字5需要3位:101。  [/引述]

    对于GPIO22 Mux选项,您必须使用GPAMUX2寄存器,而不是GPBMUX2。 是的,GPAMUX2只有2位用于mux选择,因此它只能选择4个mux选项中的一个(0到3)。 要选择这些选项以外的选项,必须使用全局mux设置,就像在这种情况下使用GPAGMUX2中的mux选择位和GPAMUX2一样。 因此,对于mux选项5 ('B101),您必须将GPAGMUX2寄存器中对应的选择位设置为1 ('B01),同时在GPAMUX2寄存器中的选择位中设置值1 ('B01)。 此信息在"表4-3. GPIO多路插针"。

    我将与我们的团队讨论  在下一个版本中更新F2837xD_gpio.h文件的问题。 您还可以使用 pinmux工具 为不同的pinmux选项生成代码。

    此致,

    Vivek Singh

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

    您好,Vivek,

    感谢您的回复!

    是的,请更新。 当前 的F2837xD_gpio.h 让我们很困惑。

    我们期待下一个版本。 顺便说一下,当新版本发布时,控制套件将通知我们更新,对吗? 如果是这种情况,我们不需要手动检查更新。

    非常感谢!

    此致,

    邓俊飞