资讯动态

ARM中断嵌套:CPSIE与CPSID解析

发布时间:2026/10/14 16:53:28 来源:尧图企业网站定制
一、为什么要在ISR中重新开启中断?在 ARM Cortex-A 系列处理器上,进入 IRQ 异常后,处理器通常会通过 CPSR 中的 I 位屏蔽普通 IRQ 中断。如果整个中断服务程序都保持 IRQ 屏蔽状态,那么即使 GIC 收到更高优先级的中断,也无法立即让 CPU 响应。为了实现中断嵌套,FreeRTOS 等操作系统可以在完成必要的现场保护后,主动重新开启 IRQ。这样,当更高优先级的中断到来时,就有机会打断当前 ISR,优先处理更紧急的任务。下面这段汇编代码,就是实现这一机制的关键部分:/* Let higher-priority GIC interrupts preempt the current handler. */ CPSIE i DSB ISB BLX r1 CPSID i DSB ISB它的核心思想是:执行中断处理函数之前开启 IRQ,处理函数返回后立即关闭 IRQ,为后续的异常返回和现场恢复提供受控的执行环境。二、逐条解析汇编指令1. CPSIE i:开启普通 IRQ 中断CPSIE iCPSIE是 Change Processor State Interrupt Enable 的缩写,这条指令用于清除 CPSR 中的 I 屏蔽位。I 位为 1:普通 IRQ 被屏蔽。I 位为 0:普通 IRQ 可以被 CPU 响应。执行这条指令后,如果 GIC 有符合条件的更高优先级中断等待处理,CPU 就可以响应新的 IRQ,从而形成中断嵌套。需要注意,CPSIE i只是允许 CPU 响应 IRQ,并不代表所有待处理中断都会立即执行。中断是否能够抢占,还取决于 GIC 的优先级、优先级屏蔽寄存器、当前运行优先级以及中断使能状态等条件。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑