\\"简简单单DSP\\"系列学习活动 - 第七期事件管理器 -

更新时间:2024-05-03 09:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

“简简单单DSP”系列学习活动 第七期事件管理器——通用定时器

事件管理器(EV)强大的功能使它特别适用于运动控制和电机控制领域。DSP有两个相同的事件管理器EVA、EVB。每个事件管理器模块包括通用定时器CP、全比较单元、可编程的死区发生器,PWM波形发生器、捕获单元CAP和和正交编码单元,A/D转换器的外部启动信号,功率驱动保护单元、EV寄存器以及EV中断等多个部分。每一个EV还包含两路单独的PWM输出。 事件管理器的接口框图下图所示:

从图中我们可以看出,每一个事件管理器模块都包含有:两个通用定时器、3个比较单元、三个捕获单元、一个正交编码电路,还可以有外部时钟、外部触发功率保护模块等。常用的就是通用定时器、全比较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

本文来源:https://www.bwwdw.com/article/k0jg.html

Top