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


    一、预备知识

      中断处理与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体系结构与编程》

  • 相关阅读:
    语音合成
    JAVA的18条BASE
    Java关键字final、static使用总结
    JAVA学习之路:不走弯路,就是捷径
    每个java初学者都应该搞懂的问题
    Tomcat5.5.9+JSP经典配置实例
    FineUI控件集合
    AngularJS基础
    数据库优化方案之SQL脚本优化
    数据库分库分表策略之MS-SQL读写分离方案
  • 原文地址:https://www.cnblogs.com/lztutumo/p/16411859.html
Copyright © 2020-2023  润新知