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定时中断的更多相关文章

  1. DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析

    DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析 彭会锋 本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究 感觉TI的寄存器命名还是有一定规律可循的 SEL ...

  2. DSP - Bootloader学习笔记2

    DSP - Bootloader学习笔记2 彭会锋 1 本文主要以F2812为例进行说明的: F28027内部资源 F28027内存映射  

  3. DSP bootloader学习笔记1

    DSP bootloader学习笔记1 彭会锋 参考: TMS320F28xx DSP中内部Flash的应用研究 http://wenku.baidu.com/view/83e9837931b765c ...

  4. RHCA学习笔记:RH442-Unit9内核定时与进程延时

      Unit 9 Kernel Timing and Process Latency 内核定时与进程延时 学习目标: A.了解CPU 是怎样追踪时间的 B.调整CPU的访问次数 C.调整调度延时 D. ...

  5. Arduino101学习笔记(九)—— 中断函数

    1.设置中断函数 //***************************************************************************************** ...

  6. Intel微处理器学习笔记(五) 中断

    ▼ 中断是一个由硬件激发的过程,它中断当前正在执行的任何程序. ▼ 在Intel系列微处理器中,包括INTR和NMI(Non Maskable Interrupt)两个申请中断的引脚和一个响应INTR ...

  7. STM32本学习笔记EXTI(外部中断)

    参考资料:STM32数据表.网络信息 =========================================切割线===================================== ...

  8. [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践

    1基本概念 中断 q  中断是系统对于异步事件的响应 q  中断信号 q  中断源 q  现场信息 q  中断处理程序 q  中断向量表 异步事件的响应:进程执行代码的过程中可以随时被打断,然后去执行 ...

  9. Android学习笔记(不定时更新)

    <2014-03-20>设置按钮的不同状态 1.res/ layout/ [文件名]myselector.xml 2.把两张不同的按钮图片放到drawable-xxxx文件夹里,mysel ...

随机推荐

  1. SAP BASIS日常需要做的工作

    SAP Basis的一些日常工作包括用户权限管理.集团管理.数据库管理.后台作业.打印管理.系统监控.传输管理等. a. 用户权限管理: SU01—创建,修改,显示用户信息 SU10—批量修改用户 P ...

  2. C#实现ActiveX控件开发与部署

    现在,我们手里已经有了这个控件包:QRCode.cab,下面我们编写一个测试的网页 <html> <head> <title>无标题页</title> ...

  3. CSRF的防御实例(PHP)

    CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行. 1.服务端进行CSRF防御 服务端的CSRF方式方法很多样,但总的思想都是一致 ...

  4. eclupse启动报 Failed to load JavaHL Library.错

    解决办法: window --> preferences --> Team --> SVN --> Client选项选择: SVNKit x.x.x.xxx

  5. [SAP ABAP开发技术总结]ABAP读写、解析XML文件

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. [SAP ABAP开发技术总结]ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. Fiddler中session的请求/响应类型与图标对照表

  8. T-SQL排名函数

    提到排名函数我们首先可能想到的是order by,这个是排序,不是排名,排名需要在前面加个名次序号的,order by是没有这个功能的.还可能会想到identity(1,1),它也给了一个序号,但是不 ...

  9. maven2 配置M2_REPO

    从eclipse中增加了maven2的插件之后,maven默认的本地库的路径是${user}/.m2/repository/下,一般windows用户的操作系统都安装在C盘,所以这个目录 下的jar包 ...

  10. nodejs学习笔记<三>关于路由(url)

    在网站开发中,路由的设置非常关键.nodejs对路由处理封装了一个比较全面的模块. 来认识下url模块 1)在命令行(cmd)可以直接 node —> url 可直接查看url模块的所有方法. ...