注意 :不是所有模式位的组合都定义了有 效的处理器模式,如果将非法值写入 M[4:0]中,
2.8 ARM 体系的异常
• 异常简介
只要正常的程序流被暂时中止,处理器就进入异 常模式 。
例如在用户模式下执行程序时,当外设向处 理器内核发出中断请求导致内核从用户模式切换到异 常中断模式。如果同时发生两个或更多异常,那么将按照固定 的顺序来处理异常。
• 异常入口/出口汇总
下表所示为异常返回地址值以及退出异 常处理程序所推荐使用的指令。
异常或入口 返回指令 返回地址
SWI MOVS PC,R14_svc R14 未定义的指令 MOVS PC,R14_und R14 预取中止 SUBS PC,R14_abt,#4 R14-4 快速中断 SUBS PC,R14_fiq,#4 R14-4 中断 SUBS PC,R14_irq,#4 R14-4 数据中止 SUBS PC,R14_abt,#8 R14-8
复位 无 -
注意:“MOVS PC,R14_svc”是指在管理模式执行 MOVS PC,R14 指令,同样类似的指令还有“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等。
2.8 ARM 体系的异常
• 异常向量表
地址 异常 进入时的模式 进入时I的状态 进入时F的状态
0x00000000 复位 管理 禁止 禁止
0x00000004 未定义指令 未定义 I F 0x00000008 软件中断异常 管理 禁止 F 0x0000000C 中止(预取) 中止 I F 0x00000010 中止(数据) 中止 I F
0x00000014 保留 保留 - -
0x00000018 IRQ 中断 禁止 F
0x0000001C FIQ 快速中断 禁止 禁止
注:表中的I和F表示不对该位有影响,保留原来的值。
2.8 ARM 体系的异常
• 异常优先级
当多个异常同时发生时,⼀一个固定的优先级决定 系统处理它们的顺序。
优先级 异常
1 复位
2 数据中止 3 FIQ
4 IRQ
5 预取指中止
6 未定义指令中止 6 软件中断异常 优
先 级 由 高 到 低
2.8 ARM 体系的异常
BackAddr JumpAddr
UserMode
ExceptionMode
程序代码正常运行在用户模式下。
2.8 ARM 体系的异常
• 异常的进入
当⼀一个异常导致模式切换时,内核自动的做如下处理:
• 将异常处理程序的返回地址(加固定的偏移量)保存 到相应异常模式下的LR;
• 将CPSR的当前值保存到相应异常模式下的SPSR;
• 设置CPSR为相应的异常模式;
• 设置PC为相应异常处理程序的中断入口向量地址,跳 转到相应的异常中断处理程序执行;
2.8 ARM 体系的异常
• 异常的退出
当异常处理程序结束时,异常处理程序必须:
• 返回到发生异常中断的指令的下⼀一条指令处执行,即 就是说将LR中的值减去偏移量后移入PC;
• 将SPSR的值复制回CPSR;
SPSR 异常模式
用户模式
CPSR R15(PC) R14(LR) R0~R13
-
BackAddr CurrentAddr
UserMode
ExceptionMode
BackAddr-Off
2.8 ARM 体系的异常
• 异常的退出
当异常处理程序结束时,异常处理程序必须:
• 返回到发生异常中断的指令的下⼀一条指令处执行,即 就是说将LR中的值减去偏移量后移入PC;
• 将SPSR的值复制回CPSR;
• 清零在入口处置位的中断禁止标志。
2.8 ARM 体系的异常
• 复位异常
当nRESET信号被拉低时,ARM处理器放弃正在 执行的指令,等到nRESET信号再次变高时,处理器执 行以下操作:
• 强制M[4:0]变为b10011,系统进入管理模式;
• 将CPSR中的标志位I和F置位,
IRQ
与FIQ
中断被禁止;• 将CPSR中的标志位T清零,处理器处于
ARM状态
;• 强制PC从地址
0x00
开始对下⼀一条指令进行取指;• 返回到ARM状态并恢复执行。
2.8 ARM 体系的异常
• 中断请求异常
只有当CPSR中相应的中断屏蔽位被清除时,才可 能发生IRQ异常,中断请求(IRQ)异常是⼀一个由nIRQ 输入端的低电平所产生的正常中断。