|
免费内容:
//########################################################################### // // 文件名: Example_281xEvPwm.c // // 说明: // 设置事件管理器的定时器(TIMER1, TIMER2, TIMER3 and TIMER4) // 来产生 T1PWM, T2PWM, T3PWM, T4PWM 和 PWM1-12 波形(16路PWM波)。 // //###########################################################################
#include "DSP281x_Device.h" // DSP281x 设备包含文件 #include "DSP281x_Examples.h" // DSP281x 例程包含文件
// 函数原型声明 void init_eva(void); void init_evb(void);
void main(void) //主函数 {
// 第1步:初始化系统控制量:PLL,看门狗,使能外围时钟
InitSysCtrl();//系统初始化程序,原型在DSP281x_SysCtrl.c中
// 第2步:初始化 GPIO:
EALLOW; //使能保护寄存器 GpioMuxRegs.GPAMUX.all = 0x00FF; // 将EVA PWM 1-6 引脚配置成通用I/O GpioMuxRegs.GPBMUX.all = 0x00FF; // 将EVB PWM 7-12 引脚配置成通用I/O EDIS; //禁止修改保护寄存器
// 第3步:清除所有中断,初始化PIE向量表
DINT; //关闭总中断 IER = 0x0000;//关闭外设中断 IFR = 0x0000;//清除中断标志
InitPieCtrl();//初始化PIE控制寄存器
InitPieVectTable();//初始化PIE向量表
// 第4步:初始化所有外围设备
init_eva(); // 初始化事件管理器A init_evb(); //初始化事件管理器B
// 第5步:IDLE循环,采用示波器可以观察波形
for(;;);
}
void init_eva() { // 初始化EVA Timer1 EvaRegs.T1PR = 0xFFFF; // 定时器1 周期值 EvaRegs.T1CMPR = 0x3C00; // 定时器1 比较值 EvaRegs.T1CNT = 0x0000; // 定时器1 计数器初值 EvaRegs.T1CON.all = 0x1042; //控制方式:连续增减;定时器使能,比较使能
// 初始化 EVA Timer2 EvaRegs.T2PR = 0x0FFF; // 定时器2 周期值 EvaRegs.T2CMPR = 0x03C0; // 定时器2 比较值 EvaRegs.T2CNT = 0x0000; // 定时器2 计数器初值 EvaRegs.T2CON.all = 0x1042; //控制方式:连续增减;定时器使能,比较使能
// 设置 T1PWM and T2PWM EvaRegs.GPTCONA.bit.TCMPOE = 1; //比较逻辑驱动T1/T2PWM EvaRegs.GPTCONA.bit.T1PIN = 1; //定时器1比较器极性设置为低电平有效 EvaRegs.GPTCONA.bit.T2PIN = 2; //定时器2比较器极性设置为高电平有效
//使能 PWM1-PWM6比较功能 EvaRegs.CMPR1 = 0x0C00; //比较单元比较器1设值 EvaRegs.CMPR2 = 0x3C00; //比较单元比较器2设值 EvaRegs.CMPR3 = 0xFC00; //比较单元比较器3设值 EvaRegs.ACTRA.all = 0x0666;//输出引脚1、3、5高有效,2、4、6低有效 EvaRegs.COMCONA.all = 0xA600; //允许比较输出;下溢或等于周期值时重载 EvaRegs.DBTCONA.all = 0x0000; // 禁止死区
}
void init_evb() { // 初始化EVB Timer3 // Timer3 控制 T3PWM and PWM7-12 EvbRegs.T3PR = 0xFFFF; // Timer3 周期值 EvbRegs.T3CMPR = 0x3C00; // Timer3 比较值 EvbRegs.T3CNT = 0x0000; // Timer3 计数器初值
// TMODE = 连续增减 // Timer 使能 // Timer 比较使能 EvbRegs.T3CON.all = 0x1042;
// 初始化EVB Timer4 // Timer4 控制T4PWM EvbRegs.T4PR = 0x00FF; // Timer4 周期值 EvbRegs.T4CMPR = 0x0030; // Timer4 比较值 EvbRegs.T4CNT = 0x0000; // Timer4 计数初值
// TMODE = 连续增减 // Timer 使能 // Timer 比较使能 EvbRegs.T4CON.all = 0x1042;
// 设置T3PWM and T4PWM // 由比较逻辑来驱动 T3/T4 PWM EvbRegs.GPTCONB.bit.TCMPOE = 1; // T3PWM的 比较极性 =低有效 EvbRegs.GPTCONB.bit.T3PIN = 1; // T4PWM的比较极性 = 高有效 EvbRegs.GPTCONB.bit.T4PIN = 2;
//使能PWM7-PWM12比较功能 EvbRegs.CMPR4 = 0x0C00; EvbRegs.CMPR5 = 0x3C00; EvbRegs.CMPR6 = 0xFC00;
EvbRegs.ACTRB.all = 0x0666; // 比较动作控制,动作在一个比较情况下发生 // 输出管脚 1 CMPR4 - 高有效 // 输出管脚 2 CMPR4 - 低有效 // 输出管脚 3 CMPR5 - 高有效 // 输出管脚4 CMPR5 - 低有效 // 输出管脚 5 CMPR6 - 高有效 // 输出管脚6 CMPR6 - 低有效
EvbRegs.COMCONB.all = 0xA600; //允许比较输出;下溢或等于周期值时重载
EvbRegs.DBTCONB.all = 0x0000; //禁止死区
}
// 此例程没有使用ISR(中断服务子程序) |
|