1. 片上外设中断基础概念
中断是现代嵌入式系统中最重要的机制之一,它允许处理器在执行主程序的同时,能够及时响应外部事件或内部异常。在片上系统(SoC)设计中,中断控制器通常作为核心外设集成在芯片内部,管理着来自各种外设模块的中断请求。
中断本质上是一种硬件触发的服务请求机制。当某个外设需要CPU介入处理时(比如定时器溢出、串口收到数据、GPIO电平变化等),会通过中断线向CPU发出请求信号。CPU在完成当前指令后,会暂停正在执行的程序,保存现场,转而执行与该中断对应的服务程序(ISR),处理完毕后再恢复原先的执行流程。
提示:中断响应时间(从触发到进入ISR的时间)是评估系统实时性的关键指标,通常以时钟周期为单位计算。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中断系统的硬件架构
2.1 典型中断控制器结构
现代MCU的中断控制器通常包含以下关键组件:
- 中断源寄存器(IRQ):记录各个外设的中断请求状态
- 中断屏蔽寄存器(IMR):控制哪些中断源被启用
- 优先级寄存器(IPR):设置不同中断源的优先级
- 向量表:存储各个中断服务程序的入口地址
以STM32系列为例,其NVIC(嵌套向量中断控制器)支持:
- 多达240个独立中断源
- 16个可编程优先级级别(4位优先级分组)
- 低延迟的中断响应(最短6个时钟周期)
2.2 中断信号路径
一个完整的中断信号传递路径通常包括:
- 外设触发中断条件(如定时器溢出)
- 中断信号经过边沿/电平检测电路
- 信号到达中断控制器进行优先级裁决
- CPU响应中断,保存上下文
- 根据向量表跳转到对应ISR
- ISR执行完毕后恢复现场
3. 中断编程实践要点
3.1 中断服务程序(ISR)编写规范
编写ISR时需要特别注意:
- 保持ISR尽可能简短,避免复杂运算
- 使用volatile修饰共享变量
- 禁止在ISR内调用可能阻塞的函数(如printf)
- 清除中断标志位防止重复触发
c复制// STM32标准外设库中断示例
void TIM2_IRQHandler(void) {
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
// 处理定时器更新事件
TI
