前置术语全称说明

  1. IRQ:Interrupt Request,中断请求 IRQ Line = 中断请求信号线,外设通往 NVIC 的物理信号线路
  2. NVIC:Nested Vectored Interrupt Controller,嵌套向量中断控制器
  3. MSI:Multi-Speed Internal,多速内部 RC 时钟(系统时钟源,整套中断硬件运行的时钟基础)
  4. EXTI:External Interrupt,外部 GPIO 引脚中断

一、中断完整两级传输模型

任意一次中断从产生到被 CPU 响应,必须依次经过中断源层、NVIC 调度层两道关卡,两层都有独立中断开关,只有两层全部打开,中断才能最终送达 CPU。

1)第一阶段:中断源层(外设 IRQ 信号产生与本地屏蔽)

(1)中断源定义

中断源指能够产生中断事件的硬件单元,分两类:

  • 片内外设:TIM 定时器、USART 串口、SPI、ADC、DMA 等;
  • 外部引脚:GPIO 引脚电平变化,对应 EXTI 外部中断。

每一个支持中断的硬件单元,都引出一根专属 IRQ Line(中断请求信号线),这条线路硬件直连内核 NVIC 的输入通道。

(2)中断源本地使能 / 屏蔽逻辑

外设内部自带中断允许寄存器,是中断传输第一道闸门:

  1. 外设检测到触发事件(串口接收完成、定时器溢出、引脚跳变),硬件自动置位中断标志位;
  2. 若外设寄存器内该路中断使能位开启,中断信号才会通过 IRQ Line 向上发送给 NVIC;
  3. 若外设中断使能关闭,哪怕硬件事件触发、中断标志置 1,信号也会被拦截,不会输出 IRQ 中断请求到 NVIC。

概括:中断源负责产生中断事件、第一层过滤 IRQ 中断信号。

2)第二阶段:NVIC 调度层(全局中断总控单元)

NVIC 全称 Nested Vectored Interrupt Controller(嵌套向量中断控制器),属于 Cortex-M4 内核内置硬件模块。芯片所有外设 IRQ 中断、内核异常全部接入 NVIC,只有 NVIC 拥有向 CPU 提交中断请求的权限,是整个芯片的中断调度核心机构。

NVIC 两大核心管控功能
① 独立通道使能 / 屏蔽(第二道中断闸门)

IRQ 信号经中断请求线送入 NVIC 后,NVIC 拥有独立寄存器(ISER/ICER)单独控制每一路 IRQ 通道:

  • 通道失能:NVIC 收到 IRQ 信号直接丢弃,不向 CPU 上报;
  • 通道使能:NVIC 锁存本次中断请求,进入优先级仲裁判断。

两层屏蔽区分:

  • 外设寄存器:控制「是否把 IRQ 信号发给 NVIC」;
  • NVIC 寄存器:控制「收到 IRQ 信号后,要不要上报 CPU」; 两级开关必须同时开启,中断才具备响应条件。
② 中断优先级仲裁与嵌套管理

STM32F4 采用 8 位优先级寄存器,拆分出抢占优先级、子优先级,支持 5 种优先级分组:

  1. 抢占优先级:决定中断嵌套能力。高抢占优先级的 IRQ 中断,可以打断当前正在执行的低抢占优先级中断,实现中断嵌套;(0~15   数字越低,优先级越高)
  2. 子优先级(响应优先级):仅用于同一抢占优先级下多路中断同时触发时,规定执行先后顺序,不能打断正在运行的中断。

运行逻辑: CPU 正在执行主程序 / 低优先级中断时,NVIC 收到更高优先级 IRQ 请求 → 硬件自动保存现场,跳转至对应中断服务函数; 若新 IRQ 优先级更低,则将该中断标记为挂起状态,等待当前代码执行完毕后再处理。

二、完整中断传输链路(串联 IRQ、NVIC)

外设触发事件 → 硬件置外设中断标志

→ 判断外设中断使能是否打开   

        → 关闭:中断终止,无 IRQ 信号输出   

        → 开启:生成 IRQ 中断请求,通过 IRQ Line 送入 NVIC     

                → 判断 NVIC 对应 IRQ 通道是否使能       

                        → 关闭:NVIC 屏蔽,中断挂起丢弃       

                        → 开启:NVIC 对比当前运行程序 / 中断优先级         

                                → 新 IRQ 优先级更高:向 CPU 提交中断,跳转中断服务函数            → 新 IRQ 优先级更低:存入挂起队列,等待当前任务结束再响应

三、MSI 时钟对整套中断机制的底层支撑

MSI(Multi-Speed Internal,多速内部 RC 时钟)是芯片系统时钟源,是所有中断硬件正常工作的底层基础:

  1. 外设必须配置时钟才能检测事件、生成 IRQ 中断信号;外设时钟关闭时,中断源完全失效;
  2. NVIC 属于内核附属硬件,依赖内核时钟运行,无时钟则无法完成 IRQ 优先级仲裁、向 CPU 上报中断;
  3. MSI 无需外部晶振,可作为系统时钟,在低功耗、无外部晶振场景下保障 IRQ、NVIC 整套中断体系正常运行。

四、全文核心总结

  1. 中断两道闸门:外设本地中断开关(控制 IRQ 输出)+ NVIC 通道开关(控制 IRQ 上报 CPU);
  2. IRQ(Interrupt Request,中断请求):外设向 NVIC 传输中断事件的信号载体;
  3. NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器):芯片唯一中断调度中心,负责 IRQ 通道开关、优先级仲裁、中断嵌套管理;
  4. MSI(Multi-Speed Internal,多速内部 RC 时钟):整套 IRQ、NVIC 中断链路运行的底层时钟基准,无时钟则全部中断功能失效。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐