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"定位。

相关推荐
KaifuZeng1 小时前
运算放大器学习笔记-虚短和虚断
单片机·嵌入式硬件·运算放大器
张海森-1688202 小时前
cv610的spi0上适配tmi8150b电机ic
单片机
硅农程序猿2 小时前
芯片设计中的门级仿真(GLS):从零延迟验证到 SDF 时序反标
嵌入式硬件·硬件架构·risc-v·芯片
智购科技智能售货柜3 小时前
自动售货机主控方案怎么选?——单片机、树莓派、ESP32的实战对比~YH
单片机·嵌入式硬件
米饭不加菜3 小时前
电平转换电路
经验分享·嵌入式硬件·硬件工程
老k一步步来17 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
gwf21617 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
Freak嵌入式21 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则