1. 中断基础概念

1.1 中断的定义

中断(Interrupt)是一种硬件机制,允许外设或处理器内部事件异步地暂停当前正在执行的程序,转而执行一个预先定义好的中断服务程序(ISR, Interrupt Service Routine),处理完成后恢复原程序的执行。在ARM嵌入式系统中,中断是CPU与外部世界交互的核心通道。

核心特征:中断是异步的、由硬件触发的、优先级可编程的事件响应机制。它不需要CPU主动轮询,而是由事件源主动“通知”CPU。
中断触发与处理流程 主程序执行 正常指令流 中断事件发生 外设/定时器/外部信号 中断控制器仲裁 GIC 优先级/分发 CPU 保存上下文 压栈 PC/CPSR/寄存器 ISR 执行 中断服务程序 恢复上下文 返回主程序 关键时序点 ① 中断请求(IRQ/FIQ) ② 中断响应延迟 ③ 中断处理时间 ④ 中断返回

1.2 中断与轮询的区别

轮询(Polling)是CPU周期性地检查外设状态寄存器,判断是否有事件需要处理。中断则是由外设在事件发生时主动通知CPU。两者在实时性、CPU利用率和功耗方面存在本质差异。

对比维度 中断模式 轮询模式
触发方式 事件驱动,外设主动通知CPU CPU主动查询外设状态
CPU利用率 高——无事时CPU可休眠或执行其他任务 低——CPU被查询循环占用
实时性 高——事件发生后立即响应(微秒级) 低——响应延迟取决于查询周期
功耗 低——支持WFI/WFE等低功耗模式 高——CPU持续活跃
实现复杂度 较高——需配置中断控制器、编写ISR 低——仅需循环读取寄存器
适用场景 低延迟、低功耗、事件稀疏的系统 高频率查询、简单控制、中断资源受限
工程经验:在ARM Cortex-M系列MCU中,中断延迟通常为12~15个时钟周期;而轮询模式下,若查询周期为100μs,则事件响应延迟平均为50μs,最坏情况可达100μs。对于UART接收等高速外设,轮询极易导致数据丢失。

1.3 中断在嵌入式系统中的核心作用

中断是嵌入式系统的“神经系统”,它决定了系统对外部事件的响应能力、功耗管理能力和多任务调度能力。在ARM架构中,中断通过通用中断控制器(GIC)进行统一管理。

  • 实时响应:中断允许系统在微秒级时间内响应外部事件,满足工业控制、汽车电子等硬实时需求。
  • 功耗管理:结合WFI(Wait For Interrupt)指令,CPU可在无事件时进入深度睡眠,中断唤醒后恢复执行。
  • 任务调度:RTOS依赖定时器中断实现时间片轮转,依赖外设中断实现事件驱动调度。
  • 数据吞吐:DMA传输完成中断、网络数据包到达中断等机制,支撑高带宽数据流处理。
  • 系统异常处理:缺页异常、系统调用(SVC)、安全监控(Secure Monitor)等均通过异常/中断机制实现。
中断在嵌入式系统中的核心作用 中断机制 GIC + CPU + 外设 实时响应 功耗管理 任务调度 数据吞吐 异常处理 μs级响应 工业/汽车/医疗 事件驱动 RTOS/裸机调度

1.4 ARM架构中的中断类型

ARM处理器支持多种中断和异常类型,理解它们的层级关系是配置GIC的基础。

中断/异常类型 向量偏移 优先级 典型用途
复位 (Reset) 0x00 最高 系统上电初始化
未定义指令 (Undef) 0x04 高 非法指令捕获
系统调用 (SVC) 0x08 高 用户态请求内核服务
预取中止 (Prefetch Abort) 0x0C 高 指令访问异常
数据中止 (Data Abort) 0x10 高 数据访问异常
IRQ (普通中断) 0x18 低 外设中断请求
FIQ (快速中断) 0x1C 高 高速/低延迟中断
注意:在ARM Cortex-M系列中,中断向量表采用中断号映射方式,不再使用固定的0x18/0x1C地址。FIQ在Cortex-M中已被移除,取而代之的是可编程优先级的中断嵌套机制。GICv2/v3架构进一步统一了中断管理,支持SPI、PPI、SGI等多种中断类型。

1.5 中断延迟的关键组成

中断延迟是衡量中断性能的核心指标,它由硬件延迟和软件延迟两部分组成。在ARM+GIC系统中,典型的中断延迟路径如下:

  1. 外设中断信号建立时间:中断信号从外设到达GIC输入端口的电气延迟。
  2. GIC仲裁延迟:GIC进行优先级比较、中断分组、目标CPU选择的处理时间。
  3. CPU响应延迟:当前指令完成后,CPU识别中断请求、保存上下文、跳转到向量表的时间。
  4. ISR入口开销:保存通用寄存器、切换堆栈指针、获取中断号等软件开销。
  5. ISR执行时间:实际中断处理逻辑的执行时间。
  6. 中断返回开销:恢复上下文、执行中断返回指令的时间。
性能优化目标:在ARM Cortex-A72 + GICv3平台上,典型的中断延迟可控制在200~500ns(从外设触发到ISR第一条指令执行)。通过中断分组、优先级配置、CPU亲和性绑定和中断聚合(Interrupt Coalescing),可进一步降低延迟和抖动。