5中断及定时器9.docx
《5中断及定时器9.docx》由会员分享,可在线阅读,更多相关《5中断及定时器9.docx(17页珍藏版)》请在冰豆网上搜索。
5中断及定时器9
第5章中断及定时器
本章简要介绍了TMS320DM642的中断系统及定时器,对中断控制寄存器和定时器寄存器进行了重点阐述,本章的知识要点为掌握中断和定时器寄存器的配置方法,本章建议安排4个课时进行学习。
5.1中断系统
中断系统是TMS320DM642处理器的重要组成部分,DM642共有16级中断INT0-INT15,但DSP的中断事件多于16个,缺省情况下INT0-INT15与中断事件之间的映射关系如表5-1所示,DM642的CPU有3种类型中断,即RESET(复位)、不可屏蔽中断(NMI)和可屏蔽中断(INT4-INT15)。
表5-1TMS320DM642的中断源
中断编号
中断选择控制寄存器(MUXL,MUXH)
中断选择控制寄存器(缺省值)
中断事件
中断功能
INT0
-
-
RESET
复位中断
INT1
-
-
NMI
NMI中断
INT2
-
-
保留
保留、未用
INT3
-
-
保留
保留、未用
INT4
MUXL[4:
0]
00100
GPINT4/EXTINT4
GPIO中断4/外部中断4
INT5
MUXL[9:
5]
00101
GPINT5/EXTINT5
GPIO中断5/外部中断5
INT6
MUXL[14:
10]
00110
GPINT6/EXTINT6
GPIO中断6/外部中断6
INT7
MUXL[20:
16]
00111
GPINT7/EXTINT7
GPIO中断7/外部中断7
INT8
MUXL[25:
21]
01000
EDMA_INT
EDMA通道(0~63)中断事件
INT9
MUXL[30:
26]
01001
EMU_DTDMA
EMUDTDMA中断事件
INT10
MUXH[4:
0]
00011
SD_INTA
SDRAM的Timer中断
INT11
MUXH[9:
5]
01010
EMU_RTDXRX
INT12
MUXH[14:
10]
01011
EMU_RTDXTX
INT13
MUXH[20:
16]
00000
DSP_INT
DSP_INT中断
INT14
MUXH[25:
21]
00001
TINT0
定时器0中断事件
INT15
MUXH[30:
26]
00010
TINT1
定时器1中断事件
-
-
01100
XINT0
-
-
01101
RINT0
-
-
01110
XINT1
-
-
01111
RINT1
-
-
10000
GPINT0
GPINT0中断事件
-
-
10001
保留
未用
-
-
10010
保留
未用
-
-
10011
INT2
定时器1中断事件
-
-
10100
保留
未用
-
-
10101
保留
未用
-
-
10110
ICINT0
-
-
10111
保留
未用
-
-
11000
EMAC_MDIO_INT
EMAC相关中断
-
-
11001
VPINT0
视频口0中断事件
-
-
11010
VPINT1
视频口1中断事件
-
-
11011
VPINT2
视频口2中断事件
-
-
11100
AXINT0
音频发送中断事件
-
-
11101
ARINT0
音频接收中断事件
-
-
11110~11111
保留
未用
5.1.1复位
复位是最高级别中断,复位与其它类型中断在以下方面是不同的:
●RESET是低电平有效信号,而其它的中断是边沿有效信号;
●产生RESET中断,低电平必须保持10个时钟周期;
●复位取消所有的指令执行,并使所有的寄存器恢复默认设置;
●复位中断服务程序的指令包的存放地址必须为0;
●复位不受跳转指令的影响。
复位中断后,CPU恢复到一个确定的状态下,程序从地址0处开始执行。
5.1.2不可屏蔽中断(NMI)
NMI优先级别为2,它通常用来向CPU发出严重硬件问题的警报,如电源故障等。
中断使能寄存器(IER)的NMIE位用来控制NMI。
NMIE=1时,使能NMI中断;NMIE=0时,禁止NMI中断。
需注意的是,通过指令NMIE只能置1,不能清0。
NMIE在复位或一个NMI发生时被清零。
如果NMIE=0,所有可屏蔽中断(INT4-INT15)也都被禁止。
5.1.3可屏蔽中断(INT4-INT15)
DM642有12个可屏蔽中断,可以用于外围芯片、片内外设等,也可由软件控制或者不用。
当一个可屏蔽中断发生时,要满足下列条件,CPU才能响应该中断;
●控制状态寄存器(CSR)中的全局中断使能位GIE=1;
●中断使能寄存器(IER)中的NMIE=1;
●IER中相应中断使能位IEm=1;
●中断标志寄存器(IFR)中没有更高优先级别的中断标志位为1。
5.1.4中断优先级
三种中断中,复位RESET具有最高优先级,不可屏蔽中断为第2优先级,相应信号为NMI信号,最低优先级中断为INT15。
RESET、NMI和一些INT4-INT15信号反映在DM642芯片的引脚上,有些INT4-INT15信号被片内外设所用,有些可能无用,或在软件控制下使用。
DM642的中断优先级如表5-2所示。
表5-2中断优先级
优先级
中断名称
中断类型
最高
最低
RESET
复位
NMI
不可屏蔽
INT4
可屏蔽
INT5
可屏蔽
INT6
可屏蔽
INT7
可屏蔽
INT8
可屏蔽
INT9
可屏蔽
INT10
可屏蔽
INT11
可屏蔽
INT12
可屏蔽
INT13
可屏蔽
INT14
可屏蔽
INT15
可屏蔽
5.1.5中断控制寄存器
DM642芯片有8个中断控制寄存器管理中断服务,如表5-3所示。
表5-3中断控制寄存器
缩写
寄存器名称
描述
CSR
控制状态寄存器
控制全局使能或禁止中断,CSR的第0位用于控制中断,GIE=1时,使能所有可屏蔽中断,GIE=0时,禁止所有可屏蔽中断。
IER
中断使能寄存器
使能或禁止中断处理,控制每一个中断源是否使能,IER位0对应于复位,位1对应于NMIE,位4-15分别对应于IE4-IE15,通过IER中相应某个中断位置1使能对应中断,清0禁止对应中断。
IFR
中断标志寄存器
显示出有中断请求但尚未得到服务的中断,中断标志寄存器(IFR)包括INT4-INT5和NMI的状态,IFR位0永远为0,位1对应于NMIF,位4-15分别对应于IF4-IF15,其余位为保留位,当一个中断发生时,IFR中的相应位被置1,否则为0。
ISR
中断设置寄存器
人工设置IFR中的标志位,ISR的位4-15分别对应于IS4-IS15,ISR的IS4-IS15位写1会引起IFR对应中断标志位置1。
ICR
中断清除寄存器
人工清除IFR中的标志位,ICR的位4-15分别对应于IC4-IC15,ICR的IC4-IC15位写1会引起IFR对应中断标志位置0。
ISTP
中断服务表指针
指向中断服务表的起始地址
NRP
NMI中断返回指针
包含从不可屏蔽中断返回的地址,该中断返回通过BNRP指令完成。
IRP
中断返回指针
包含从可屏蔽中断返回的地址,该中断返回通过指令BIRP完成
5.1.6中断服务表(IST)
IST(InterruptServiceTable)是一个512KB的内存块,由16个连续的中断服务取指包(ISFP)组成,每个ISFP占32个字节,包含8条指令,中断服务取址包如图5-1所示。
图5-1中断服务取指包
5.1.7中断服务表指针寄存器(ISTP)
中断服务表指针寄存器(ISTP)用于定位中断服务程序入口。
ISTP中的字段ISTB确定IST的基地址:
HPEINT字段确定当前响应的中断。
ISTP的格式如图5-2所示。
表5-4描述了各字段含义及使用方法。
3116
ISTB
15109543210
ISTB
HPEINT
0
0
0
0
0
图5-2中断服务表指针寄存器(ISTP)
表5-4ISTP各字段描述
字段
字段名
描述
4:
0
设置为0
9:
5
HPEINT
IER寄存器使能的当前最高优先级中断的序号(相应位IFR的位数)。
如果没有中断挂起和使能,HPEINT的值为00000b
31:
10
ISTB
IST的基地址,复位时置0.复位完成后,可通过改写ISTB重新定位IST
复位取指包必须定位于地址0处,而IST中的其余取指包可放在256个字范围内的任何程序存储单元内。
IST的位置由中断服务表基值(ISTB)确定。
5.2定时器
5.2.1概述
TMS320DM642的通用32位定时器可以用于以下5种情况:
事件计时、事件计数、中断CPU、发送同步指令给DMA、事件计数。
定时器有两种模式,且能够被内部源或者外部时钟计时。
定时器拥有一个输入管脚和一个输出管脚,输入管脚和输出管脚(TINP和TOUT)能够作为定时器的时钟输入和时钟输出,它们也可分别设定为通用的输入和输出引脚。
如果使用内部时钟时,定时器可以发信号给一个外部的A/D转换器使之开始一次转换,或者定时器可以触发DMA控制器开始一个数据的传送;使用外部时钟,定时器可以对外部事件进行计数并且在达到指定的事件数后发中断信号给CPU,TMS320DM642定时器不支持竞争中断,定时器内部输入时钟为1/8CPU频率。
图5-3TMS320DM642的定时器的模块框图
定时器可以选择内部时钟,也可以使用外部时钟提供时钟源。
定时器拥有一个输入引脚和一个输出引脚,输入引脚和输出引脚可以作为定时器的时钟输入和时钟输出,他们也可分别配置为通用的输入和输出引脚,图5-3给出了定时器的模块框图。
5.2.2定时器寄存器
配置定时器的3个寄存器如表5-5所示。
表5-5定时器寄存器
名称和缩写
描述
十六进制地址
定时器0
定时器1
定时器2
定时器控制器
(CTL)
决定定时器的运行模式,监控定时器的状态,并且控制TOUT引脚的功能
01940000
01980000
01AC0000
定时器计数器
(CNT)
增量计数器的当前值
01940008
01980008
01AC0008
定时器周期寄存器
(PRD)
控制定时器输入时钟的循环次数,这个数字控制TSTAT信号的频率
01940004
01980004
01AC0004
(1)定时器控制寄存器(CTL)
图5-4显示了定时器控制寄存器各位的含义。
表5-6描述了控制寄存器的各位描述信息。
3112111098
保留
TSTAT
INVINP
CLKSRC
C/P
76543210
HLD
GO
保留
PWID
DATIN
DATOUT
INVOUT
FUNC
图5-4定时器控制寄存器(CTL)
表5-6定时器控制寄存器(CTL)字段描述
位
名称
描述
31:
12
Rsvd
保留
11
TSTAT
定时器状态。
定时器的输出值
10
INVINP
TINP的转换控制位,只有在CLKSRC=0时才有效。
INVINP=0:
TINP置为不驱动定时器;INVINP=1:
TINP转换为驱动定时器
9
CLKSRC
定时器输入时钟源。
CLKSRC=0:
外部时钟源驱动TINP引脚;
CLKSRC=1:
内部时钟源:
1/8CPU时钟(C64x)
8
C/
时钟/脉冲模式。
C/
=0:
脉冲模式,在定时器达到定时器周期后TSTAT活动一个CPU时钟,PWID决定它什么时候停止;C/
=1:
时钟模式,TSTAT每一个周期
7
HLD
保持,计数器可以读或者写而不用考虑HLD的值。
HLD=0:
计数器不计数并且保持当前的状态;HLD=1:
计数器被准许计数
6
GO
GO位,复位计数器并且启动计数器。
GO=0:
定时器无效;
GO=1:
如果HLD=1,则计数寄存器被置为0并且在下一个时钟开始计数
5
Rsvd
保留
4
PWID
脉冲宽度,仅在脉冲模式下使用(C/
=0)。
PWID=0:
在定时器计数器的值等于定时器周期的值之后,TSTAT在一个定时器输入时钟周期内无效;PWID=1:
在定时器计数器的值等于定时器周期的值之后,TSTAT在两个定时器输入时钟周期内无效
3
DATIN
数据进入:
在TINP引脚的值
2
DATOUT
数据输出。
当FUNC=0时:
DATOUT被TOUT驱动;
当FUNC=1时:
在被INVOUT倒置后,TSTAT被TOUT驱动
1
INVOUT
TOUT翻转控制。
仅在FUNC=1时使用。
INVOUT=0:
TSTAT驱动TOUT;INVOUT=1:
反置的TSTAT驱动TOUT
0
FUNC
TOUT引脚的功能。
FUNC=0:
TOUT为一般的通用输出引脚;FUNC=1:
TOUT为定时器的输出引脚
(2)定时器周期寄存器(PRD)
定时器周期寄存器(如图5-5所示)存储着定时器的输入时钟的计数周期值,这个值控制着TSTAT的频率。
310
定时器周期
图5-5定时器周期寄存器(PRD)
(3)定时器计数寄存器(CNT)
定时器计数寄存器(如图5-6所示)在其能够计数时开始增加。
在达到定时器周期寄存器中的数值之后,定时器计数寄存器在下一个CPU时钟被复位为0。
310
定时器计数
图5-6定时器计数寄存器(CNT)
5.2.3定时器控制
(1)时钟源
定时器输入时钟低电平到高电平的转换(如果INVIP=1,则为高到低)启动定时器计数。
定时器的输入时钟源有两种:
●CLKSRC=0时选择TINP引脚的输入值。
这个信号是同步的,以防止任意的由外部异步输入引起的不稳定。
TINP引脚上的值反映在DATIN上。
●CLKSRC=1时选择内部时钟源,C64x使用1/8CPU时钟作为内部时钟源。
(2)计数
定时器计数器以CPU时钟速率运行,输入定时器的时钟信号指示作为内部计数使能信号的一个触发源。
边沿检测电路来进行边沿监测,一旦检测到有效的边沿,就产生一个CPU时钟宽的时钟使能脉冲。
对用户而言,计数器好像是由输入时钟产生的使能信号驱动进行计数一样。
定时器计数值与在定时器周期寄存器(PRD)中设的值相等时,定时器将在下一个CPU时钟被复位为0。
因此,计数器计数是从0到N的。
考虑这样一种情况,周期是2而定时器时钟源为1/4CPU时钟(CLKSRC=1)(C64x/C67x),一旦开始,定时器计数为:
0,0,0,0,1,1,1,1,2,0,0,0,1,1,1,1,2,0,0,0,……。
值得注意的是,虽然整个计数过程中计数器的值达到了2,但是8个CPU时钟周期(2×4),而不是12个CPU时钟周期(3×4)。
所以,用户在向下计数周期寄存器中设置的值应该是TIMERPERIOD(定时周期数),而不是TIMERPERIOD+1.
(3)启动与停止
表5-7阐述了如何使用控制寄存器的GO和HLD位使能定时器的基本操作。
配置一个定时器有以下四个基本步骤:
●如果定时器当前没有在挂起状态,则设置定时器为保持状态(
=0)。
注意在复位系统后,定时器就处于保持状态。
●在定时器周期寄存器(PRD)中写入期望的值。
●在定时器控制寄存器(CTL)中写入期望的值,不要改变GO和
位的值。
●将定时器控制寄存器(CTL)中的GO和
位置为1,启动定时器。
表5-7定时器的GO和HLD操作
操作
GO
描述
定时器挂起
0
0
不允许计数,计数器暂停
定时器挂起后重新启动
0
1
接着挂起时的值继续计数
保留
1
0
未定义
启动定时器
1
1
定时器计数器复位到0,且使能时开始计数,一旦设置,GO自动清零
(4)定时器脉冲产生
两种基本的脉冲产生模式分别是脉冲模式和时钟模式,可以用定时器控制寄存器(CTL)中的C/
位来选择模式。
在脉冲模式下,CTL中的PWID位可以设置脉冲的宽度为一个或者两个时钟周期。
该特点的目的是在TSTAT驱动TOUT输出时,提供最小的脉冲宽度。
在TOUT作为一个定时器引脚(FUNC=1)时,TSTAT驱动这个引脚,并且在INVOUT=1时可以被反置。
脉冲模式和时钟模式时不同的TSTAT定时参量方程式如表5-8所示。
表5-8TSTAT在脉冲模式和时钟模式下的参数
模式
频率
周期
最高宽
最低宽
脉冲模式
时钟模式
(5)控制寄存器中的边界情况
以下几种边界情况会影响定时器的工作:
●周期寄存器(PKD)和计数寄存器(CNT)的值都是0:
在器件复位后并且在定时器启动前,TSTAT保持为0。
在置
=1和GO=1,启动定时器后,定时器的操作依赖于C/P模式的选择。
在脉冲模式下,不管定时器是否被锁定,TSTAT都为1;在时钟模式下,当定时器被锁定时(
=0),TSTAT保持它当前的值;当
=1时,TSTAT会按1/2的CPU时钟频率变化。
●计数溢出:
当定时器计数寄存器(CNT)被置为一个比定时器周期寄存器(PRD)还要大的值时,定时器会首先计数到最大值FFFFFFFFh,然后恢复为0,再继续计数。
●向一个正在运行的定时器的寄存器中写入数据:
来自于外围设备总线而不考虑寄存器对CNT的数据更新和定时器控制寄存器(CTL)新的状态写入。
●在脉冲模式下小的定时器周期值:
如果脉冲模式下设置的周期PERIOD≤(PWID+1)时,TSTAT会一直保持为高电平。
(6)定时器引脚配置为通用I/O
在器件复位时,定时器引脚TINP和TOUT分别作为通用I/O引脚,通过设置定时器控制寄存器(CTL),引脚TINP和TOUT甚至能够在定时器运行时作为通用I/O引脚。
当定时器不运行时,TINP引脚作为通用输入引脚;在定时器运行时,如果CLKSRC=1则TINP引脚作为一个通用输入引脚,此时意味着一个内部时钟源被用来代替了TINP引脚。
TINP引脚的输入值在CTL的DATIN位上是可读的。
当CTL中的FUNC=0时,TOUT引脚是一个通用输出引脚,不管定时器操作如何。
FUNC位用来选择将DATOUT的值或TSTAT的值作为TOUT引脚的输出。
(7)定时器中断
TSTAT信号能直接产生CPU的中断和EDMA同步事件,中断的频率和TSTAT的频率相同。
(8)仿真
对于C64x,在仿真暂停期间,不管时钟源如何,定时器都会继续计数。
习题:
1.TMS320DM642有多少个中断源?
中断优先级是怎样地?
2.简述TMS320DM642的三个定时器寄存器(CTL、PRD、CNT)每位的含义。