ARM 异常及处理

td p { margin-bottom: 0in; }p { margin-bottom: 0.08in; }

ARM 支持 7种类型的异常(下图),当异常产生时, ARM CPU 强制程序从固定的内存点开始执行,这些固定的地址称为异常向量。

异常类型

处理器模式

向量地址

复位 reset

管理模式

0x00000000

未定义

未定义模式

0x00000004

软件中断 swi

管理模式

0x00000008

指令预取中止

中止模式

0x0000000c

数据中止

中止模式

0x00000010

中断 irq

中断模式

0x00000018

快速中断 fiq

快速中断模式

0x0000001c

 

当一种异常产生时,异常模式的分组寄存器 R14以及程序状态寄存器用来保存现场状态,其通用形式如下:

R14_<异常模式 > = return link

SPSR_<异常模式 > = CPSR

CPSR[4:0] = 异常模式

CPSR[5] = 0 /*执行于 ARM状态 */

IF <异常模式 > == Reset or FIQ THEN

CPSR[6] = 1 /*禁止快速中断 */

/*else CPSR[6] 不改变 */

CPSR[7] = 1 /*禁止普通中断 */

PC = 异常矢量地址 /*迫使处理器从固定的异常向量处开始执行 */

 

如果需要从异常处理中退出来,则令 CPSR = SPSR PC = R14,以实现先前运行程序的返回。

从上面可以看出, ARM在处理异常时,会禁止 IRQ的响应。

异常的优先级如下表:

优先级

异常类型

最高               1

复位

2

数据中止

3

FIQ

4

IRQ

5

指令预取中止

最低               6

未定义异常,软件中断 swi

可以看到,软件中断 swi,也是如 FIQ/IRQ之类的中断,只不过是用户可以触发的。

 

 

你可能感兴趣的:(c)