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 ...
随机推荐
- __declspec关键字详细用法
__declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...
- mysql更改已有数据表的字符集,保留原有数据内容
mysql更改已有数据表的字符集,保留原有数据内容 原文网址:http://blog.csdn.net/learn_2/article/details/6460370 环境:在应用开始阶段没有 ...
- jquery之 on()方法
原文地址:http://www.365mini.com/page/jquery-on.htm on()函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需 ...
- 超强vim配置
在网上找vim的配置,自己配置的特别丑 安装起来也超级方便. #!/bin/bash echo "安装将花费一定时间,请耐心等待直到安装完成^_^" if which apt-ge ...
- web后门top
看到了一个博客 觉得关键点很有用 1)出现频率最高的DDoS后门文件名 abc.php, xl.php, Xml.php, dedetag.class.php, counti.php, plase. ...
- Music Player团队项目(一)
团队成员及分工 团队: Blue 团队共有六人 姓名: 学号后四位: 贡献分: 张 宇(队长) 1152 1+1.8=2.8分 侯贺琦 1 ...
- DIV与IDIV的用法
DIV (unsigned divide) 无符号数除法 格式:DIV SRC 执行的操作: 字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中.表示为 (AL) ...
- Hibernate之N+1问题
什么是hibernate的N+1问题?先了解这样一个描述: 多个学生可以对应一个老师,所以student(n)---teacher(1).Stu类中有一个属性teacher.在hibernate配置文 ...
- 转 cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)
概述 包括以下5种优化:引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化 引擎优化 2.0版本比1.0版本在算法上有所优化,效率更高.2.0版本使用OpenGl ES 2.0图形库,1.0版本 ...
- Android中利用SharedPreferences保存信息
package com.example.sharepreferen; import android.content.Context; import android.content.SharedPref ...