中断事件触发时CPU与NVIC的协作机制详解
中断事件触发时CPU与NVIC的协作机制详解
一、中断触发阶段
当STM32的GPIO引脚检测到外部电平变化(如按键按下)时,中断响应流程开始:
- 外设信号触发:GPIO检测到预设的电平变化(上升沿/下降沿),通过EXTI(外部中断/事件控制器)线路发送中断请求信号12
- 中断标志置位:EXTI控制器将对应中断线的挂起寄存器(EXTI_PR)相应位置1,表示有中断待处理12
- NVIC接收请求:EXTI将中断信号传递给NVIC(嵌套向量中断控制器),NVIC根据中断编号(如EXTI0对应IRQn_EXTI0)记录该中断为"待定"(pending)状态34
二、NVIC处理阶段
NVIC作为中断管理的核心,执行以下关键操作:
-
优先级裁决:
- 检查新中断的抢占优先级是否高于当前正在处理的中断(如果有)
- 若优先级更高,NVIC会向CPU发出中断请求34
- STM32使用4位优先级分组(0-15),分为抢占优先级和子优先级56
-
中断向量定位:
- NVIC根据中断编号查找中断向量表,确定对应ISR(中断服务程序)的入口地址37
- 例如EXTI0中断对应EXTI0_IRQHandler函数地址1
-
状态管理:
- 将中断状态从"待定"(pending)改为"激活"(active)3
- 若中断已被使能(通过ISER寄存器),则准备触发CPU响应4