嵌入式系统的中断控制器(NVIC)
1. NVIC的核心功能
核心价值:NVIC通过硬件级中断管理、自动状态处理及低延迟优化,为实时系统提供确定性响应,是Cortex-M芯片实时性的基石。
中断优先级管理
- 支持多级可编程优先级(通常4-8位,如STM32用4位实现16级优先级),分为抢占优先级(中断嵌套)和子优先级(同优先级排队)。
- 优先级分组可配置(0-4组),适应不同场景需求(如无嵌套、完全抢占等)。
中断嵌套与低延迟处理
- 高抢占优先级中断可立即打断低优先级中断,实现硬件级嵌套。
- 通过尾链优化(Tail-Chaining) 和迟到中断处理(Late Arrival) 减少上下文切换时间,提升实时性。
中断向量化与自动状态保存
- 中断触发时自动跳转至向量表地址,无需软件查询中断源。
- 硬件自动保存/恢复现场(PC、PSR、R0-R3等寄存器),缩短延迟。
低功耗与唤醒控制
- 支持睡眠、停止、待机模式下的中断唤醒(如EXTI、RTC中断)。
- 软件可触发中断(NVIC_SetPendingIRQ()),用于调试或任务调度。
中断屏蔽与挂起
- 通过PRIMASK寄存器屏蔽所有中断(除NMI和硬错误)。
- 挂起寄存器(ISPR)管理延迟处理的中断
2. 选型
尽管NVIC是ARM Cortex-M内核标准组件,但各厂商会根据需求裁剪或扩展功能,不同芯片的NVIC实现差异本质是厂商对ARM标准的裁剪与扩展,开发时需查阅具体芯片手册,重点关注优先级位数、分组方式、唤醒源配置等。
STM32
- 实时控制场景(如电机控制):优先选STM32(EXTI+NVIC协作灵活)。
- 优先级分组固定:仅使用IP寄存器高4位,需通过NVIC_PriorityGroupConfig()分组。
- 与EXTI协同:GPIO中断需先配置EXTI线,再映射至NVIC
TI芯片
- 低功耗物联网:TI MSP432的深度休眠中断唤醒更具优势。
- 完整NVIC支持:保留Cortex-M全部特性(如256级优先级)。
- 低功耗强化:中断唤醒链路优化,响应时间短于通用Cortex-M。