异常中断处理

上传人:油条 文档编号:3395257 上传时间:2017-08-04 格式:DOC 页数:6 大小:106KB
返回 下载 相关 举报
异常中断处理_第1页
第1页 / 共6页
异常中断处理_第2页
第2页 / 共6页
异常中断处理_第3页
第3页 / 共6页
异常中断处理_第4页
第4页 / 共6页
异常中断处理_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《异常中断处理》由会员分享,可在线阅读,更多相关《异常中断处理(6页珍藏版)》请在金锄头文库上搜索。

1、 异常中断处理概述1. ARM 中异常中断处理概述1) 在正常程序执行过程中,每执行一条 ARM 指令,程序计数器寄存器 PC 的值加 4 个字节;每执行一条 Thumb 指令,程序计数器寄存器 PC 的值加两个字节.整个过程是顺序执行.2) 通过跳转指令,程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行;B 指令用于执行跳转操作;BL 指令在执行跳转操作的同时,保存子程序的返回地址;BX 指令在执行跳转操作的同时,根据目标地址的最低位可以将程序状态切换到Thumb 状态;BLX 指令执行 3 个操作: 跳转到目标地址处执行,保存子程序的返回地址 (R15 保存在R14 中),

2、根据目标地址的最低位可以将程序状态切换到 Thumb 状态.3) 当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行.4) 在进入异常中断处理程序时,要保存被中断的程序的执行现场,在从异常中断处理程序退出时,要恢复被中断的程序的执行现场.本章讨论 ARM 体系中的异常中断机制.2. ARM 体系中异常中断种类.ARM 体系中的异常中断如下表所示:ARM 体系中的异常中断异常中断名称 含义复位(RESET) 当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行.复

3、位异常中断通常用在下面两种情况:系统加电时系统复位时跳转到复位中断向量处执行,称为软复位数据访问中止(Data Abort) 如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断快速中断请求(FIQ) 当处理器的外部快速中断请求引脚有效,而且CPSR 寄存器的 F 控制位被清除时,处理器产生外部中断请求(FIQ)异常中断外部中断请求(IRQ) 当处理器的外部中断请求引脚有效,而且 CPSR寄存器的 I 控制位被清除时,处理器产生外部中断请求(IRQ)异常中断 .系统中各外设通常通过该异常中断请求处理器服务预取指令中止(Prefech Abort) 如果

4、处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止异常中断软件中断(software interrupt SWI) 这是一个有用化定义的中断指令.可用于用户模式下的程序调用特权操作指令.在实时了操作系 统(RTOS)中可以通过该机制实现系统功能调用未定义的指令(undefined instruction) 当 ARM 处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断.可以通过该异常中断机制仿真浮点向量运算3. 异常中断向量表及异常中断优先级中断向量表中指定了各异常中断及其处理程序的对应关系.它通常存放在存储地址的

5、低端.在 ARM 体系中,异常中断向量表的大小为 32 字节.其中,每个异常中断占据 4 个字节大小,保留了 4 个字节空间.每个异常中断对应的中断向量表的 4 个字节的空间中存放了 一个跳转指令 或者一个 向 PC 寄存器中赋值的数据访问 指令.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行.当几个异常中断同时发生时,就必须按照一定的次序来处理这些异常中断.在 ARM中通过给各异常中断富裕一定的优先级来实现这种处理次序.当然有些异常中断是不坑能同时发生的,如指令预取中止异常中断和软件中断(SWI)异常中断是有同一条指令的执行触发的,他们是不可能同时发生的.处理器执行某个特定的异常中

6、断的过程中,称为处理器处于特定的中断模式.各异常中断的中断向量地址以及中断的处理优先级如表 2 所示.各异常中断的中短向量地址以及中断的处理优先级中断向量地址 异常中断类型 异常中断模式 优先级(6 最低)0x0 复位 特权模式(SVC) 10x4 未定义的指令 未定义指令中止模式(Undef) 60x8 软件中断(SWI) 特权模式(SVC) 60x0c 指令预取中止 中止模式 50x10 数据访问中止 中止模式 20x14 保留 未使用 未使用0x18 外部中断请求(IRQ) 外部中断(IRQ)模式 40x1c 快速中断请求(FIQ) 快速中断(FIQ)模式 34. 异常中断使用的寄存器各

7、异常中断对应着一定的处理器模式.应用程序通常运行在用户模式下.ARM 中的处理器模式如表 3 所示.ARM 中的处理器模式处理器模式 描述用户模式 正常程序执行的模式快速中断模式 用于高速数据传输和通道处理外部中断模式 用于通常的中断处理特权模式 供操作系统使用的一种保护模式中止模式 用于虚拟存储及存储保护未定义指令模式 用于支持通过软件仿真硬件的协处理器系统模式 用于运行特权级的操作系统任务各种不同的处理器模式可能有对应于该处理器模式的物理寄存器组,如表 4 所示,其中,R13_svc 表示特权模式下的 R13 寄存器,R13_abt 表示中止模式下的 R13 寄存器,其余的各寄存器名称含义

8、类推.表 4 各处理器模式的物理寄存器组 用户模式 系统模式 特权模式 中止模式 未定义指 令模式 外部中断 模式 快速中断 模式R0 R0 R0 R0 R0 R0 R0R1 R1 R1 R1 R1 R1 R1R2 R2 R2 R2 R2 R2 R2R3 R3 R3 R3 R3 R3 R3R4 R4 R4 R4 R4 R4 R4R5 R5 R5 R5 R5 R5 R5R6 R6 R6 R6 R6 R6 R6R7 R7 R7 R7 R7 R7 R7R8 R8 R8 R8 R8 R8 R8_fiqR9 R9 R9 R9 R9 R9 R9_fiqR10 R10 R10 R10 R10 R10 R10

9、_fiqR11 R11 R11 R11 R11 R11 R11_fiqR12 R12 R12 R12 R12 R12 R12_fiqR13 R13 R13_svc R13_abt R13_und R13_iiq R13_fiqR14 R14 R14_svc R14_abt R14_und R14_iiq R14_fiqPC PC PC PC PC PC PCCPSR CPSR CPSR CPSR CPSR CPSR CPSRSPSR_svc SPSR_abt SPSR_und SPSR_iiq SPSR_fiq如果异常中断处理程序中使用它自己的物理寄存器之外的其它寄存器,异常中断处理程序必须保

10、存和恢复这些寄存器.在表 4 中各物理寄存器的名称(如 R13_svc 等) 在 ARM 汇编语言中并没有被预定义 .用户使用这些寄存器时,必须使用 伪操作 RN 来定义这些名称 .如可以通过下面操作定义寄存器名称 R13_svc:R13_svc RN R13一. 进入和退出异常中断的过程1. ARM 处理器对异常中断的相应过程ARM 处理器对异常中断的响应过程如下:a. 保存处理器当前状态,中断屏蔽位以及各条件标志位.只是通过将当前程序状态寄存器 CPSR 的内容保存到将要执行的异常总段对应的 SPSR 寄存器中实现的.各异常中断有自己的物理 SPSR 寄存器.b. 设置当前程序 CPSR

11、中相应的位.包括设置 CPSR 中的位,使处理器进入相应的执行模式;设置 CPSR 中的位,禁止 IRQ:当进入 FIQ 模式时,禁止 FIQ中断.c. 将寄存器 LR_mode(R14)设置成返回地址,R14 从 R15 中得到 PC 的备份.d. 将程序计数器值 PC 设置成该异常中断的中断向量地址 ,从而跳转到相应的异常中断处理程序处执行.上述的处理器对异常中断的相应过程可以用如下的伪代码描述.e. 响应复位异常中断. 当处理器的复位引脚有效时,处理器中止当前指令.当处理器的复位引脚变成无效时,处理器开始执行下面的操作.R14_svc = UNPREDICTABLE valueSPSR_

12、svc = UNPREDICTABLE valueCPSR4:0 = 0b10011 /进入特权模式CPSR5 = 0 /切换到 ARM 状态CPSR6 = 1 /禁止 FIQ 异常中断CPSR7 = 1 /禁止 IRQ 中断If high vectors configured then PC = 0xffff0000ElsePC = 0x00000000f. 响应未定义指令异常中断处理器相应未定义指令异常中断时的处理过程如下面的伪代码所示.R14_und = address of next instruction after the undefined instructionSPSR_und

13、 = CPSRCPSR4:0 = 0b11011 /进入未定义指令异常中断模式CPSR5 = 0 /切换到 ARM 状态CPSR6 = 1 /禁止 FIQ 异常中断CPSR7 = 1 /禁止 IRQ 中断If high vectors configured then PC = 0xffff0004ElsePC = 0x00000004g. 响应 SWI 异常中断处理器相应 SWI 异常中断时的处理过程如下面的伪代码所示.R14_svc = address of next instruction after the SWI instructionSPSR_svc = CPSRCPSR4:0 =

14、0b10011 /进入特权模式CPSR5 = 0 /切换到 ARM 状态CPSR6 = 1 /禁止 FIQ 异常中断CPSR7 = 1 /禁止 IRQ 中断If high vectors configured then PC = 0xffff0008ElsePC = 0x00000008h. 响应指令预取中止异常中断.处理器相应指令预取中止异常会总段时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 4SPSR_abt = CPSRCPSR4:0 = 0b10111 /进入指令预取中止模式 CPSR5 = 0 /切换到 ARM 状态CPSR6 = 1 /禁止 FIQ 异常中断CPSR7 = 1 /禁止 IRQ 中断If high vectors configured then PC = 0xffff000cElsePC = 0x0000000ci. 响应数据访问中止异常中断处理器相应数据访问中止异常中断时的处理过程如下面的伪代码所示.R14_abt = address of the aborted instruction + 8SPSR_abt = CPSRCPSR4:0 = 0b10111 /进入数据访问中止模式CPSR5 = 0 /切换到 ARM

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号