打印

DSP系列事件管理器——通用定时器

[复制链接]
483|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Roses|  楼主 | 2017-9-6 13:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
事件管理器(EV)强大的功能使它特别适用于运动控制和电机控制领域。DSP有两个相同的事件管理器EVA、EVB。每个事件管理器模块包括通用定时器CP、全比较单元、可编程的死区发生器,PWM波形发生器、捕获单元CAP和和正交编码单元,A/D转换器的外部启动信号,功率驱动保护单元、EV寄存器以及EV中断等多个部分。每一个EV还包含两路单独的PWM输出。

一、
通用定时器CP
1、通用定时器有四个中断:
A、
通用定时器1上溢中断
B、
通用定时器下溢中断
C、
通用定时器比较中断
D、通用定时器周期中断
这四个中断标志位在EVA中断标志寄存器A(EVAIFRA)中,这四个中断的使能位在EVA屏蔽寄存器EVAIMRA中设置。
2、通用定时器有三个16位的和定时比较有关的寄存器:
A、
通用定时器计数寄存器TXCNT
B、

通用定时器周期寄存器TxPR
C、
通用定时器比较寄存器TXCMPR
通用定时器计数寄存器TxCNT根据通用定时器的时钟和计数模式开始计数,不停的和周期寄存器和比较寄存器从而产生中断或者各种事件。
当工作在定时器的模式时,TxCNT得值和TxPR中设置的值比较,当比较匹配后的一个时钟后,产生相应的事件
当工作在比较的模式时,TxCNT得值和TxCMPR中设置的值比较,当比较匹配后的一个时钟后,产生相应的比较事件
TxPR和TxCMPR都是带有影子寄存器的,在一个周期的任何时刻都可以对这两个寄存器进行读写,读写的是他们的影子寄存器。对于TxCMPR,只有当TxCON寄存器指定的特定条件满足时,影子寄存器中的值才加载到比较寄存器中;对于周期寄存器,只有当计数寄存器为0时,影子寄存器的值才能重新加载到周期寄存器。
3、通用定时器的计数模式
        通用定时器有四种计数模式
A、
停止/保持吧、模式(TxCON.TMODE1~TMODE0=00)
B、
连续增计数模式(TxCON.TMODE1~TMODE0=01)
C、
定向增/减计数模式(有外部引脚决定,xCON.TMODE1~TMODE0=11
D、连续增减计数模式(TxCON.TMODE1~TMODE0=10)
通过定时器控制寄存器TxCON的12~11位决定,
4、时钟
        可以是外部时钟也可以是内部时钟,一般用内部时钟,内部时钟是HSPCLK经过预分频后得到的。由TxCON得5~4位决定,TxCON。TCLKS1~TCLKS0=00选择内部时钟;预分频由TxCON得10~8位决定,CLK=HSPCLK/2的TxCON。TPS2~TPS0次方。
5、工作在周期匹配下
        这里用到的中断是通用定时器周期中断,需要设置的有以下内容:
(1)
通用定时器1的时钟,包括选择内部还是外部时钟以及与分频系数
在设置这个之前要保证EVA的时钟开启;


SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;// EVA的时钟开启


EvaRegs.T1CON.bit.TCLKS10=0;//选择内部时钟


EvaRegs.T1CON.bit.TPS=3;//预分频8倍,如果HSPCLK=150M,那么通用定时器时钟频率是150/8M.


(2)计数工作模式选择


EvaRegs.T1CON.bit.TMODE=2;//连续增计数模式


(3)通用定时器1的计数器和周期寄存器的



通用定时器的完整周期是TxPR+1个时钟周期,如果初始化的时候TxCNT=0的话那么从第一个周期就是一个完整的周期,所以一般初始化的时候设置TxCNT=0


EvaRegs.T1CNT=0x0000;
EvaRegs.T1PR = 0xFFFF;
//周寄存器的值最大为65535


(4)通用定时器1周期匹配中断配置


EvaRegs.EVAIFRA.bit.T1PINT=1;//周期中断标志位清0


EvaRegs.EVAIMRA.bit.T1PINT=1;//周期中断使能
(5)通用定时器1使能


EvaRegs.T1CON.bit.TENABLE=1;//使能定时器1
(6)PIE级中断使能
PieCtrlRegs.PIEIER2.bit.INTx4 = 1;//周期匹配中断时INT2.4
(7)使能CPU级中断
IER |= M_INT2;
EINT;
//开全局中断
ERTM;
// 仿真中断
6、中断函数处理
interrupt void T1PINT_ISR(void)
// EV-A
{

USER……


EvaRegs.EVAIFRA.bit.T1PINT=1;//外设级中断标志位清0
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
// Acknowledge interrupt to PIE

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

709

主题

1023

帖子

7

粉丝