linux arm32中断子系统学习总结(一)--- 预备知识

打印 上一主题 下一主题

主题 644|帖子 644|积分 1932

 
一、预备知识
 
  中断处理与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体系结构与编程》
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表