ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器

ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器

这三个是 ARM Cortex-M 系列处理器 中的关键系统异常屏蔽寄存器,用于控制中断和异常的行为。下面分别解释:


1. PRIMASK(优先级屏蔽寄存器)

  • 作用:临时屏蔽所有可配置优先级的中断(即除NMI、HardFault外的异常)。
  • 位宽:1位(只有最低位有效)。
    • 0:允许所有中断(默认)。
    • 1:屏蔽所有可屏蔽中断(进入临界区)。
  • 使用场景
    • 保护临界代码,防止被中断打断。
    • 通常用 __disable_irq()__enable_irq() CMSIS函数操作。
  • 注意:不影响NMI、HardFault等不可屏蔽异常。

2. FAULTMASK(故障屏蔽寄存器)

  • 作用 :屏蔽除NMI外的所有异常(包括可配置优先级的中断和HardFault)。
  • 位宽:1位(只有最低位有效)。
    • 0:允许所有异常(默认)。
    • 1:屏蔽所有异常(仅NMI能响应)。
  • 使用场景
    • 用于故障处理程序(如HardFault)中,防止其他异常干扰。
    • 可以屏蔽HardFault自身,使当前故障升级为NMI。
  • 注意:通常只有操作系统或错误恢复代码使用。

3. BASEPRI(基础优先级寄存器)

  • 作用 :屏蔽优先级低于或等于某个阈值的中断。
  • 位宽:取决于具体Cortex-M内核(如M3/M4为8位,支持256级优先级)。
    • 0:关闭屏蔽功能(默认)。
    • 非0:屏蔽所有优先级值大于等于该数值的中断(数值越大,逻辑优先级越低)。
  • 使用场景
    • 选择性屏蔽低优先级中断,允许高优先级中断响应。
    • 更精细的临界区保护。
  • 示例
    • 设置 BASEPRI = 0x20,则屏蔽优先级 ≥ 0x20(数字越大优先级越低)的中断。
    • 允许优先级更高的中断(数值 < 0x20)继续响应。

三者的比较

寄存器 屏蔽对象 是否屏蔽NMI/HardFault 粒度
PRIMASK 所有可屏蔽中断 全有或全无
FAULTMASK 所有中断 + HardFault 仅NMI可响应 全有或全无
BASEPRI 优先级低于等于某阈值的中断 优先级阈值

操作方式(以Cortex-M为例)

汇编指令:

assembly 复制代码
CPSID I   ; 置位PRIMASK(关中断)
CPSIE I   ; 清零PRIMASK(开中断)
CPSID F   ; 置位FAULTMASK
CPSIE F   ; 清零FAULTMASK
MSR BASEPRI, r0 ; 设置BASEPRI
MRS r0, BASEPRI ; 读取BASEPRI

CMSIS函数(C语言):

c 复制代码
void __disable_irq(void);    // 置位 PRIMASK
void __enable_irq(void);     // 清零 PRIMASK
void __set_FAULTMASK(uint32_t value);
uint32_t __get_FAULTMASK(void);
void __set_BASEPRI(uint32_t value);
uint32_t __get_BASEPRI(void);

典型使用场景

  1. 实时任务保护 :使用 PRIMASKBASEPRI 保护短暂临界区。
  2. 错误处理 :在 HardFault 处理中操作 FAULTMASK 避免嵌套异常。
  3. 任务调度 :RTOS 在切换上下文时用 BASEPRI 屏蔽低优先级中断。

总结:这三个寄存器是 Cortex-M 异常/中断管理的关键,PRIMASK 用于全局中断开关,FAULTMASK 用于故障处理时的强屏蔽,BASEPRI 提供基于优先级的精细中断控制。

相关推荐
漫谈数据智理14 小时前
从参考架构到可运行体系如何理解 IDSA 的最新进展
架构·高质量数据集
2601_9637491014 小时前
越华环保集团污水监测云边协同架构:数字化污水治理Modbus-MQTT链路实现方案
人工智能·架构
智购科技自动售卖机厂家15 小时前
从STM32到RK3588——自动售货机嵌入式主控方案的架构演进~YH
stm32·嵌入式硬件·物联网·架构·lua·零售·symfony
黄华SJ520it16 小时前
二二复制定点裂变双轨商城系统开发:原理、架构与实战指南
运维·小程序·架构·系统开发
振南的单片机世界16 小时前
2MHz/50MHz玄机:GPIO速度档选错,信号直接“烂尾”
arm开发·stm32·单片机·嵌入式硬件
混沌福王16 小时前
三端统一的应用架构 —— 《从零构建 7×24 小时 AI Agent》第二章
架构
YuePeng16 小时前
不写一行接口,让 DBeaver 直连你的指标层——背后只用了一个端口
后端·架构·github
QYR-分析18 小时前
RISC-V AI加速器SoC行业研究报告:开放架构赋能AI芯片,高增赛道开启国产化新机遇
人工智能·架构·risc-v
xiaoxiangsiyan18 小时前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel
NutShell Wang18 小时前
每帧重建整条路径、每秒倾倒 48MB 给 GC:实时折线图渲染架构的实测复盘
前端·性能优化·架构·图形渲染·数据可视化·vibe coding