微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM 体系的异常中断

ARM 体系的异常中断

时间:11-21 来源:互联网 点击:

中断向量地址 异常中断类型 异常中断模式 优先级(6 级最低)

0x0 复位 特权模式(SVC) 1

0x4 未定义的指令 未定义的指令中止模式 6

0x8 软件中断 特权模式 6

0x10 数据访问中止 中止模式 2

0x14 保留 未使用 未使用

0x18 外部中断请求 外部中断模式 4

0x1c 快速中断请求 快速中断模式 3

6.1.4 进入异常中断

ARM 处理器对异常中断的响应过程如下:

(1) 保存处理器当前状态、中断屏蔽位以及各条件标志位。这是通过将当前程序状态寄

存器 CPSR 的内容保存到将要执行的异常中断对应的SPSR 寄存器中实现的。各异

常中断有自己的物理 SPSR 寄存器。

(2 ) 设置当前程序状态寄存器CPSR 中相应的位。包括设置CPSR 中的位,使处理器进

入相应的执行模式;设置 CPSR 中的位,禁止IRQ 中断,当进入FIQ 模式时,禁

止FIQ 中断。

(3) 将寄存器lr_mode 设置成返回地址。

(4 ) 将程序计数器值(PC ),设置成该异常中断的中断向量地址,从而跳转到相应的异

常中断处理程序执行。

下面我们将分别介绍各种异常中断响应时ARM 系统执行的指令。

1.响应复位异常中断

当处理器的复位引脚有效时,处理器中止当前指令。当处理器的复位引脚变成无效时,

处理器开始执行下面的操作。

R14_svc=UNPREDICTABLE value

SPSR_svs=UNPREDICTABLE value

CPSR[4:0]=0b10011

CPSR[5]=0

CPSR[6]=1

CPSR[7]=1

If high vectors configured then

PC=0Xffff0000

Else

PC=0x00000000

2. 响应未定义指令异常中断

处理器响应未定义指令异常中断时的处理过程如下面的伪指令所示。

R14_und=address of next interaction after the undefined instruction

SPSR_und=CPSR

CPSR[4:0]=0b11011

CPSR[5]=0

CPSR[7]=1

if high vectors configured then

PC=0Xffff0004

Else

PC=0x00000004

3. 响应 SWI 异常中断

处理器响应 SWI 异常中断时的处理过程如下面的伪代码所示。

R14_svc=address of next instruction after the SWI instruction

SPSR_svc=CPSR

CPSR[4:0]=0b10011

CPSR[5]=0

If high vectors configured then

PC=0Xffff0000

Else

PC=0x00000000

4. 响应指令预取中止异常中断

处理响应指令预取中止异常中断时的处理过程如下面的伪代码所示。

R14_aht=address of the aborted instruction + 4

SPSR_abt=CPSR

CPSR[4:0]=0b10111

CPSR[5]=0

CPSR[6]=1

CPSR[7]=1

If high vectors configured then

PC=0Xffff001C

Else

PC=0x0000001c

6.1.5 退出异常中断

ARM 系统处理完中断后从异常中断处理程序中返回包括下面的步骤。

● 恢复被中断的程序的处理状态,即将 SPSR_mode 寄存器内容复制到当前程序状态

寄存器 CPSR中。

● 返回到发生异常中断的指令的下一条指令处执行。即将 lr_mode 寄存器的内容复

制程序计数器 PC 中。

因为整个应用系统时从复位异常中断处理程序执行的,所以复位异常中断处理程序不需要返

回。

实际上,当异常中断发生时,程序程序计数器 PC 所致的位置对于各种不同的异常中断是

不同的。同样,返回地址对于各种不同的异常中断也是不同的。

下面我们分别介绍各种异常中断处理程序的返回方法。

1.SWI 和未定义指令异常中断处理程序的返回

SWI 和未定义指令异常中断是由当前执行的指令自身产生的,当 SWI 和未定义指令异常中断

产生时,程序及顺气 PC的值还未更新,它指向当前指令后面第 2 指令(对于 ARM指令来说,

它指向当前指令地址加 8 个字节的位置;对于 Thumb 指令来说,它指向当前指令地址加 4

个字节的位置)。当 SWI 和未定义指令异常中断发生时,处理器将值(PC-4)保存到异常模

式下的寄存器 lr_mode中。这时(PC-4)即指向当前的下一条指令。因此返回操作可以通过

下面的指令来实现:

MOV PC,LR

该指令将寄存器 LR 中的值复制到程序计数器 PC 中,实现程序返回,同时将 SPSR_mode

寄存器内容复制到当前程序状态寄存器 CPSR 中。

当异常中断处理程序中使用了数据栈时,可以通过下面的指令在进入异常中断处理程序时

保存被中断程序的执行现场,在退出异常中断处理程序时恢复被中断程序执行现场。异常中

断处理程序中使用的数据栈由用户提供。

STMFD SP! ,(reglist lr)

; ...

LDMFD SP! ,reglist pc)^

在上述指令中,reglist 是异常中断处理程序使用的寄存器立表。标识符^指示将

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top