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

ARM 体系的异常中断

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

SPSR_mode 寄存器内容复制到当前程序状态寄存器 CPSR 中。该指令只能在特权模式下使用。

2.IRQ和 FIQ 异常中断处理程序的返回

通常处理器执行完当前指令后,查询 IRQ 中断引脚及 FIQ 中断引脚,并且查看系统时否允

许 IRQ 中断及 FIQ 中断。如果有中断引脚有效,并且系统允许该中断产生,处理器将产生

IRQ 异常中断或 FIQ 异常中断。当 IRQ 和FIQ 异常中断产生时,程序计数器 PC 的值也经更

新,它指向当前指令后面第 3 条指令(对预 ARM 指令来说,它指向当前指令地址加 12 个字

节的位置;对于 Thumb 指令来说,它指向当前指令地址加 6 个字节的位置)。当 IRQ 和 FIQ

异常中断发生时,处理器将值(PC-4)保存到异常模式下的寄存器 lr_mode 中。这时(PC-4)

即指向当前指令后的第 2 条指令。因此返回操作可以通过下面的指令来实现:

SUBS PC , LD, #4

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

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

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

被中断程序的执行现场。异常中断处理程序中使用的数据栈由用户提供。

SUBS LR,LR,#4

STMFD SP!,{reglistl,lr}

; ...

LDMFD SP!{reglist ,pc}^

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

SPSR_mode 寄存器内容复制到当前程序程序寄存器 CPSR 中。该指令只能在特权模式下使用。

3.预取中止异常中断处理程序的返回

在指令预取时,如果目标地址时非法的,该指令将被标记称有问题的指令。这时,流水线上

该指令之前的指令继续执行。当执行到该被标记称有问题的指令时,处理器产生指令预取中

止异常中断。

当发生指令预取中止异常中断时,程序要返回到该有问题的指令处,重新读取并执行该

指令。因此指令预取中止异常中断程序应该返回到产生该指令预取中止异常中断的指令处。

而不是像前面两种情况下返回到发生中断的指令的下一条指令。

指令预取中止异常中断时由当前执行的指令自身产生的,当指令预取中止异常中断产生

时,程序计数器 PC 的值还未更新,指向它当前指令后面第 2 条指令(对于 ARM 指令来说,

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

节的位置)。当指令预取中止异常中断发生时,处理器将值(PC-4)保存到异常模式下的寄

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

的指令来实现:

SUSB PC , LR ,#4

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

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

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

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

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

SUBS LR ,LR ,#4

STMFD SP! ,{reglist ,lr}

;…

LDMFD SP!,{reglist ,pc}^

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

SPSR_mode 寄存器内容复制到当前程序状态寄存器 CPSR 中。该指令只能在特权模式下使用。

4.数据访问中止异常中断处理程序返回

当发生数据访问中止异常中断时,程序要返回到该有问题的数据访问处,重新访问该数

据,因此数据访问中止异常中断程序应该返回到产生该数据访问中止异常中断的指令

处,而不是像前面两种情况下返回到当前指令的下一条指令。

数据访问中止异常中断是由数据访问指令产生的,当数据访问中止异常中断产生

时,程序计数器 PC 的值已经更新,它指向当前指令后面第二条指令(对于 ARM 指令来

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

址加 4 个字节的位置)。当数据访问中止异常中断发生时,处理器将值(PC-4)保存到

异常模式下的寄存器 lr_mode 中。这时(PC-4)即指向当前指令的后第二条指令。因此

返回操作可以通过下面的指令来实现:

SUSB PC ,LR #8

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

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

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

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

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

网站地图

Top