网站最新一次改版时间什么意思/免费私人网站建设
下面是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。