CM3内核寄存器
⚙️ 一、核心寄存器组(通过 MRS
/MSR
或寄存器名直接访问)
寄存器 | 位宽 | 功能 |
---|---|---|
R0-R12 | 32-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) |
xPSR | 32-bit | 组合状态寄存器: - APSR (N/Z/C/V/Q 标志位) - IPSR (当前中断号) - EPSR (Thumb 状态) |
PRIMASK | 1-bit | 中断屏蔽:置 1 时屏蔽所有可屏蔽中断(仅 NMI/HardFault 有效) |
FAULTMASK | 1-bit | 异常屏蔽:置 1 时屏蔽所有中断和 Fault(仅 NMI 有效) |
BASEPRI | 8-bit | 优先级屏蔽:屏蔽优先级 ≥ 设定值的中断(优先级数值越大,优先级越低) |
CONTROL | 8-bit | 控制位: - CONTROL[0] :特权级(0=特权,1=用户)- CONTROL[1] :SP 选择(0=MSP,1=PSP) |
🧠 二、内存映射系统寄存器(地址范围:0xE000E000
- 0xE000EFFF
)
系统控制块(SCB) (0xE000ED00
- 0xE000ED3C
)
寄存器 | 地址 | 功能 |
---|---|---|
CPUID | 0xE000ED00 | CPU ID 信息(架构版本/核型号) |
ICSR | 0xE000ED04 | 中断控制状态:悬起/激活的中断号,手动触发 PendSV/SysTick |
VTOR | 0xE000ED08 | 向量表偏移寄存器(重定位中断向量表地址) |
AIRCR | 0xE000ED0C | 应用中断复位控制: - 优先级分组(如 AIRCR[10:8] 设置优先级组)- 复位请求( SYSRESETREQ ) |
SCR | 0xE000ED10 | 系统控制:休眠模式使能(SLEEPDEEP /SLEEPONEXIT ) |
CCR | 0xE000ED14 | 配置控制: - 对齐检查使能( UNALIGN_TRP )- 除零陷阱( DIV_0_TRP ) |
SHPRx | 0xE000ED18~1C | 系统异常优先级(SysTick/PendSV/SVC 的优先级配置) |
SHCSR | 0xE000ED24 | 系统句柄控制状态:使能 UsageFault/MemManage/BusFault |
CFSR/UFSR | 0xE000ED28 | 可配置错误状态(含 MMFSR/BFSR/UFSR 字段) |
HFSR | 0xE000ED2C | 硬件错误状态:强制错误(FORCED )/调试事件(DEBUGEVT ) |
MMFAR | 0xE000ED34 | MemManage 错误地址(当 CFSR.MMARVALID=1 时有效) |
BFAR | 0xE000ED38 | 总线错误地址(当 CFSR.BFARVALID=1 时有效) |
嵌套向量中断控制器(NVIC) (0xE000E100
- 0xE000E4FF
)
寄存器 | 地址范围 | 功能 |
---|---|---|
ISERx | 0xE000E100~107 | 中断使能(设置对应位 1 开启中断) |
ICERx | 0xE000E180~187 | 中断禁用(设置对应位 1 关闭中断) |
ISPRx | 0xE000E200~207 | 中断悬起(软件触发中断) |
ICPRx | 0xE000E280~287 | 中断解除悬起 |
IPRx | 0xE000E400~4FF | 中断优先级配置(每中断占 8 位,优先级值 0~255 ) |
系统定时器(SysTick) (0xE000E010
- 0xE000E01C
)
寄存器 | 地址 | 功能 |
---|---|---|
CTRL | 0xE000E010 | 控制位:时钟源选择/中断使能/计数器使能 |
LOAD | 0xE000E014 | 重装载值(计数从 LOAD → 0 触发中断) |
VAL | 0xE000E018 | 当前计数值(写 0 可清空计数器) |
CALIB | 0xE000E01C | 校准值(提供计时基准频率) |
调试寄存器(需调试器访问)
寄存器 | 地址 | 功能 |
---|---|---|
DHCSR | 0xE000EDF0 | 调试状态与控制(设置 C_DEBUGEN 开启调试) |
DCRSR | 0xE000EDF4 | 调试寄存器选择(指定要读写的内核寄存器) |
DCRDR | 0xE000EDF8 | 调试寄存器数据通道 |
DEMCR | 0xE000EDFC | 调试异常监控(启用 DWT/ITM 跟踪) |
TPIU/ETM | 0xE0040000~ | 跟踪单元(用于指令/数据流记录) |
ITM | 0xE0000000~ | 指令跟踪宏单元(发送调试信息) |
DWT | 0xE0001000~ | 数据观察点与跟踪(设置数据断点) |
🔑 三、关键设计说明
-
特权级访问控制
- 用户模式 (
CONTROL[0]=1
) 仅可访问R0-R15
/PSP
,禁止操作NVIC
/SCB
/调试寄存器。
- 用户模式 (
-
中断优先级配置
- 优先级位宽:由芯片厂商实现(CM3 支持
3~8
位可配置,如 STM32 常用4
位 = 16 级优先级)。
- 优先级位宽:由芯片厂商实现(CM3 支持
-
复位初始值
PC
= 向量表首地址(0x00000000
或VTOR
指定)SP
= 主堆栈初始值(从向量表第 0 项加载)CONTROL[0] = 0
(特权模式),CONTROL[1] = 0
(使用 MSP)