问题描述
在使用28377D的ePWM9/ePWM10/ePWM11/ePWM12时,使用与ePWM1~8相同的设置并无法产生pwm波。其原因就是ePWM9/ePWM10/ePWM11/ePWM12的引脚复用配置方式有些许不同。在使用时不能简单的复制粘贴、修改代码。
GPIO引脚简单介绍
在使用DSP28377D的ePWM模块时,遇到了引脚复用的小问题,引脚默认为普通IO口功能,即只能控制高低电平,当想使用其他功能时,需要将对应引脚设置为复用。28377D的引脚复用表可以参考芯片手册,这里放前20个GPIO为例。
图中第2、3行,为两个功能寄存器,通过对这两个寄存器的设置可以实现GPIO的复用功能。当然,一般情况不需要使用第一个框内的寄存器,即GPyGMUXn寄存器,只需对GPyMUXn进行配置便可使用。
EPWM1配置代码示例
根据芯片手册,GPIO0可以复用为EPWM1A功能,GPIO1可以复用为EPWM1B功能。
配置代码如下
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1; // 禁止上拉 Disable pull-up on GPIO0 (EPWM1A)
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1; // Disable pull-up on GPIO1 (EPWM1B)
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // 功能寄存器配置 Configure GPIO0 as EPWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // Configure GPIO1 as EPWM1B
EDIS;
上述代码将GPIO0复用为EPWM1A功能,将GPIO1复用为EPWM1B功能,可以看到除了禁止上拉电阻,只对GPAMUX1功能寄存器进行了配置,没有对GPAGMUX1进行配置,原因应该为GPAGMUX1相应的位默认为0。
EPWM9配置代码示例
根据芯片手册,GPIO16可以复用为EPWM9A功能,GPIO17可以复用为EPWM9B功能。
配置代码如下
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 1; // Disable pull-up on GPIO16 (EPWM9A)
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 1; // Disable pull-up on GPIO17 (EPWM9B)
GpioCtrlRegs.GPAGMUX2.bit.GPIO16=1;
GpioCtrlRegs.GPAGMUX2.bit.GPIO17=1;
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as EPWM9A
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as EPWM9B
EDIS;
发现与EPWM1的配置代码相比,多了对GPAGMUX2功能寄存器的设置。
根据手册,想要将GPIO16配置为EPWM9A,需要对GPyGMUXn.GPIO16设置为1,且GPyMUXn.GPIO16设置为1。