1. 中断基础概念
1.1 中断的定义
中断(Interrupt)是一种硬件机制,允许外设或处理器内部事件异步地暂停当前正在执行的程序,转而执行一个预先定义好的中断服务程序(ISR, Interrupt Service Routine),处理完成后恢复原程序的执行。在ARM嵌入式系统中,中断是CPU与外部世界交互的核心通道。
核心特征:中断是异步的、由硬件触发的、优先级可编程的事件响应机制。它不需要CPU主动轮询,而是由事件源主动“通知”CPU。
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)等均通过异常/中断机制实现。
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系统中,典型的中断延迟路径如下:
- 外设中断信号建立时间:中断信号从外设到达GIC输入端口的电气延迟。
- GIC仲裁延迟:GIC进行优先级比较、中断分组、目标CPU选择的处理时间。
- CPU响应延迟:当前指令完成后,CPU识别中断请求、保存上下文、跳转到向量表的时间。
- ISR入口开销:保存通用寄存器、切换堆栈指针、获取中断号等软件开销。
- ISR执行时间:实际中断处理逻辑的执行时间。
- 中断返回开销:恢复上下文、执行中断返回指令的时间。
性能优化目标:在ARM Cortex-A72 + GICv3平台上,典型的中断延迟可控制在200~500ns(从外设触发到ISR第一条指令执行)。通过中断分组、优先级配置、CPU亲和性绑定和中断聚合(Interrupt Coalescing),可进一步降低延迟和抖动。