Cortex-M4核心寄存器数量存疑:手册表述与统计结果不符
Cortex-M4 32个核心寄存器的构成解析
首先明确:Cortex-M4的32个核心寄存器是按R0-R31的寄存器编号范围定义的,其中包含有实际功能的寄存器和保留寄存器,以下是具体构成:
1. 通用寄存器(13个)
对应R0-R12,是手册明确提到的通用寄存器组,用于常规数据操作。
2. 基础特殊寄存器(3个)
- R13:栈指针(SP),物理上包含两个独立寄存器:主栈指针(MSP)和进程栈指针(PSP),同一时刻仅能访问其中一个,共享R13的编码
- R14:链接寄存器(LR),用于存储函数返回地址
- R15:程序计数器(PC),指向当前执行指令的地址
3. 系统状态与控制寄存器(7个)
对应R16-R20、R31,以及可拆分访问的子寄存器:
- R16:PRIMASK,用于屏蔽除NMI和HardFault外的所有中断
- R17:FAULTMASK,用于屏蔽除NMI外的所有异常
- R18:BASEPRI,用于屏蔽优先级低于设定值的中断
- R19:BASEPRI_MAX,BASEPRI的别名寄存器,用于简化优先级设置操作
- R20:CONTROL,用于切换特权级别、选择当前使用的栈指针
- R31:xPSR,程序状态寄存器,可拆分为三个独立访问的子寄存器:
- APSR:算术状态寄存器,存储运算标志位
- IPSR:中断状态寄存器,存储当前活跃的中断编号
- EPSR:执行状态寄存器,存储Thumb指令集相关状态
这些子寄存器(APSR/IPSR/EPSR)常被单独列出,所以会出现“PSR是3个而非1个”的认知。
4. 保留寄存器(9个)
对应R21-R30,这些寄存器在Cortex-M4架构中没有定义实际功能,属于预留空间,手册不会详细列出,但它们仍属于32个核心寄存器的编号范围。
你统计时出现数量差异的原因:
- TRM中仅列出有实际功能的寄存器,未包含保留的R21-R30,所以数量约16个
- 通用用户指南中包含了xPSR的三个子寄存器、SP的两个物理寄存器等可独立访问的别名寄存器,所以数量约23个
内容的提问来源于stack exchange,提问作者abdo Salm
相关产品推荐
相关产品推荐

