您的位置 首页 新能源

ARM 系统的异常中断

6.1ARM体系的异常中断6.1.1异常中断的种类当ARM系统正常的程序执行流程发生暂时的停止时,称之为异常,ARM系统对异常的响应…

6.1 ARM 体系的反常间断
6.1.1 反常间断的品种
当ARM 体系正常的程序履行流程产生暂时的间断时,称之为反常,ARM 体系对反常的
呼应进程称之为反常间断。例如当ARM 体系检测到外部的复位信号有用,ARM 体系的程
序就会跳转到复位处理程序。在处理反常之前,ARM 内核保存当时的处理器状况,这样当
处理程序结束时能够康复履行本来的程序。当然ARM 体系的产生反常间断后,会依照必定
的程序进行间断处理。下面咱们别离介绍ARM 体系反常,ARM 体系反常间断包含复位、
未界说的指令、软件间断,指令预取间断等。
●复位(Reset ):当处理器的复位引脚有用时,体系产生复位反常间断,程序跳转到复位异
常间断处理程序处履行。复位反常间断一般用在下面两种状况:①体系加电时 ②体系复位
时。
●未界说的指令(undefined instruction):当ARM 处理器或许时体系中是协处理器以为当时指
令未界说时,产生未界说指令反常间断。能够经过该反常间断机仿真浮点向量的运算。
●软件间断(Soft interrupt SWI):这时有用户界说的间断指令。可用于用户形式下的程序调
试特权操作指令。在实践的操作中能够经过该机制完成体系功用的调用。
●指令预取间断(Prefech Abort) :假如处理器预取的指令的地址不存在,或许该地址不答应
当时指令拜访,当该预取的指令履行时,处理器产生指令预取间断反常间断。
数据拜访间断(Data Abort):假如数据拜访指令的方针地址不存在,或许该地址不答应当时
指令拜访,处理器产生。
●外部间断请求(IRQ):当处理器的外部间断请求引脚有用,而且 CPSR 寄存器的 1 位控
制位被铲除时,处理器产生外部间断请求(IRQ)反常间断。体系中个外设一般经过该反常
间断请求处理器服务。
●快速间断请求(FIQ ):当处理器外部快速间断请求引脚有用,而且 CPSR 寄存器的 F
制位被铲除时,处理器产生外部间断请求(FIQ )反常间断。
6.1.2 处理反常间断的寄存器
间断形式(Abort abt ) 用于虚拟存储及存储保护
未界说指令形式(Undefined und ) 用于支撑经过软件仿真硬件的协处理器
体系形式(System sys) 用于运转特权级的操作体系
各种不同的处理器形式可能有对应于该处理器的物理寄存器组,如表 6.2 所示。其间,
R13_svc 表明特权形式下的R13 寄存器,R_13abt 表明间断形式下的R13 寄存器,其他的各
寄存器称号意义类推。
表 6.2 各处理器形式物理寄存器组
用户形式 体系形式 特权形式 间断形式 未界说指令形式 外部间断形式 快速间断形式
R0 R0 R0 R0 R0 R0 R0
R1 R1 R1 R1 R1 R1 R1
R2 R2 R2 R2 R2 R2 R2
R3 R3 R3 R3 R3 R3 R3
R4 R4 R4 R4 R4 R4 R4
R5 R5 R5 R5 R5 R5 R5
R6 R6 R6 R6 R6 R6 R6
R7 R7 R7 R7 R7 R7 R7
R8 R8 R8 R8 R8 R8 R8_fiq
R9 R9 R9 R9 R9 R9 R9_fiq
R10 R10 R10 R10 R10 R10 R10_fiq
R11 R11 R11 R11 R11 R11 R11_fiq
R12 R12 R12 R12 R12 R12 R12_fiq
R13 R13 R13_svc R13_abt R13_und R13_irq R13_fiq
R14 R14 R14_svc R14_abt R14_und R14_irq R14_fiq
PC PC PC PC PC PC PC
CPSR CPSR CPSR CPSR CPSR CPSR CPSR
SPSR_svs SPSR_abt SPSR_und SPSR_irq SPSR_fiq
假如反常间断处理程序中运用它自己的物理寄存器之外的其他寄存器,反常中段处理程序
有必要保存和康复这些寄存器。
上表中各物理寄存器的称号在ARM 汇编语言中并没有被预界说。用户运用这些寄存器时,
有必要运用伪操作RN 来界说这些称号。例如咱们要运用寄存器R13_abt 能够运用下面的句子。
R13_abt RN R13
当几个反常间断一起产生时,就有必要依照必定的次第来处理这些反常间断。在ARM 中通
过给各反常间断赋予必定的优先级来完成这种处理次第。当然有些反常间断时不可能一起发
生的,如指令预取间断反常间断和阮籍反常间断时由同一条指令的履行触发,它们时不可能
一起产生的。处理器履行一个特定的反常间断的进程中,称为处理器处于特定的间断形式。
各反常间断的间断向量地址以及间断的处理优先级如表 6.3 所示。
表 6.3 各反常间断的间断向量地址以及间断的处理优先级
间断向量地址 反常间断类型 反常间断形式 优先级(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 是反常间断处理程序运用的寄存器立表。标识符^指示将
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中。
当反常间断处理程序中运用了数据栈时,能够经过下面的指令在进入反常间断处理
程序时保存被间断程序保存的履行现场,在退出反常间断处理程序时康复被间断程序的
履行现场。反常间断处理程序中运用的数据栈由用户供给。
SUSB LR ,LR #8
STMFD SP ! ,{eglist ,lr}
;…
LDMFD SP !{reglist,pc}^
在上述指令中,reglist是反常间断处理程序中运用的寄存器列表。标识符^指示将
SPSR_mode 寄存器内容复制到当时程序状况寄存器 CPSR 中。该指令只能在特权形式下
运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/262729.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部