1. 中断控制器基础概念

1.1 什么是中断控制器

中断控制器(Interrupt Controller)是 SoC 内部一个关键的硬件模块,负责管理来自多个外设的中断请求,并按优先级、使能状态和触发条件,将中断信号路由到 CPU 核心。它相当于中断系统的“交通指挥中心”,协调外设与 CPU 之间的异步事件通信。

核心定义:中断控制器是一个可编程硬件单元,它收集、仲裁、屏蔽和分发中断信号,使 CPU 能够高效响应外部或内部事件,而无需持续轮询外设状态。

1.2 中断控制器在 SoC 中的作用与地位

在嵌入式系统中,中断控制器是 CPU 与外设之间的关键桥梁。没有中断控制器,CPU 将不得不采用轮询方式检查每个外设的状态,导致严重的性能浪费。下表总结了中断控制器的核心作用:

作用维度 具体功能 对系统的影响
中断收集 接收来自多个外设(UART、I2C、GPIO、定时器等)的中断请求线 将分散的中断源统一管理,减少 CPU 引脚占用
优先级仲裁 根据预设优先级决定哪个中断先被处理 保证高实时性任务(如定时器、紧急错误)优先响应
中断屏蔽 允许软件单独启用或禁用某个中断源 实现临界区保护,避免不必要的中断干扰
中断分发 将中断信号路由到指定的 CPU 核心(多核系统) 支持 SMP 系统中的负载均衡和亲和性调度
中断类型转换 支持电平触发、边沿触发、脉冲触发等多种模式 适配不同外设的中断信号特性

1.3 典型中断处理流程

一个完整的中断处理流程涉及外设、中断控制器和 CPU 三个角色。下图展示了从外设触发中断到 CPU 执行中断服务例程(ISR)的典型路径:

典型中断处理流程 外设 (UART / GPIO / 定时器) 中断控制器 (GIC / NVIC / PIC) CPU 核心 (ARM / RISC-V / x86) 中断请求 (IRQ 信号) FIQ / IRQ (已仲裁) ① 中断收集与锁存 ② 优先级仲裁 ③ 屏蔽检查 ④ 中断向量生成 ⑤ 保存上下文 ⑥ 跳转 ISR ⑦ 中断处理 ⑧ 恢复上下文 中断返回(清除中断标志)

1.4 常见中断控制器类型

不同架构和厂商的 SoC 采用不同类型的中断控制器。下表对比了嵌入式领域最常见的几种中断控制器:

类型 全称 典型架构 特点
GIC Generic Interrupt Controller ARM Cortex-A 系列 支持多核分发、SPI/PPI/SGI 三种中断类型、安全扩展
NVIC Nested Vectored Interrupt Controller ARM Cortex-M 系列 硬件中断嵌套、向量化中断、低延迟(~12 个时钟周期)
PLIC Platform-Level Interrupt Controller RISC-V 可扩展、支持大量中断源、软件可配置优先级
PIC Programmable Interrupt Controller x86 / 旧式 SoC 经典 8259A 架构、级联支持、固定优先级
INTC Interrupt Controller(厂商自定义) NXP / TI / STM32 等 厂商定制、通常集成在 SoC 内部、功能因芯片而异

1.5 中断控制器在设备树中的角色

在设备树(Device Tree)中,中断控制器通过特定的节点和属性来描述。Linux 内核在启动时解析这些描述,建立中断映射关系,使驱动能够正确注册和响应中断。设备树中与中断控制器相关的核心概念包括:

  • interrupt-controller 属性:标记节点为中断控制器,表明该节点可以接收和分发中断。
  • #interrupt-cells 属性:定义中断描述符所需的单元数(如 1、2 或 3 个 cell)。
  • interrupt-parent 属性:指定外设节点连接到哪个中断控制器。
  • interrupts 属性:描述外设的中断请求参数(中断号、触发类型等)。
  • interrupt-map 属性:用于中断控制器的级联或路由映射。
学习提示:理解中断控制器的基础概念是掌握 DTS 中断节点定义的前提。后续章节将深入讲解每个属性的语法规则、cell 编码方式以及实际案例。建议先熟悉本节的 SoC 级中断架构图,建立整体认知。

1.6 中断控制器在 SoC 中的位置

下图展示了中断控制器在典型 SoC 架构中的位置及其与各模块的连接关系:

中断控制器在 SoC 架构中的位置 CPU 核心 (Cortex-A / RISC-V) 中断控制器 (GIC / NVIC / PLIC) 系统总线(AXI / AHB) UART / I2C 串行通信外设 GPIO / 定时器 通用 I/O 与计时 DMA / 存储 数据搬运与存储 以太网 / USB 高速网络接口 IRQ/FIQ 中断请求线
常见误解:初学者常认为中断控制器只负责“转发”中断信号。实际上,现代中断控制器(如 GICv3)还承担中断虚拟化、安全状态隔离、消息信号中断(MSI)转换等高级功能。在设备树中描述这些功能时,需要额外的属性和 cell 配置。

1.7 中断控制器与设备树的映射关系

在设备树中,中断控制器节点与硬件中断控制器一一对应。每个外设节点通过 interrupt-parent 和 interrupts 属性描述其中断连接。这种映射关系可以概括为:

  • 硬件层:外设 → 中断请求线 → 中断控制器 → CPU
  • 软件层(DTS):外设节点 → interrupts 属性 → interrupt-parent → 中断控制器节点

这种分层映射使得 Linux 内核可以在不修改驱动代码的情况下,通过设备树适配不同 SoC 的中断拓扑结构,这也是设备树设计的核心优势之一。