dsp28335 pwm实现两盏灯闪烁
时间: 2023-10-21 12:07:13 浏览: 129
您好,使用dsp28335的PWM模块来实现两盏灯的闪烁可以按照以下步骤进行:
1. 初始化PWM模块:设置PWM时钟、周期、计数模式等参数。
2. 配置GPIO口:将需要控制的GPIO口设置为PWM输出模式。
3. 设置PWM占空比:通过改变PWM占空比来实现灯的闪烁效果。可以采用定时器中断的方式来定时改变占空比,也可以在主循环中使用延时函数来控制占空比的改变。
4. 循环控制灯的状态:通过不断改变PWM占空比或者改变GPIO输出状态来实现灯的闪烁效果。
以下是示例代码:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define PWM_FREQ 1000 // PWM频率1kHz
#define PWM_PERIOD (150E6 / PWM_FREQ / 2 - 1) // PWM周期计算公式
#define PWM_DUTY_CYCLE 0x8000 // PWM占空比50%
void InitPWM(void);
void InitGPIO(void);
void main(void)
{
InitSysCtrl();
InitPWM();
InitGPIO();
while (1)
{
EPwm1Regs.CMPA.half.CMPA = PWM_DUTY_CYCLE;
EPwm2Regs.CMPA.half.CMPA = 0;
DELAY_US(500000); //延时500ms
EPwm1Regs.CMPA.half.CMPA = 0;
EPwm2Regs.CMPA.half.CMPA = PWM_DUTY_CYCLE;
DELAY_US(500000); //延时500ms
}
}
void InitPWM(void)
{
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止时钟同步
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 上升下降计数模式
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 时钟分频1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 高速时钟分频1
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位补偿
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 当计数器为0时同步
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 使能周期影子寄存器
EPwm1Regs.TBPRD = PWM_PERIOD; // PWM周期
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当CMPA与计数器相等时,输出高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当CMPA与计数器相等时,输出低电平
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBPRD = PWM_PERIOD;
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; // 启动时钟同步
EDIS;
}
void InitGPIO(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; // GPIO0配置为EPWM1A输出
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; // GPIO2配置为EPWM2A输出
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0输出
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1; // GPIO2输出
EDIS;
}
```
以上代码中,EPwm1和EPwm2分别控制GPIO0和GPIO2的输出状态。在主循环中,先将EPwm1的占空比设置为50%,EPwm2的占空比为0,从而使GPIO0输出高电平,GPIO2输出低电平,延时500ms后再将EPwm1的占空比设置为0,EPwm2的占空比为50%,从而使GPIO0输出低电平,GPIO2输出高电平,延时500ms。反复循环,就可以实现两盏灯的闪烁效果。
阅读全文