第4章 向量中断控制器

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM7TDMI内核具有两个中断输入,分别为IRQ中 断和FIQ中断。但是芯片内部有许多中断源,最多可以有 32个中断输入请求。向量中断控制器的作用就是允许哪 些中断源可以产生中断、可以产生哪类中断、产生中断 后执行哪段服务程序。
中断请求输入0 ... 中断请求输入31
IRQ
VIC
FIQ
ARM7TDMI-S
IRQ状态寄存器(VICIRQStatus):
位 功能
[31:0]
当某位为1时表示对应位的中断源产生IRQ中断请求。
3 Sept. 2008 Confidential
4.2.7 软件中断寄存器
在一些特殊场合或者调试时,可能需要使用软件强制 产生某个中断请求。
软件中断寄存器(VICSoftInt):
向量地址寄存器(VICVectAddr):
位 功能
[31:0]
中断服务程序入口地址
3 Sept. 2008 Confidential
4.2.6 中断状态寄存器
如果使用了多个非向量IRQ中断或多个FIQ中断, 那么在发生中断后要在程序中查找中断源。通过IRQ 状态寄存器和FIQ状态寄存器可以了解到这些中断源 的中断请求状态。 任何在VIC中使能的中断都会把中断请求反映在 “所有中断状态寄存器(VICRawIntr)”中。
4.1.2 允许中断源产生中断
芯片内部许多部件都可以作为中断源,但并不是每个中断 源都需要在中断情况下进行操作,也可以通过其它方法来处理 各种状态。
比如通过串口发送一段数据,可以选择在一批发送结束后 产生中断,然后在中断服务程序中发送下一批数据。也可以通 过查询发送标志位来决定什么时候发送下一批数据。
LDR PC, [PC, #-0xff0]
0x0000 0000
异常向量表 ④ ⑤ 用户程序 ① ②
在执行该指令时,PC指向当前指 令后的第2条指令,即地址0x20。 该指令将内存地址:
0x20-0xFF0 = 0xFFFFF030
非向量IRQ中断:具有最低优先级;
中断源0 中断源1 …… 中断源18
19个 中断输入 13个未使用
VIC 将32个 中断输入 进行分配
FIQ中断
向量IRQ中断
非向量IRQ中断
3 Sept. 2008 Confidential
4.2 中断处理
3 Sept. 2008 Confidential
4.2.1向量IRQ中断
0xFFFF FFFF
VICVectAddr0 VICVectAddr LDR PC, [PC, ??? #-0xff0] IRQ_Eint0 IRQ_Eint0
0x0000 0000
⑤ ③
3 Sept. 2008 Confidential
4.2.10 图示IRQ中断的发生过程(续)
注意: 任何IRQ中断产生之后,微控制 器跳转到地址0x18执行代码,该 地址处的指令为:
VICVectCntlx[4:0]:分配给此优先级向量IRQ中断的中断源序号; VICVectCntlx[5]:该位为1,使能当前优先级的向量IRQ中断。否则为禁止。
向量地址寄存器(VICVectAddr0~15):
位 功能 [31:0] 中断服务程序入口地址
该寄存器中存放对应优先级向量IRQ中断服务程序的入口地址。
3 Sept. 2008 Confidential
4.1.3 选择产生中断的类型
ARM7TDMI内核具有FIQ和IRQ两个中断输入,所有中 断源产生的中断都可以选择产生其中一种中断。这通过中断 选择寄存器完成。
中断选择寄存器(VICIntSelect):
位 功能 31 保留 … 18 A/D转换器 17 外部中断3 … 2 ARM内核 1 — 0 WDT
I2C
SPI0 SPI1 PLL
SI(状态改变)
SPI中断标志(SPIF),模式错误(MODF) SPI中断标志(SPIF),模式错误(MODF) PLL锁定(PLOCK)
9
10 11 12
RTC
计数器增加(RTCCIF),报警(RTCALF)
13
3 Sept. 2008 Confidential
4.1.1 中断源列表(续)
3 Sept. 2008 Confidential
4.2.3 非向量IRQ中断
任何中断源都可以设置为非向量IRQ中断。它与 向量IRQ中断的区别在于前者不能为每个非向量IRQ 中断源设置服务程序地址,而是所有的非向量IRQ中 断都共用一个相同的服务程序入口地址。 当有多个中断源被设置为非向量IRQ中断时,需 要在用户程序中识别中断源,并分别作出处理。所以 非向量IRQ中断响应延时相对较长。
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所 示相同。向某位写入1时,允许对应的中断源产生中断。 中断使能清零寄存器(VICIntEnClr):
位 功能 31 保留 … 18 A/D转换器 17 外部中断3 … 2 ARM内核 1 — 0 WDT
与中断使能寄存器的功能相反,向某位写入1时,禁止对应的中断源产 生中断。
位 功能
[31:0]
当某位为1时,将产生与该位相对应的中断请求。
软件中断清零寄存器(VICSoftIntClear):

功能
[31:0]
当某位为1时,将清零VICSoftInt寄存器中对应位
3 Sept. 2008 Confidential
4.2.8 保护使能寄存器
在某些场合可能需要禁止在用户模式下访问VIC寄存 器,以提高软件的安全等级。
四、向量中断控制器
3 Sept. 2008 Confidential
第四章:向量中断控制器
目标: 通过本章的学习,学员应掌握如下知识 1) 中断基本设置 2) 中断处理 3)外部中断
时间:3 学时ቤተ መጻሕፍቲ ባይዱ教学方法:讲授PPT
3 Sept. 2008 Confidential
4.1 中断基本设置
• 概述
3 Sept. 2008 Confidential
4.2.2 向量IRQ中断相关寄存器
VICVectCntl0~15和VICVectAddr0~15两类寄存 器与向量IRQ中断设置有关,前者为中断源分配向量 IRQ中断的优先级,后者为该中断优先级设置服务程 序入口地址。寄存器名称最后的数字同时也代表该寄 存器控制的向量IRQ中断的优先级,数值越小优先级 越高。
保护使能寄存器(VICProtection):
位 功能
[31:1] 0

当该位为1时,只能在特权模式下访问VIC寄存器。
3 Sept. 2008 Confidential
4.2.9 IRQ中断的设计实例
设置外部中断0产生向量IRQ中断后执行中断服务程序 “IRQ_Eint0( )”。
步骤: 1.设置引脚连接模块,将P0.16 设置为外部中断功能; 2.设置所有中断为IRQ中断; 3.将外部中断0(在中断源列表 中序号14)设置到优先级0中, 并使能IRQ中断; 4.将外部中断0的中断服务程 序写入对应优先级的地址寄存 器中; C代码:
3 Sept. 2008 Confidential
4.2.6 中断状态寄存器(续)
所有中断状态寄存器(VICRawIntr):
位 功能
[31:0]
当某位为1时表示对应位的中断源产生中断请求。
FIQ状态寄存器(VICFIQStatus):
位 功能
[31:0]
当某位为1时表示对应位的中断源产生FIQ中断请求。
模块 系统控制 系统控制 系统控制 系统控制 A/D 保留
可产生中断的标志 外部中断0(EINT0) 外部中断1(EINT1) 外部中断2(EINT2) 外部中断3(EINT3) A/D转换器 保留
VIC通道号 14 15 16 17 18 19~31
3 Sept. 2008 Confidential
寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所 示相同。向某位写入1时,对应中断源产生的中断为FIQ中断,否则为 IRQ中断。
3 Sept. 2008 Confidential
4.1.4 中断类型
中断输入请求可以在VIC中被设置为以下三类: FIQ中断:具有最高优先级;
向量IRQ中断:具有中等优先级;
3 Sept. 2008 Confidential
4.1.1 中断源列表(续)
模块 UART1 PWM0
可产生中断的标志 Rx线状态(RLS),发送保持寄存器空(THRE) Rx数据可用(RDA),字符超时指示(CTI) 匹配0~6 (MR0,MR1,MR2,MR3,MR4,MR5,MR6)
VIC通道号 7 8
3 Sept. 2008 Confidential
4.2.5 产生中断后的服务程序地址
在发生向量IRQ中断后,VIC能将对应中断的服务程序 地址存入VICVectAddr寄存器中。如果为非向量中断,将把 VICDefVectAddr寄存器的值存入该寄存器。在异常向量表 的IRQ异常入口处放置一条指令,将VICVectAddr寄存器的 内容装入程序计数器(PC),就可以跳转到当前中断的服 务函数。 这样的设计可以减小中断响应延时。
VICIntEnable = (1 << 14); ...
5.清除外部中断0的标志后使 能外部中断0;
3 Sept. 2008 Confidential
4.2.10 图示IRQ中断的发生过程
1.正在执行用户程序; 2.外部中断0发生中断; 3.VIC硬件将中断服务程序地址 装入VICVectAddr寄存器; 4.程序跳转至异常向量表中IRQ 入口0x0018处; 5.执行指令跳转至VICVectAddr 寄存器中的中断服务地址; 6.中断服务程序执行完毕,返回 被中断的用户程序继续执行被中 断的代码。 ⑤ 用户程序 异常向量表 ④ ① ② ⑥ 中断服务程序
注意:如果将同一个中断源分配给多个使能的向量 IRQ中断,那么该中断源发生中断时,会使用最高优 先级(最低编号)的寄存器设置。
3 Sept. 2008 Confidential
4.2.2 向量IRQ中断相关寄存器(续)
向量控制寄存器(VICVectCntl0~15):
位 功能 7 - 6 - 5 EN [4:0] 中断源序号
...
PINSEL1 = (PINSEL1&0xFFFFFFFC)|0x01;
VICIntSelect = 0x00000000; VICVectCntl0 = (0x20 | 14); VICVectAddr0 = (int)IRQ_Eint0;
(1)
(2) (3) (4) (5) (5)
EXTINT = 0x01;
3 Sept. 2008 Confidential
4.1.1 中断源列表
模块 WDT — ARM内核 ARM内核 定时器0 定时器1 UART0 可产生中断的标志 看门狗中断(WDINT) 保留给软件中断 EmbeddedICE,DbgCommRx EmbeddedICE,DbgCommTx 匹配0~3(MR0,MR1,MR2,MR3) 捕获0~3(CR0,CR1,CR2,CR3) 匹配0~3(MR0,MR1,MR2,MR3) 捕获0~3(CR0,CR1,CR2,CR3) Rx线状态(RLS),发送保持寄存器空(THRE) Rx数据可用(RDA),字符超时指示(CTI) VIC通道号 0 1 2 3 4 5 6
允许中断源产生中断由寄存器VICIntEnable和VICIntEnClr控 制,前者使能中断,后者禁止中断。
3 Sept. 2008 Confidential
4.1.2 允许中断源产生中断(续)
中断使能寄存器(VICIntEnable):
位 功能 31 保留 … 18 A/D转换器 17 外部中断3 … 2 ARM内核 1 — 0 WDT
VIC最多支持16个向量IRQ中断,这些中断被分 为16个优先级,并且为每个优先级指定一个服务程序 入口地址。在发生向量IRQ中断后,相应优先级的服 务程序入口地址被装入向量地址寄存器VICVectAddr 中,通过一条ARM指令即可跳转到相应的服务程序入 口处,所以向量IRQ中断具有较快的中断响应。
3 Sept. 2008 Confidential
4.2.4 非向量IRQ中断相关寄存器
向量地址寄存器(VICDefVectAddr):

[31:0]
功能
中断服务程序入口地址
VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非 向量中断时该寄存器中保存的地址存入VICVectAddr寄存器。
相关文档
最新文档