28335调试记录----PWM使用总结
已有 373 次阅读2016-9-5 13:11
|个人分类:DSP
本文为作者原创,如有引用请标明出处,谢谢大家,欢迎评论交流。
接触PWM已经有一个星期多了吧,在使用的过程中对寄存器的操作越来越熟悉,所以记录下来和广大的网友进行交流和学习,希望大家能够对博文中不对或者是可以进行优化的地方批评指正,共同进步。
DSP28335共有6组12路PWM信号,其可以分别的产生相应的控制信号应用于不同的领域,下面我说说具体使用时要注意的地方。
void main(void)
{
InitSysCtrl();
InitEPwm1Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.EPWM1_INT = &epwm1_int_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
InitEPwm1Example();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
// Step 5. User specific code, enable interrupts
// Initalize counters:
EPwm1IntCount = 0;
// Enable CPU INT3 which is connected to EPWM1-3 INT:
IER |= M_INT3;
// Enable EPWM INTn in the PIE: Group 2 interrupt 1-3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Step 6. IDLE loop. Just sit and loop forever (optional):
for(;;)
{
asm(" NOP");
}
}
1)初始化PWM的GPIO端口为PWM功能引脚:InitEPwm1Gpio();
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
先是能上拉,然后将GPIO配置为PWM功能引脚。
2)声明中断程序的入口:PieVectTable.EPWM1_INT = &epwm1_int_isr;
3)查阅手册,PWM的中断在PIE中断的第三组,在看PWM1的中断是第一号中断向量:
IER |= M_INT3;
// Enable EPWM INTn in the PIE: Group 2 interrupt 1-3
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
4)初始化PWM:InitEPwm1Example();
这里面可以配置PWM的周期,占空比,使能PWM中断,设置时钟频率。这里要注意的是一定要注意中断使能,不然在后面的使用中是不会产生波形的。
5)这里要说明下中断函数的书写,不建议里面写太多的东西,宗旨是不要里面程序执行的时间大于中断产生的时间。这是是要在程序开始之前声明的。
interrupt void epwm1_int_isr(void);