目录
一、概述
一个完整的中断子系统框架可以分为四个层次, 由上到下分别为:用户层、 通用层、 硬件相关层和硬件层, 每个层相关的介绍如下所示:
- 用户层:用户层是中断的使用者,主要包括各类设备驱动。 这些驱动程序通过中断相关的接口进行中断的申请和注册。 当外设触发中断时, 用户层驱动程序会进行相应的回调处理,执行特定的操作。
- 通用层:通用层也可称为框架层,它是硬件无关的层次。 通用层的代码在所有硬件平台上都是通用的,不依赖于具体的硬件架构或中断控制器。 通用层提供了统一的接口和功能, 用于管理和处理中断, 使得驱动程序能够在不同的硬件平台上复用。
- 硬件相关层:硬件相关层包含两部分代码。 一部分是与特定处理器架构相关的代码,比如 ARM64 处理器的中断处理相关代码。 这些代码负责处理特定架构的中断机制, 包括中断向量表、 中断处理程序等。 另一部分是中断控制器的驱动代码, 用于与中断控制器进行通信和配置。这些代码与具体的中断控制器硬件相关。
- 硬件层:硬件层位于最底层, 与具体的硬件连接相关。 它包括外设与 SoC(系统片上芯片)的物理连接部分。 中断信号从外设传递到中断控制器, 由中断控制器统一管理和路由到处理器,硬件层的设计和实现决定了中断信号的传递方式和硬件的中断处理能力。
二、中断控制器 GIC
中断控制器(Interrupt Controller)是中断子系统框架硬件中的一个关键组件,用于管理和分发系统中的中断信号。其中,GIC(Generic Interrupt Controller)是一种通用的中断控制器,常用于 ARM 架构的处理器系统中。
不同的架构有不同的中断控制器,STM32 中的中断控制器叫做 NVIC,ARM 架构中的中断控制器一般为 GIC。
GIC 的主要功能是接收来自各种外部设备或内部事件的中断请求,并根据优先级和预设规则,将这些中断请求分发给相应的中断处理器或 CPU 核心。GIC 通常包含多个中断输入通道和多个中断输出通道,以支持多个设备同时触发中断。
GIC采用了多级中断架构,其中包括SGI(Software Generated Interrupts)、PPI(Private Peripheral Interrupts)和 SPI(Shared Peripheral Interrupts)等级别的中断。SGI 是由软件产生的中断,PPI 是针对单个处理器核心的私有中断,SPI 是针对多个处理器核心的共享中断。
每个 GIC 版本及相应特性如下表所示:
版本 | 关键特性 | 常用核心 |
---|---|---|
GICV1 | 支持最多八个处理器核心(PE) 支持最多 1020 个中断 ID |
ARM Cortex-A5 MPCore ARM Cortex-A9 MPCore ARM Cortex-R7 MPCore |
GICV2 | GICv1 的所有关键特性 支持虚拟化 |
ARM Cortex-A7 MPCore ARM Cortex-A15 MPCore ARM Cortex-A53 MPCore ARM Cortex-A57 MPCore |
GICV3 | GICv2 的所有关键特性 支持超过 8 个处理器核心 支持基于消息的中断 支持超过 1020 个中断 ID CPU 接口寄存器的系统寄存器访问 增强的安全模型,分离安全和非安全的 Group1中断 |
ARM Cortex-A53 MPCore ARM Cortex-A57 MPCore ARM Cortex-A72 MPCore |
GICV4 | GICv3 的所有关键特性 虚拟中断的直接注入 |
ARM Cortex-A53 MPCore ARM Cortex-A57 MPCore ARM Cortex-A72 MPCore |
下面以 GICV3 讲解其结构功能,GIC V3.0 逻辑图组成如下所示:
GIC 中断控制器可以分为 Distributor 接口
、Redistributor 接口
和 CPU 接口
,下面是每个部分的说明:
1、Distributor 接口
Distributor
(中断仲裁器)用于 SPI(Shared peripheral interrupts)中断的管理,具有仲裁和分发的作用,会将中断发送给 Redistributor
。
Distributor
提供了一些编程接口或者说是寄存器,我们可以通过 Distributor
的编程接口实现如下操作。下面是Distributor
主要功能:
- 启用和禁用 SPI。
- 设置每个 SPI 的优先级级别。
- 每个 SPI 的路由信息。
- 将每个 SPI 设置为电平触发或边沿触发,生成基于消息的 SPI。
- 控制 SPI 的活动和挂起状态。
- 用于确定在每个安全状态中使用的程序员模型的控制(亲和