DSP2812---PWM波形
// $ Date: 6/11/2009 整理: eyes417 $ // FILE : Example_281xEvPwm.c // // // ASSUMPTIONS: //
# include "DSP281x_Device.h" // DSP281x Headerfile Include File void init_eva(void); void main(void) // InitGpio(); 配置IO口功能为PWM模式 DINT; //关CPU总中断 InitPieCtrl(); //初始化PIE控制寄存器
init_eva(); //初始化EV-A EvaRegs.T1CON.bit.TENABLE=1; //手工启动定时器 EINT; // 使能INTM(全局中断)
for(;;);
}
//EV-A初始化
//连续增/减模式,x/1分频,内部时钟,使能比较,使用自己的周期,禁止定时器启动(等初始化全部完成后手工启动)
EvaRegs.GPTCONA.bit.TCMPOE = 1; //通过逻辑产生T1 PWM //连续增减--低有效时:PWM占空比=CMPR1/T1PR,高有效时:PWM占空比=(T1PR-CMPR1)/T1PR EvaRegs.CMPR2 = 0x3C00;
}
用示波器观察到的PWM波形
总结:PWM波形产生流程 1):将I/O口设置为PWM引脚模式 2):设置装载TxCON,决定计数方式,启动比较操作 3):设置装载TxPR,决定PWM波形周期 4):初始化EvaRegs.CMPR1--3的值,每个比较单元控制2路互补的PWM输出,控制PWM占空比 5):EvaRegs.ACTRA比较方式控制寄存器,控制PWM引脚的 高/低 有效 6):EvaRegs.DBTCONA死区时间的设置 7):EvaRegs.COMCONA设置比较控制寄存器
附: /*****************************死区寄存器配置************************************/ EvaRegs.DBTCONA.bit.DBT=5; //死区定时器周期为5 EvaRegs.DBTCONA.bit.EDBT1=1; //死区定时器1使能 EvaRegs.DBTCONA.bit.DBTPS=3; //死区定时器预定标因子,死区时钟为HSPCLK/8 |