当前位置: 首页 > news >正文

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为例)

汇编指令:

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

CMSIS函数(C语言):

void__disable_irq(void);// 置位 PRIMASKvoid__enable_irq(void);// 清零 PRIMASKvoid__set_FAULTMASK(uint32_tvalue);uint32_t__get_FAULTMASK(void);void__set_BASEPRI(uint32_tvalue);uint32_t__get_BASEPRI(void);

典型使用场景

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

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

http://www.cnnetsun.cn/news/10377.html

相关文章:

  • 详细描述一条 SQL 在 MySQL 中的执行过程
  • 一文读懂GLM-Edge-4B-Chat:轻量化大模型如何重塑边缘智能应用新生态
  • Ubuntu22.04 5080配置深度学习环境
  • Wan2.2-T2V-A14B在虚拟演唱会背景制作中的大规模应用
  • Windows右键菜单清理与定制全攻略:ContextMenuManager高效使用指南
  • nginx实战-PHP——day2
  • 知识扩展--从病理学角度比较来自同一组织切片的Xenium 5K与Visium HD数据
  • 基于Wan2.2-T2V-A14B的AI导演系统原型设计思路
  • 【苍穹外卖-day12】
  • 金融项目的测试过程(额度申请审核的测试点设计)
  • C# AES加密在医疗系统中的真实应用案例(含完整源码与审计建议)
  • java计算机毕业设计球鞋商城系统小程序 基于SpringBoot的潮鞋微商城小程序设计与实现 JavaWeb限量球鞋交易平台小程序开发
  • Wan2.2-T2V-A14B能否生成黑白老电影风格?怀旧滤镜测试
  • 终极指南:原神自动化工具BetterGI完整使用手册
  • 在Linux中如何查看内存使用情况?
  • CompletableFuture的5大坑!
  • **主题:** “医疗PINN漏物理约束,器官运动预测全错,补动力学方程才稳住”
  • KMPlayer播放器中文版下载安装保姆级教程(附电脑安装包,非常详细)
  • 【量子电路可视化终极指南】:手把手教你用VSCode打造高效开发环境
  • Skyhigh Security升级数据安全态势管理(DSPM)能力,助力企业满足《数字个人数据保护法》(DPDPA)合规要求,强化亚太地区数据保护
  • Wan2.2-T2V-A14B与Stable Video Diffusion对比:谁更适合商用?
  • 如何用AU处理音乐详细的元数据Metadata-程序员·原创音乐人·卓伊凡
  • MobaXterm高效运维
  • 百度ERNIE-4.5-VL-28B-A3B-Base震撼发布:多模态大模型基座开启智能新纪元
  • Wan2.2-T2V-A14B + 高性能GPU:构建专属AI视频工厂
  • 3分钟掌握B站视频下载:哔哩下载姬终极使用指南
  • BetterGI:原神AI自动化辅助工具终极指南
  • MoE架构加持的Wan2.2-T2V-A14B,如何提升动态细节表现力?
  • MySQL表的约束
  • IP地址分类管理