Cortex-M核心寄存器
下面是Cortex-M3手册截图,核心寄存器一共有21个:

Cortex-M0没有FAULTMASK Cortex-M0没有BASEPRI Cortex-M3/M4/M7寄存器相同
R0–R12:通用寄存器
在AAPCS(过程调用标准)中R0-R3用于传递函数参数,如果参数超过4个则将参数压栈传递。 R0用于传递函数返回值。 R4-R11则用于临时变量
R13(SP):栈指针
SP背后有2个物理寄存器MSP和PSP,上电默认MSP。 可以用CONTROL寄存器来选择使用MSP或PSP。 Cortex-M使用的是满递减栈。
R14(LR):链接寄存器
LR在调用函数时保存函数的返回地址。 在中断服务程序中用作EXC_RETURN,用于确定中断结束后恢复状态。
R15(PC):程序计数器
PC保存的是当前运行指令的地址,直接修改PC可以改变运行指令。 PC的最低位并不是地址,而是Thumb状态位,会被写到到EPSR的T位,读回的总是0。
PSR:程序状态寄存器
PSR寄存器实际上是由APSR、IPSR、EPSR合并而来,所以一般用xPSR表示。
NZCVQ分别表示负数、零、进位或借位、溢出、DSP溢出或饱和标志位。 ISR_NUMBER表示当前的运行的是哪个中断,0表示在主线程模式。 ICI 可中断后继续运行的指令状态,IT指示IT指令的状态,T指示Thumb指令模式。
CONTROL:控制寄存器
FPCA指示当前FPU状态,1=FPU使用中,0=FPU未使用 SPSEL指示当前SP用的是哪个,1=PSP,0=MSP nPRIV指示当前特权等级,1=非特权模式,0=特权模式
BASEPRI:起始优先级寄存器
中断优先级的数值小于BASEPRI才能响应,优先级数值越低,优先级越高 BASEPRI=0x00时此寄存器无效
PRIMASK:优先级屏蔽寄存器
PRIMASK置为1时,除了NMI和HardFault以外,其它中断都被屏蔽。 通常用它来控制系统的全局总中断,写1相当于关闭中断,清0相当于打开中断。
FAULTMASK:错误屏蔽寄存器
FAULTMASK置1后可以屏蔽HardFault,只有NMI中断能正常响应。 在任何中断服务程序退出时会自动清0。





