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 ...
随机推荐
- dual,rowid,rownum
一. dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 s ...
- Windows下通过bat脚本实现自动上传文件到ftp服务器
@Echo Off Echo open ip_address [port] >ftp.up Echo [username]>>ftp.up Echo [password]>&g ...
- git commit时message的问题
1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-e ...
- JAVA查找--[二分查找]
package com.array; public class BinaryFind { /* * 项目名称:二分查找 ; * 项目要求:用JAVA对数组进行查找,并运用快速查找算法; * 作者:Se ...
- 关于oracle sql developer乱码的问题
写了一个sql查询,我擦居然乱码了 然后双击下这个框,居然又是中文: 有谁能够告诉我这是什么鬼
- [Effective Java]第五章 泛型
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 模仿$.Callbacks实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- [原]五分钟搭建gitserver
本来在忙一些事情,结果刚才突然收到一个临时的事情,号称很着急. 问了一下,原来是需要在本地搭建一个git库,但其实之前我是有做过gitserver的,不过是在阿里云(部分分布在青云)上,而且目前在使用 ...
- CSS的基本操作
<html> <!-- . 给整个页面填一个一个背景 . 给em添加一个样式样倾斜效果消失 . 改变第一层UL的样式为蓝色,16px . 改变第二层的UL的样式为红色 14px . ...
- MyEclipse + Tomcat 热部署问题
myEclipse设置对应的tomcat时,只需要在jdk的Optional Java VM arguments中添加如下设置: -Xms256m -Xmx512m-Dcom.sun.manageme ...