一、预备知识
中断处理与cpu体系结构强相关,比如x86处理器与arm处理器对中断的处理方式是不一样的;本文对arm32的中断子系统进行分析,因此首先需要熟悉一些arm32体系结构的知识。
1.1 arm32处理器的运行模式
处理器模式
| 描述
| 用户模式(User, usr)
| 正常程序执行的模式
| 快速中断模式(FIQ, fiq)
| 用于高速数据传输和通道处理
| 外部中断模式(IRQ, irq)
| 用于通道的中断处理
| 特权模式(Supervisor, sve)
| 供操作系统使用的一种保护模式
| 数据访问中止模式(Abort, abt)
| 用于虚拟存储及存储保护
| 未定义指令中止模式(Undefined, und)
| 用于支持通过软件仿真硬件的协处理器
| 系统模式(System, sys)
| 用于运行特权级的操作系统任务
| 如上表所示,ARM32处理器共有7种运行模式,除用户模式外,其他6种称为特权模式,在特权模式下,程序可以访问所有的系统资源,也可以任意进行处理器模式切换(在用户模式下,无法进行模式切换)。其中,除系统模式外,其他5种特权模式又称为异常模式。
处理器模式可以通过软件修改状态寄存器CPSR进行切换,处理器也可以通过响应外部中断,自动修改CPSR寄存器进行工作模式切换。
1.2 arm32处理器的寄存器
Arm32处理器每一种运行模式都有一组寄存器,这些寄存器包括15个通用寄存器(R0~R14)、一个或两个状态寄存器以及程序计数器(PC);在所有的寄存器中,有些是各模式共用的物理寄存器,有些是各模式自己拥有的独立的物理寄存器,因此,在进行模式切换的时候,需要对各模式共用的物理寄存器进行上下文保存,以便现场恢复。各模式下的寄存器如下表所示。
用户模式
| 系统模式
| 特权模式
| 中止模式
| 未定义指令模式
| 外部中断模式
| 快速中断模式
| 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_svc
| SPSR_abt
| SPSR_und
| SPSR_irq
| SPSR_fiq
| 一般,R13作为栈指针SP,R14作为lr,存放当前子程序的返回地址。
1.3 中断控制器GIC
在arm体系结构中,所有的中断都是统一汇聚到中断控制器GIC,然后,由GIC统一处理分发给各个cpu;这个中断控制器GIC是ARM公司设计的,目前有V1~V4这几个版本,本文分析的是GIC-V2。
1.4 arm32处理器异常中断的处理方法
Arm32处理异常使用异常向量表的机制。针对arm32体系中的7种异常中断(复位、未定义指令、软件中断、指令预取中止、数据访问中止、外部中断请求以及快速中断请求),在内存中需要创建一张异常向量表(异常向量表的存放地址可以通过CP15协处理器的寄存器指定),表的每一项对应一种异常中断的处理函数;那么,当cpu检测到中断发生时,就会自动将处理器的工作模式切换到该异常模式(比如IRQ中断,处理器会自动将CPSR拷贝到SPSR_IRQ,然后,修改CPSR的相应bit,进入IRQ中断模式),然后将程序计数器PC指向对应的异常向量。
参考资料:《ARM体系结构与编程》
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |