80
时 间 记 忆
80
最 新 评 论
80
专 题 分 类
80
最 新 日 志
80
最 新 留 言
80
搜 索
用 户 登 录
友 情 连 接
博 客 信 息
80


 
TMS320F28335入门(十)ePWM相关寄存器设置问题解析
[ 2021/5/21 22:31:00 | By: 欧高工作日记 ]
 
1、EPWM模块共有7个子模块组成:
(1)时间基准 TB、
(2)比较功能 CC、
(3)动作限定 AQ、
(4)死区产生 DB、
(5)斩波控制 PC、
(6)故障捕获 TZ、
(7)事件触发 ET、

2、具体组成如下图1、图2所示;为了完成EPWM定时中断功能,我们主要使用时间基准 TB、比较功能 CC和事件触发(ET) 这三个模块,通过设置这三个模块的寄存器,最终得到想要的结果。











图-1
图-2
3、为了完成EPWM定时中断功能,我们主要使用时间基准 TB、比较功能 CC和事件触发(ET) 这三个模块,通过设置这三个模块的寄存器,最终得到想要的结果。
4、PWM发波例程:
#define PWM1_INT_ENABLE 1 #define PWM1_TIMER_TBPRD 0x1FFF // Prototype statements for functions found within this file. // void EpwmGpioInit(void); // 这里由于只用到了EPWM的定时器功能,所以可以不用初始化GPIO void EpwmRegInit(void); //初始化EPWM寄存器 __interrupt void Epwm1TimerISR(void); //epwm寄存器中断函 uint16_t EPwm1TimerIntCount = 0; void EpwmRegInit(void) { EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks EPWM模块同步使用,在4中讲到了 EDIS; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 00 EPWMXSYNC EPwm1Regs.TBPRD = PWM1_TIMER_TBPRD; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm1Regs.TBCTR = 0; EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; EPwm1Regs.ETPS.bit.INTPRD = ET_2ND; // Generate INT on 2nd event 每两次定时中断触发一次进入中断函数 EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced EDIS; } void main(void) { #ifdef _FLASH memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); #endif InitSysCtrl(); EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; GpioDataRegs.GPASET.bit.GPIO0 = 1; EDIS; DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); // EpwmGpioInit(); //因为仅仅使用epwm的定时器功能,所以不需要初始化外设 EpwmRegInit(); //中断部分初始化处理 EALLOW; PieVectTable.EPWM1_INT = &Epwm1TimerISR; //中断函数注册部分 EDIS; IER |= M_INT3; PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE; EINT; ERTM; // Step 5. User specific code: while(1); } __interrupt void Epwm1TimerISR(void) { EPwm1Regs.ETCLR.bit.INT = 1; //注意此处的中断标志清除 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; //清除中断向量表中的标志位 EPwm1TimerIntCount++; if(EPwm1TimerIntCount > 5000) { EPwm1TimerIntCount = 0; GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; //交替 } }
 

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    80
Powered by Oblog.