dsp28335实现pwm
时间: 2023-07-28 07:07:24 浏览: 307
DSP28335的EPWM模块可以用来实现PWM输出。下面是一个简单的DSP28335实现PWM的示例程序:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void InitEPwm(void);
void main(void)
{
InitSysCtrl();
InitEPwm();
while(1)
{
// do something
}
}
void InitEPwm(void)
{
// 配置GPIO引脚
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
EDIS;
// 配置EPWM模块
EPwm1Regs.TBPRD = 1000; // 设置PWM周期为1000
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 设置计数器为上升计数模式
EPwm1Regs.CMPA.bit.CMPA = 500; // 设置占空比为50%
EPwm1Regs.AQCTLA.bit.CAU = 2; // 当CMPA=CMPB时,EPWM输出高电平
EPwm1Regs.AQCTLA.bit.CAD = 1; // 当CMPA>CMPB时,EPWM输出低电平
EPwm1Regs.TBCTL.bit.PRDLD = 1; // 重新加载周期寄存器
EPwm1Regs.TBCTL.bit.SYNCOSEL = 0;// 不进行同步
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;// 高速时钟不分频
EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 时钟不分频
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 不使用相位控制
EPwm1Regs.TBCTL.bit.PHSDIR = 0; // 不改变相位寄存器的方向
EPwm1Regs.TBCTL.bit.PRDLD = 1; // 重新加载周期寄存器
EPwm1Regs.ETSEL.bit.SOCAEN = 0; // 禁止SOCA输出
EPwm1Regs.ETSEL.bit.SOCASEL = 0; // 不进行SOCA触发
EPwm1Regs.ETSEL.bit.INTEN = 0; // 禁止中断输出
EPwm1Regs.ETSEL.bit.INTSEL = 0; // 不进行中断触发
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; // 立即更新CMPA寄存器
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0; // 立即更新CMPB寄存器
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0; // 立即加载CMPA寄存器
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0; // 立即加载CMPB寄存器
EPwm1Regs.CMPCTL.bit.PWMAMODE = 0; // PWM输出模式
EPwm1Regs.CMPCTL.bit.PWMBMODE = 0; // PWM输出模式
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 死区时间保护模式
EPwm1Regs.DBCTL.bit.POLSEL = 2; // EPWM输出反相保护
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // 禁止反相输入
EPwm1Regs.DBCTL.bit.HALFCYCLE = 0; // 死区时间保护模式
EPwm1Regs.DBRED = 20; // 设置死区时间
EPwm1Regs.DBFED = 20; // 设置死区时间
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // 设置计数器为上升计数模式
EPwm1Regs.TBCTL.bit.SWFSYNC = 1; // 立即同步TBCTR和TBPRD
EPwm1Regs.TBCTL.bit.FREE_SOFT = 0;// EPWM停止后立即停止输出
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 不使用相位控制
EPwm1Regs.TBCTL.bit.PHSDIR = 0; // 不改变相位寄存器的方向
// 使能EPWM模块
EPwm1Regs.TBCTL.bit.CTRMODE = 0x3;
}
```
在上述示例程序中,我们通过配置EPwm1Regs结构体中的相关寄存器来实现PWM输出。其中,TBPRD寄存器表示PWM的周期,CMPA寄存器表示PWM的占空比,AQCTLA寄存器表示PWM的输出模式。通过设置EPwm1Regs结构体中的各个寄存器的值,可以实现不同的PWM输出模式。最后,使能EPWM模块即可开始PWM输出。