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

CM3内核寄存器

⚙️ ​一、核心寄存器组​(通过 MRS/MSR 或寄存器名直接访问)

寄存器位宽功能
R0-R1232-bit通用数据寄存器(R0-R7 全指令可访问,R8-R12 仅限 32 位 Thumb-2 指令)
R13 (SP)​32-bit堆栈指针:支持 MSP(主栈)和 PSP(进程栈),由 CONTROL[1] 选择
R14 (LR)​32-bit链接寄存器:存储函数返回地址,异常中自动保存
R15 (PC)​32-bit程序计数器:指向下一条指令地址(读取值 = 当前地址 + 4)
xPSR32-bit组合状态寄存器:
- APSR (N/Z/C/V/Q 标志位)
- IPSR (当前中断号)
- EPSR (Thumb 状态)
PRIMASK1-bit中断屏蔽:置 1 时屏蔽所有可屏蔽中断(仅 NMI/HardFault 有效)
FAULTMASK1-bit异常屏蔽:置 1 时屏蔽所有中断和 Fault(仅 NMI 有效)
BASEPRI8-bit优先级屏蔽:屏蔽优先级 ≥ 设定值的中断(优先级数值越大,优先级越低)
CONTROL8-bit控制位:
- CONTROL[0]:特权级(0=特权,1=用户)
- CONTROL[1]:SP 选择(0=MSP,1=PSP)

🧠 ​二、内存映射系统寄存器​(地址范围:0xE000E000 - 0xE000EFFF

系统控制块(SCB)​​ (0xE000ED00 - 0xE000ED3C)
寄存器地址功能
CPUID0xE000ED00CPU ID 信息(架构版本/核型号)
ICSR0xE000ED04中断控制状态:悬起/激活的中断号,手动触发 PendSV/SysTick
VTOR0xE000ED08向量表偏移寄存器(重定位中断向量表地址)
AIRCR0xE000ED0C应用中断复位控制:
- 优先级分组(如 AIRCR[10:8] 设置优先级组)
- 复位请求(SYSRESETREQ
SCR0xE000ED10系统控制:休眠模式使能(SLEEPDEEP/SLEEPONEXIT
CCR0xE000ED14配置控制:
- 对齐检查使能(UNALIGN_TRP
- 除零陷阱(DIV_0_TRP
SHPRx0xE000ED18~1C系统异常优先级(SysTick/PendSV/SVC 的优先级配置)
SHCSR0xE000ED24系统句柄控制状态:使能 UsageFault/MemManage/BusFault
CFSR/UFSR0xE000ED28可配置错误状态(含 MMFSR/BFSR/UFSR 字段)
HFSR0xE000ED2C硬件错误状态:强制错误(FORCED)/调试事件(DEBUGEVT
MMFAR0xE000ED34MemManage 错误地址(当 CFSR.MMARVALID=1 时有效)
BFAR0xE000ED38总线错误地址(当 CFSR.BFARVALID=1 时有效)

嵌套向量中断控制器(NVIC)​​ (0xE000E100 - 0xE000E4FF)
寄存器地址范围功能
ISERx0xE000E100~107中断使能(设置对应位 1 开启中断)
ICERx0xE000E180~187中断禁用(设置对应位 1 关闭中断)
ISPRx0xE000E200~207中断悬起(软件触发中断)
ICPRx0xE000E280~287中断解除悬起
IPRx0xE000E400~4FF中断优先级配置(每中断占 8 位,优先级值 0~255

系统定时器(SysTick)​​ (0xE000E010 - 0xE000E01C)
寄存器地址功能
CTRL0xE000E010控制位:时钟源选择/中断使能/计数器使能
LOAD0xE000E014重装载值(计数从 LOAD0 触发中断)
VAL0xE000E018当前计数值(写 0 可清空计数器)
CALIB0xE000E01C校准值(提供计时基准频率)

调试寄存器​(需调试器访问)
寄存器地址功能
DHCSR0xE000EDF0调试状态与控制(设置 C_DEBUGEN 开启调试)
DCRSR0xE000EDF4调试寄存器选择(指定要读写的内核寄存器)
DCRDR0xE000EDF8调试寄存器数据通道
DEMCR0xE000EDFC调试异常监控(启用 DWT/ITM 跟踪)
TPIU​/ETM0xE0040000~跟踪单元(用于指令/数据流记录)
ITM0xE0000000~指令跟踪宏单元(发送调试信息)
DWT0xE0001000~数据观察点与跟踪(设置数据断点)

🔑 ​三、关键设计说明

  1. 特权级访问控制

    • 用户模式 (CONTROL[0]=1) 仅可访问 R0-R15/PSP,​禁止操作NVIC/SCB/调试寄存器。
  2. 中断优先级配置

    • 优先级位宽​:由芯片厂商实现(CM3 支持 3~8 位可配置,如 STM32 常用 4 位 = 16 级优先级)。
  3. 复位初始值

    • PC = 向量表首地址(0x00000000VTOR 指定)
    • SP = 主堆栈初始值(从向量表第 0 项加载)
    • CONTROL[0] = 0(特权模式),CONTROL[1] = 0(使用 MSP)
http://www.xdnf.cn/news/10503.html

相关文章:

  • Java中的JSONObject详解:从基础到高级应用
  • STM32——CAN总线
  • unix/linux source 命令,其基本属性、语法、操作、api
  • Vue3+SpringBoot全栈开发:从零实现增删改查与分页功能
  • 付费专栏总结及后续文章规划
  • 【LLM相关知识点】 LLM关键技术简单拆解,以及常用应用框架整理(二)
  • 域权限维持和后渗透密码收集
  • 第十二节:第二部分:集合框架:Collection集合的遍历方式:迭代器、增强for循环、Lambda、案例
  • 智能重塑连接:AI原生互联网的范式革命与未来十年
  • 5.31 打卡
  • LCS 问题解释
  • Java核心:Object与Objects方法全解析
  • VAE在扩散模型中的技术实现与应用
  • 【代码坏味道】无用物Dispensables
  • 【Qt】EventFilter,要增加事件拦截器才能拦截到事件
  • CppCon 2014 学习:Practical Functional Programming
  • 给跑步入门的一个训练课表
  • RAGFlow从理论到实战的检索增强生成指南
  • Excel如何去除公式保留数值
  • 知识管理五强对比:Baklib高效突围
  • 10000+套PPT模版合集和简历模版 【多种系列风格】免费下载
  • Python 全面技术指南:从语言本质到工程实践
  • 第六十三节:深度学习-模型推理与后处理
  • 流媒体协议分析:流媒体传输的基石
  • MCP架构全解析:从核心原理到企业级实践
  • java开发中#和$的区别
  • 「 扑翼飞行器 」悬停飞行的信号串联滤波器设计
  • leetcode hot100刷题日记——31.二叉树的直径
  • 【计算机CPU架构】ARM架构简介
  • 差分隐私-扰动机制