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

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)

相关文章:

  • latex figure Missing number, treated as zero. <to be read again>
  • Android的uid~package~pid的关系
  • NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)
  • 经典面试题:一文了解常见的缓存问题
  • Spark on Hive表结构变更
  • 性能优化 - 案例篇:缓存
  • NodeJS全栈开发面试题讲解——P10微服务架构(Node.js + 多服务协作)
  • 聊一聊接口测试中缓存处理策略
  • 多模态大语言模型arxiv论文略读(102)
  • 量子语言模型——where to go
  • 快速掌握 GO 之 RabbitMQ 结合 gin+gorm 案例
  • SQL进阶之旅 Day 10:执行计划解读与优化
  • Python应用for循环临时变量作用域
  • 基于Android的跳蚤市场_springboot+vue
  • Qt OpenGL编程常用类
  • 电子电路:时钟脉冲与上升沿的详细解析
  • (面试)OkHttp实现原理
  • pc端小卡片功能-原生JavaScript金融信息与节日日历
  • SpringAI+DeepSeek大模型应用开发实战
  • 深度学习|pytorch基本运算-乘除法和幂运算
  • 上海高端建站网站/seo网络推广专员
  • 新闻网站设计原则/武汉seo公司
  • 段友做的看电影网站/关键词查网址
  • 在哪做网站建设/近三天的国内新闻
  • 襄阳住房和城乡建设网站/百度关键词推广可以自己做吗
  • 江西专业南昌网站建设/长沙seo排名外包