DSP EPWM学习笔记1 - EPWM定时中断
DSP EPWM学习笔记1 - EPWM定时中断
彭会锋
EPWM模块组成
EPWM有7个子模块组成:时间基准 TB、比较功能 CC、动作限定 AQ、死区产生 DB、斩波控制 PC、故障捕获 TZ、事件触发 ET,具体组成如下图2、3所示:
为了完成EPWM定时中断功能,我们主要使用时间基准 TB、比较功能 CC和事件触发(ET) 这三个模块,通过设置这三个模块的寄存器,最终得到想要的结果。
EPWM中断
为了使用EPWM定时中断,我们首先要了解EPWM可以触发的中断都有哪些,可以在PIE 多路复用的外设中断矢量表中查询得到,EPWM 模块中可以触发中断标志的有TZ(故障捕获) 和ET (事件触发子模块),定时中断主要通过事件触发模块(ET)进行中断设置。
我们只需要EPWM1_INT中断即可,中断标志位于INT3.1中,这个需要在程序中注册中断程序,具体代码如下:
EALLOW;
PieVectTable.EPWM1_INT = &Epwm1TimerISR; //在这里注册EPWM的中断程序入口
EDIS; IER |= M_INT3; //开启cpu IER中断标志位
PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE; //开启cpu PIE中断标志位
EPWM时钟配置问题解析(主要针对CLKDIV 和 HSPCLKDIV计算TBCLK的问题)
ePWM的时钟TBCLK=SYSCLKOUT/(2^HSPCLKDIV × 2^CLKDIV)
CLKDIV默认为零 HSPCLKDIV默认为1 ,注意计算的时候是2^k计算的,所以默认分频为TBCLK = SYSCLKOUT/2;
寄存器配置
1 ET模块寄存器
这里我们主要设置一下标志位:
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // 选择EPWMx_INT产生的条件,这里选择 001:TBCTR=0x0000时产生
EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; // 使能产生EPWM中断信号
EPwm1Regs.ETPS.bit.INTPRD = ET_2ND; // 中断周期设定,每发生两次事件,产生中断信号EPWMx_INT
EPWM模块同步疑问记录
代码实现
#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 = ; void EpwmRegInit(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = ; // 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 = ; 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 = ; // Start all the timers synced
EDIS;
} void main(void)
{
#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif InitSysCtrl(); EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = ;
GpioCtrlRegs.GPADIR.bit.GPIO0 = ;
GpioDataRegs.GPASET.bit.GPIO0 = ; // uncomment if --> Set High initially
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();
} __interrupt void Epwm1TimerISR(void)
{
EPwm1Regs.ETCLR.bit.INT = 1; //注意此处的中断标志清除
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; //清除中断向量表中的标志位
EPwm1TimerIntCount++;
if(EPwm1TimerIntCount > )
{
EPwm1TimerIntCount = ;
GpioDataRegs.GPATOGGLE.bit.GPIO0 = ;
}
}
DSP EPWM学习笔记1 - EPWM定时中断的更多相关文章
- DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析
DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...
- DSP - Bootloader学习笔记2
DSP - Bootloader学习笔记2 彭会锋 1 本文主要以F2812为例进行说明的: F28027内部资源 F28027内存映射
- DSP bootloader学习笔记1
DSP bootloader学习笔记1 彭会锋 参考: TMS320F28xx DSP中内部Flash的应用研究 http://wenku.baidu.com/view/83e9837931b765c ...
- RHCA学习笔记:RH442-Unit9内核定时与进程延时
Unit 9 Kernel Timing and Process Latency 内核定时与进程延时 学习目标: A.了解CPU 是怎样追踪时间的 B.调整CPU的访问次数 C.调整调度延时 D. ...
- Arduino101学习笔记(九)—— 中断函数
1.设置中断函数 //***************************************************************************************** ...
- Intel微处理器学习笔记(五) 中断
▼ 中断是一个由硬件激发的过程,它中断当前正在执行的任何程序. ▼ 在Intel系列微处理器中,包括INTR和NMI(Non Maskable Interrupt)两个申请中断的引脚和一个响应INTR ...
- STM32本学习笔记EXTI(外部中断)
参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...
- [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
1基本概念 中断 q 中断是系统对于异步事件的响应 q 中断信号 q 中断源 q 现场信息 q 中断处理程序 q 中断向量表 异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行 ...
- Android学习笔记(不定时更新)
<2014-03-20>设置按钮的不同状态 1.res/ layout/ [文件名]myselector.xml 2.把两张不同的按钮图片放到drawable-xxxx文件夹里,mysel ...
随机推荐
- C# DataTable的详细用法
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- BZOJ 1927 星际竞速(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1927 题意:一个图,n个点.对于给出的每条边 u,v,w,表示u和v中编号小的那个到编号 ...
- CodeForces 151B Phone Numbers
Phone Numbers Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...
- Android Studio中有用的快捷键栏
Android Studio中有用的快捷键栏#1 Ahraewi线移动 Alt + Shift +向上/向下❖Alt + Shift +向上/向下 或上下移动在所选位置的行. 删除行 CMD + B ...
- SOME USEFUL MACHINE LEARNING LIBRARIES.
from: http://www.erogol.com/broad-view-machine-learning-libraries/ http://www.slideshare.net/Vincenz ...
- 纯CSS写三角形-border法
(1)有边框的三角形 我们来写下带边框的三角形. 如果是一个正方形,我们写边时,会用到border,但我们这里讨论的三角形本身就是border,不可能再给border添加border属性,所以我们需要 ...
- java传递和返回对象
java传递的只是一个引用,一定要注意准确认识在对象传递和赋值时所发生的一切. 事实上,java中的每个对象(除了基本数据类型以外)的标识符都属于指针的一种,但是其使用受到了严格的限制和防范,不仅在编 ...
- HDU 5723 Abandoned country(落后渣国)
HDU 5723 Abandoned country(落后渣国) Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- Android——GridLayout
转载自http://www.cnblogs.com/over140/archive/2011/12/08/2280224.html 欢迎大家转载 前言 本章内容android.widget.GridL ...
- linux 命令行模式下,浏览网页
Ubuntu自带最新版的Gnome桌面,拥有大量的服务和桌面应用程序,让您仅通过一张安装光盘就可以体验到无比舒适的操作环境.下文介绍的在ubuntu下使用终端命令行上网的方法. 第一步,需要安装一个名 ...