寄存器组
- R0—R12:通用寄存器
R0—R12都是32位的通用寄存器,用于数据操作。
- R13:堆栈指针寄存器(sp)
Cortex-M3拥有两个堆栈指针,但是他们是banked,因此任意时刻只能使用其中一个。
主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括终端服务)。
进程堆栈指针(PSP):由用户代码使用。
由于堆栈指针总是4字节对齐,所以堆栈指针的最低两位永远是0.
其最典型的应用就是在数据处理之前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的值。
- R14:连接寄存器(LR)
当呼叫一个子程序时,由R14存储返回地址
- R15:程序计数寄存器(PC)
指向当前的程序地址,若改变它的值,就会改变程序的执行流;
- 特殊功能寄存器
此外Cortex-M3还在内核水平上搭载了若干特殊功能寄存器:
程序状态字寄存器组(PSRs)
中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)
控制寄存器(CONTROL)
对于时间关键PRIMASK和BASEPRI对于暂时关闭中断十分重要。而FAULTMASK则可以被OS用于暂时关闭fault处理机能,主要用在系统崩溃时,此时会有一大堆faults,系统处理后事时,不需要再去响应这个faults。
控制寄存器(CONTROL):控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。