NVIC:Cortex-M内核的“中断CPU”

你有没有想过一个问题:

多个外设同时产生中断,谁先执行?高优先级中断来了,低优先级中断怎么办?

NVIC说了算。

NVIC(Nested Vectored Interrupt Controller)是Cortex-M内核的"中断CPU"------专门管中断的硬件模块,不依赖软件轮询。

NVIC的五大核心能力

1. 优先级仲裁

  • 抢占优先级:决定能否打断别人(数值越小越高)
  • 子优先级:抢占相同时决定谁先执行(不能打断)
  • 自然优先级:向量表位置(最后的仲裁)

2. 硬件向量取址

中断触发后,NVIC直接从向量表取ISR地址(无需软件查中断标志),配合硬件压栈,中断响应仅12个时钟周期。

3. 尾链优化

中断A未退出、中断B已挂起→跳过A的出栈和B的入栈,直接执行B,连续响应仅6个时钟周期。

4. 优先级分组

SCB->AIRCR的PRIGROUP字段决定4个优先级位如何切分(分组0~4,默认分组4:4位抢占,0位子优先)。

5. 中断屏蔽与控制

  • ISER/ICER:使能/禁用中断
  • ISPR/ICPR:挂起/清除挂起(软件触发中断)
  • IABR:查询中断是否正在执行

可配置的16级优先级

NVIC支持最多16级抢占优先级(分组4),数值0最高、15最低。

中断响应流程(硬件自动完成)

  1. 外设产生中断请求
  2. NVIC裁决优先级(与当前中断比较,判断是否嵌套)
  3. 硬件自动压栈(8个寄存器,32字节)
  4. 从向量表取ISR地址
  5. 跳转执行ISR
  6. ISR返回(硬件自动出栈)

压栈、取址、出栈都是硬件完成,无需软件PUSH/POP。

这个故事的启示, NVIC不是"外设",是Cortex-M内核的组成部分。没有NVIC,中断响应需要软件查询标志、软件压栈------慢且不确定。 NVIC让ARM32的中断响应快且确定(12个时钟周期)。写在最后, NVIC的5个核心能力:优先级仲裁、硬件向量取址、尾链优化、优先级分组、中断屏蔽控制------五个功能,撑起整个中断系统。


(本文灵感源于于振南《新概念ARM32单片机》教程第5.4节、第5.5节、第5.6节、第5.8节。)

觉得有用?点赞、转发,让更多人看懂NVIC的"中断CPU"定位。

相关推荐
国科安芯40 分钟前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息
AOI小白新手上路2 小时前
韦东山 3-5 I.MX6ULL 的 LED 编程 · 学习笔记
arm开发·笔记·单片机·学习·架构·硬件架构
测试学习test2 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
xingzhemengyou12 小时前
STM32对函数进行CRC校验
stm32·单片机·嵌入式硬件
FPGA小徐2 小时前
STM32引脚详解:PC13-TAMPER-RTC 多功能复用引脚完全剖析(踩坑+配置+布线)
单片机·嵌入式硬件
M78佐菲3 小时前
ARM学习笔记(9)
linux·arm开发·笔记·嵌入式硬件·学习
铅笔小新z3 小时前
【stm32】中断与异常
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi3 小时前
无线遥控电动阀门开关模块设计(论文+源码)
单片机·无线遥控
番茄灭世神4 小时前
PN学堂GD32教程第11篇——I2C与EEPROM
c语言·stm32·单片机·嵌入式·gd32
阿钱真强道4 小时前
27 嵌入式操作系统 | C 网关:串口 ⇄ UDP 转发(先用 UDP 当上位机替身)
c语言·单片机·网关·udp·uloop