第7章 中断和异常
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
处理器中用来屏蔽中断的积存器和开 关如下: 关如下:
1、可屏蔽中断 人们把带有开关, 人们把带有开关,能阻止中断请求的 中断输入端叫做可屏蔽中断信号输入端。 中断输入端叫做可屏蔽中断信号输入端。 这类中断叫可屏蔽中断。 这类中断叫可屏蔽中断。 2、非屏蔽中断 人们把不带开关, 人们把不带开关,不能阻止中断请求 的中断输入端叫做非屏蔽中断信号输入端。 的中断输入端叫做非屏蔽中断信号输入端。 这类中断叫屏蔽中断。 这类中断叫屏蔽中断。
2、中断嵌套
7.1.4
中断服务程序
用来处理中断事件的程序叫做中断服 务程序。 务程序。 中断服务程序的一般结构如下所示: 中断服务程序的一般结构如下所示:
中断服务程序与普通子程序的重要差 别在于: 别在于: 中断服务程序要对中断嵌套进行必要 的管理。既中断服务程序要根据需要, 的管理。既中断服务程序要根据需要,对 程序状态寄存器中的中断允许标志进行相 应的设置。 应的设置。 7.1.5 中断向量和中断向量表
为了对处理器可以接收中断源的数目 进行扩充及对中断进行必要的管理, 进行扩充及对中断进行必要的管理,在中 断源和处理器之间还配有如下图所示的中 断控制器。 断控制器。
7.1.3
中断优先级及中断嵌套
1、中断优先级 处理器通常只有一个可屏蔽中断请求 输入端。对于具有多个中断源的系统来说, 输入端。对于具有多个中断源的系统来说, 当有两个或两个以上中断源同时发生中断 请求时就会出现所谓的竞争。 请求时就会出现所谓的竞争。 具体实现方法有两种: 具体实现方法有两种:硬件实现方法 和软件实现方法。 和软件实现方法。
为了与普通子程序的首地址进行区分, 为了与普通子程序的首地址进行区分, 中断服务程序的首地址 通常被叫做中断向 或中断矢量。 量,或中断矢量。 以后还会看到, 以后还会看到,凡是能直接或间接指 向中断服务程序的都叫中断向量。 向中断服务程序的都叫中断向量。 各种处理器如何来调用中断服务子程 序的方法不尽相同,通常有两种方法。 序的方法不尽相同,通常有两种方法。 调用方法和转移方法。 调用方法和转移方法。
I=1表示禁止IRQ中断;F=1表示禁止FIQ中断。 I=1表示禁止IRQ中断;F=1表示禁止FIQ中断。 表示禁止IRQ中断 表示禁止FIQ中断 禁止的异常/ I位值 F位值 禁止的异常/中断 中断优先级 复位(RESET) 1 1 复位(RESET)中断 1 未定义指令(UNDEF) 1 未定义指令(UNDEF)异常 6 软中断(SWI) 1 软中断(SWI) 6 预取指令中止(PABT) 1 预取指令中止(PABT)异常 5 数据中止(DABT) 1 数据中止(DABT)异常 2 中断(IRQ) 1 中断(IRQ) 4 快中断(FIQ) 1 1 快中断(FIQ) 1
处理器在响应中断(异常后),可以 处理器在响应中断(异常后),可以 ), 通过两次跳转转移到中断(异常) 通过两次跳转转移到中断(异常)服务程 两次跳转的示意图如下: 序。两次跳转的示意图如下:
2、中断(异常)向量表的保留项 中断(异常) 在实际应用系统中, 在实际应用系统中,常常会需要多个 中断(异常)向量表, 中断(异常)向量表,这时就需要利用这 个保留项中数据来对这多个向量表进行区 别。 ARM中断 异常) 中断( 7.2.2 ARM中断(异常)的管理 ARM按事件的紧急程度为每个中断 ARM按事件的紧急程度为每个中断 异常)都定义了一个固定的优先级别。 (异常)都定义了一个固定的优先级别。
(1)硬件实现方法 就是为计算机系统配备一套能按优先 等级对中断源进行排队的硬件电路, 等级对中断源进行排队的硬件电路,以保 证级别高的中断能先于级别低的中断被处 理器响应。 理器响应。 一般情况下, 一般情况下,这个优先排队机构可能 在处理器中有一套, 在处理器中有一套,在中断控制器中也有 一套,甚至在借口电路中也会有一套。 一套,甚至在借口电路中也会有一套。
处理器在响应中断源2的中断时, 处理器在响应中断源2的中断时,其程 序流程如下: 序流程如下:
7.1.6
中断的处理过程
1、处理器响应中断的条件 处理器响应中断的条件主要有以下几 个: (1)处理器程序状态寄存器的中断屏蔽 标志处于非屏蔽状态。 标志处于非屏蔽状态。 (2)没有更高级的中断中断请求正在响 应或正在发出、挂起。 应或正在发出、挂起。
(3)处理器在现行指令执行结束后。 处理器在现行指令执行结束后。 2、中断的处理器过程 当有中断请求发生且满足上述条件时, 当有中断请求发生且满足上述条件时, 计算机系统就会响应中断请求, 计算机系统就会响应中断请求,并自动将 被中断程序的下一条指令地址(断点地址) 被中断程序的下一条指令地址(断点地址) 保存到堆栈和关闭中断; 保存到堆栈和关闭中断;接下来便将自中 断向量表查询得的与该中断源对应的中断 向量送入PC 并转去执行中断服务程序。 PC, 向量送入PC,并转去执行中断服务程序。
1、调用方法 是在处理器收到中断中断请求之后, 是在处理器收到中断中断请求之后, 由中断系统硬件执行一条子程序调用指令 来调用中断服务程序。 来调用中断服务程序。 2、转移方法 是由中断系统硬件执行一条转移指令 来转向中断服务程序。 来转向中断服务程序。
但是,不管哪种方法, 但是,不管哪种方法,有一点是共同 的,即它们最终都需要获得中断服务程序 首地址——中断向量。 中断向量。 首地址 中断向量 所有的中断向量都必须存放在一个固 定的存储区域, 定的存储区域,这个集中存放了中断向量 或与中断向量相关信息的存储区域就叫做 中断向量表。 中断向量表。 一种中断处理硬件系统示意图如下: 一种中断处理硬件系统示意图如下:
1、普通中断(IRQ)和快中断(FIQ) 普通中断(IRQ)和快中断(FIQ) 外部设备的中断请求可以通过两个中 断请求输入端进入处理器, 断请求输入端进入处理器,其中一个是叫 IEQ的普通中断 另一个是叫做FIQ 的普通中断, FIQ的快 做IEQ的普通中断,另一个是叫做FIQ的快 中断。所谓普通中断就是前面讲过的中断, 中断。所谓普通中断就是前面讲过的中断, 而快中断就是能比普通中断响应快的中断。 而快中断就是能比普通中断响应快的中断。 用下面的指令实现现场数据的压栈: 用下面的指令实现现场数据的压栈:
当处理器遇有外部设备发生“ 当处理器遇有外部设备发生“紧急事 需要它来处理时,它就必须停下“ 件”需要它来处理时,它就必须停下“手 头上的工作”先去处理这个“紧急事件” 头上的工作”先去处理这个“紧急事件”。 处理器的这种工作过程, 处理器的这种工作过程,或者这种工作状 态就叫做中断。 态就叫做中断。 2、什么叫中断请求 当外部设备有紧急事件需要处理器进 行处理时, 行处理时,外部设备必须向处理器发送一
ARM有低端和高端两种向量表, ARM有低端和高端两种向量表,用户可 有低端和高端两种向量表 以根据需要选用其中一种,如下所示: 以根据需要选用其中一种,如下所示:
ARM中断(异常) ARM中断(异常)的各个向量在向量表 中断 中的分配如下: 中的分配如下:
中断(异常) 中断(异常) 复位(RESET) 复位(RESET) 未定义指令(UNDEF) 未定义指令(UNDEF) 软中断(SWI) 软中断(SWI) 预取指令中止(PABT) 预取指令中止(PABT) 数据中止(DABT) 数据中止(DABT) 保留 中断(IRQ) 中断(IRQ) 快中断(FIQ) 快中断(FIQ) 向量在低端向量表的地址 0x00000000 0x00000004 0x00000008 0x0000000C 0x00000010 0x00000014 0x00000018 0x0000001C 向量在高端向量表的地址 0xFFFF0000 0xFFFF0004 0xFFFF0008 0xFFFF000C 0xFFFF0010 0xFFFF0014 0xFFFF0018 0xFFFF001C
为了减少中断延迟,ARM在普通中断 为了减少中断延迟,ARM在普通中断 IRQ的基础上又增加了一个快中断FIQ, 的基础上又增加了一个快中断FIQ IRQ的基础上又增加了一个快中断FIQ,以 处理有快速要求的外设的中断。 处理有快速要求的外设的中断。 为减少延时,ARM在快中断中采取了 为减少延时,ARM在快中断中采取了 两个措施: 两个措施: 专门为快中断FIQ设置了一个FIQ模式, FIQ设置了一个FIQ模式 (1)专门为快中断FIQ设置了一个FIQ模式, 并为这个模式配置了较多的私有寄存器, 并为这个模式配置了较多的私有寄存器, 从而可使中断服务程序有足够的寄存
(2)软件实现方法 就是把所有中断源的中断请求信号分 成两路,其中一路经“ 成两路,其中一路经“或”逻辑送到处理 器的中断请求输入端, 器的中断请求输入端,而另一路则送入中 断接口电路经数据总线送入处理器。 断接口电路经数据总线送入处理器。 中断源的软件查询法电路的接线如下 图所示: 图所示:
软件查询法的中断服务程序的流程如下: 软件查询法的中断服务程序的流程如下:
R13!,{R0,R4;压入堆栈 STMFD R13!,{R0,R4-R12,LR} ;压入堆栈 用下面的指令将现场数据弹出: 用下面的指令将现场数据弹出: R13!,{R0,R4;压入堆栈 LDMFD R13!,{R0,R4-R12,PC} ;压入堆栈 这种压栈和出栈操作都比较费时,它 这种压栈和出栈操作都比较费时, 们增加了中断处理的延迟时间。另外, 们增加了中断处理的延迟时间。另外,由 于处理器在响应一个IRQ IRQ中断后要经历两 于处理器在响应一个IRQ中断后要经历两 次跳转才能转到中断服务程序, 次跳转才能转到中断服务程序,因此也增 加了一些延时。 加了一些延时。
当执行到中断服务程序末尾时, 当执行到中断服务程序末尾时,执行 中断返回指令或跳转指令, 中断返回指令或跳转指令,把保存的断点 地址送回PC PC, 地址送回PC,以在断点处接续执行被中断 的程序。 的程序。
7.2
ARM的中断(异常) ARM的中断(异常) 的中断
ARM处理器可以响应的中断(异常) ARM处理器可以响应的中断(异常) 处理器可以响应的中断 中断、快中断、复位中断、 有:中断、快中断、复位中断、软中断异 预取指令中止异常、 常、预取指令中止异常、数据中止异常和 未定义指令异常7 未定义指令异常7种。 ARM的中断 异常) 的中断( 7.2.1 ARM的中断(异常)向量表 1、低端和高端向量表
器来使用, 器来使用,而不必与被中断服务程序使用 同一组寄存器, 同一组寄存器,这样就免去了因寄存器冲 突而必需的保护及恢复现场工作。 突而必需的保护及恢复现场工作。 (2)ARM把FIQ的中断向量放在了中断 ARM把FIQ的中断向量放在了中断 异常)向量表末尾0X0000001C 0X0000001C处 (异常)向量表末尾0X0000001C处,因此 它后面没有其它中断向量, 它后面没有其它中断向量,允许用户将中 断服务车工许程序直接放在这里。 断服务车工许程序直接放在这里。 2、复位中断
第7 章Байду номын сангаас
中断和异常
本章重要内容 1、中断和异常的基本概念 2、中断(异常)服务程序的年结构 中断(异常) 3、处理器响应与处理中断(异常)的过 处理器响应与处理中断(异常) 程 4、ARM的中断系统 ARM的中断系统
7.1
中断和异常的基本概念
中断是主机与外设进行数据通信的重 要机制, 要机制,它负责处理处理器外部的异常事 异常实质上也是一种中断, 件;异常实质上也是一种中断,只不过它 主要负责处理处理器内部事件。 主要负责处理处理器内部事件。 7.1.1 中断和异常 1、什么叫中断
个电信号(脉冲或电平) 个电信号(脉冲或电平)来表示有事件需 要处理器来处理。 要处理器来处理。这个信号叫做中断请求 信号,或称中断请求。 信号,或称中断请求。 3、什么叫中断源 发出中断请求信号的外部设备或事件 就叫做中断源。 就叫做中断源。 4、什么叫异常
除了外部设备可以发出可以发出中断 请求之后, 请求之后,处理器内部也会有一些事件可 以发出中断请求, 以发出中断请求,例如读取指令出错或在 进行除法运算时除数为零等。 进行除法运算时除数为零等。为了与外部 事件引起的中断相区别, 事件引起的中断相区别,人们把这种由内 部事件引起的中断叫做异常。 部事件引起的中断叫做异常。 7.1.2 中断请求信号的屏蔽