• 沒有找到結果。

ARM 体系的异常

在文檔中 嵌入式计算机系统 (頁 50-59)

注意 :不是所有模式位的组合都定义了有 效的处理器模式,如果将非法值写入 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 输入端的低电平所产生的正常中断。

在文檔中 嵌入式计算机系统 (頁 50-59)

相關文件