【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】

请阅读【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】


文章目录

问题背景

由于在RA4M2(Cortex-M33)移植RT-Thread OS的时候遇到了 Hardfault,不知道如何分析错误原因,后参考以前写的文章【ARM Cortex-M 系列 2.1 -- RT-Thread Cortex-M7 异常处理及 hardfault 处理分析】 来查找原因。

Cortex-M33 Fault 寄存器介绍

在 ARM Cortex-M33 微控制器上,当发生异常或错误时,一些特殊的寄存器提供了用于调试和错误处理的关键信息。这些寄存器包括程序状态寄存器 (xPSR )、可配置故障状态寄存器 (CFSR )、硬件故障状态寄存器 (HFSR )、总线故障地址寄存器 (BFAR ) 和内存管理故障地址寄存器 (MMFAR ) 以及 UFSR(UsageFault Status Register)。

xPSR (程序状态寄存器)

xPSR 寄存器包含多个状态字段,包括程序状态、中断或异常返回状态以及其他系统状态。

其中最重要的字段是:

  • APSR (应用程序状态子字段): 包括 Negative, Zero, Carry, Overflow 和 Saturation 状态标志。
  • IPSR (中断程序状态子字段): 表示当前激活的异常编号。
  • EPSR (执行程序状态子字段): 包括 Thumb状态位,它应始终被设置为1,因为 Cortex-M33 只能执行 Thumb 指令集。

CFSR (可配置故障状态寄存器)

32-bit read/write-one-to-clear register located at 0xE000ED28.

CFSR 寄存器用于提供有关内存管理、总线和使用错误的详细信息。它分为三个部分:

  • MFSR (内存管理故障状态寄存器子字段): 提供内存管理故障信息,例如违反内存保护单元 (MPU) 规则。
  • BFSR (总线故障状态寄存器子字段): 提供总线访问故障信息,如非法地址访问或总线错误。
  • UFSR (使用错误状态寄存器子字段) : 提供特定错误的信息,例如非法指令、未对齐的访问或除零操作。
    Secure software can access the Non-secure version of this register via UFSR_NS located at 0xE002ED2A.
    The location 0xE002ED2A is RES0 to software executing in Non-secure state and the debugger.

HFSR (硬件故障状态寄存器)

HFSR 寄存器提供有关所有硬件故障的信息。它包括字段,如调试事件或向量表硬故障。

BFAR (总线故障地址寄存器)

BFSRBFARVALID 位被设置时,BFAR 寄存器包含了导致总线故障的地址。

MMFAR (内存管理故障地址寄存器)

MMFSRMMARVALID 位被设置时,MMFAR 寄存器包含了导致内存管理故障的地址。

相关推荐
项目題供诗9 小时前
51单片机入门(六)
单片机·嵌入式硬件·51单片机
代码游侠10 小时前
学习笔记——Linux内核与嵌入式开发1
linux·运维·前端·arm开发·单片机·嵌入式硬件·学习
宇钶宇夕10 小时前
CoDeSys入门实战一起学习(二十八):(LD)三台电机顺起逆停程序详解—上升、下降沿使用上
单片机·嵌入式硬件·学习
qq_4017004110 小时前
STM32晶振频率怎么选
stm32·单片机·嵌入式硬件
BackCatK Chen11 小时前
第 5 篇:TMC2240 寄存器体系详解|分类 + 读写逻辑 + 通用框架
单片机·嵌入式硬件·电机驱动·保姆级教程·tmc2240·寄存器详解·stm32实战
jingshaoqi_ccc11 小时前
使用GD32F103C8T6开发板的标准库实现硬件I2C协议通信(附源码下载地址)
单片机·嵌入式硬件
qq_25814297-npl11 小时前
三开门冰箱的接水盒(也称为储水盒或接水盘)正常情况下不会满水
单片机
华清远见成都中心11 小时前
GPIO(通用输入输出)面试中高频问题
单片机·面试·职场和发展
来自晴朗的明天11 小时前
8、2N7002 MOS 管电平转换电路
单片机·嵌入式硬件·硬件工程
来自晴朗的明天13 小时前
5、CBMV321 分压式电压跟随器电路
单片机·嵌入式硬件·硬件工程