工具/软件: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”?
非常感谢!
邓俊飞
