ARM体系结构对中断的支持简述

ARM体系结构对中断的支持简述

ARM异常简介

ARM体系结构的异常共有reset, undefined instruction, software interrupt, prefetch abort, data abort, IRQ和FIQ七种。

  • Reset异常一般由处理器的reset引脚被设置(开机或模拟开机重置效果)触发,也可由软件跳转到reset中断向量 (0x0000)触发。
  • Undefined instruction异常发生在处理器无法识别当前执行的指令时。
  • SWI (Software Interrupt)是用户定义的中断指令,即陷入指令。
  • Prefetch abort异常的原因是从非法地址取指,但在流水线执行到该指令时才被触发。
  • Data abort异常由试图对非法地址读或写触发。
  • IRQ指外部中断请求 (External Interrupt Request),当处理器的外部中断请求引脚被设置且CPSR寄存器中的I位为0 (enable) 时被触发。
  • FIQ指外部快速中断请求 (External Fast Interrupt Request),当处理器的外部快速中断请求引脚被设置且CPSR寄存器中的F位为0 (enable)时被触发。

ARM的中断向量表置于内存映射的底部,每个表项32位,存放一条跳转到中断处理程序的分支指令。

下表展示了各异常类型的中断向量地址、处理器模式和优先级。

向量地址异常类型异常模式优先级 (1为最高,6为最低)
0x0ResetSupervisor (SVC)1
0x4Undefined InstructionUndef6
0x8Software Interrupt (SWI)Supervisor (SVC)6
0xCPrefetch AbortAbort5
0x10Data AbortAbort2
0x14Reserved--
0x18Interrupt (IRQ)Interrupt (IRQ)4
0x1CFast Interrupt (FIQ)Fast Interrupt (FIQ)3

如上表所示,异常会导致处理器模式改变。因此每个异常处理程序都独有寄存器的一个子集,称为banked registers, 其中每个模式都具备的是r13_mode (Stack Pointer), r14_mode (Link Register), SPSR_mode (Saved Program Status Register). 例如:r13_fiq是FIQ模式的Stack Pointer, r14_svc是Supervisor模式的Link Register, SPSR_abt是Abort模式的Saved Program Status Register. Banked registers的特点是不必在上下文切换时压入栈,因为每个模式的banked registers在物理上是分离的。FIQ模式的banked registers数量多于其他模式,因此上下文切换更快——也就是“快速”的由来。

中断处理流程中硬件负责的工作

进入中断处理程序前:

  1. 保存现场:将CPSR (Current Program Status Register)拷贝到即将进入的处理器模式的SPSR中;保存当前处理器模式、中断屏蔽寄存器、条件标志。
  2. 修改CPSR中处理器模式位,以进入对应的模式。
  3. 将本模式对应的banked registers映射进来。
  4. 关中断:任何异常均需关IRQ, 发生FIQ或Reset异常时需关FIQ.
  5. 将lr_mode设置为返回地址。
  6. 将PC设为对应的中断向量中的中断处理程序入口地址。

从中断处理程序返回:

总的来说,为将控制重新移交给发生异常的位置,需从spsr_mode中复原CPSR, 并从lr_mode中复原PC. 注意lr_mode中存放的返回地址值并不一定是发生异常时的PC值,而是根据异常类型而定。若中断处理程序将部分寄存器压入栈中,还需复原这些寄存器。






参考资料:

[1] http://osnet.cs.nchu.edu.tw/powpoint/Embedded94_1/Chapter 7 ARM Exceptions.pdf

[2] http://www.ic.unicamp.br/~celio/mc404-2013/arm-manuals/ARM_exception_slides.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值