写一段dspf28335配置10hz的pwm程序
时间: 2023-06-19 12:03:47 浏览: 149
dsp28335的pwm程序
以下是一个dspf28335配置10Hz的PWM程序:
```
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define PWM_FREQ 10.0 // PWM频率为10Hz
#define PWM_PERIOD (int)(150E6 / PWM_FREQ / 2) // PWM周期
void InitEPwm1(void);
void main(void)
{
InitSysCtrl(); // 系统时钟初始化
InitEPwm1(); // EPWM1初始化
EINT; // 全局中断使能
ERTM; // 全局中断恢复
while(1){} // 等待中断
}
void InitEPwm1(void)
{
EPwm1Regs.TBPRD = PWM_PERIOD - 1; // 设置PWM周期
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置计数器为上下计数模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位功能
EPwm1Regs.TBCTL.bit.PHSDIR = TB_UP; // 相位向上计数
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟分频系数为1
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时钟分频系数为1
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 同步输出选择为计数器计数到0
EPwm1Regs.CMPA.half.CMPA = PWM_PERIOD / 2; // 设置占空比为50%
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器计数到CMPA时,将PWM输出设置为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器计数到CMPA时,将PWM输出设置为低电平
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // 当计数器计数到CMPA时,产生一个EPWMxSOCA事件
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能EPWMxSOCA事件
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // 选择计数器计数到0时产生EPWMxSOCA事件
}
```
在这个程序中,我们使用了`InitEPwm1()`函数来初始化EPWM1模块。在这个函数中,我们首先设置了PWM周期,然后将计数器设置为上下计数模式,禁用了相位功能并设置相位向上计数。接下来,我们设置了高速时钟分频系数和时钟分频系数,选择了同步输出计数器计数到0的事件,并设置了占空比为50%。最后,我们使能了EPWMxSOCA事件,并选择了计数器计数到0时产生该事件。
在`main()`函数中,我们只是初始化了系统时钟和EPWM1模块,并进入了一个无限循环,等待中断事件的发生。
阅读全文