Cortex-M3处理器的寄存器组

Cortex-M3 处理器拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器,R0‐R12 都是 32 位通用寄存器,用

于数据操作。但是绝大多数的 16 位 Thumb 指令只能使用 R0‐R7(低组寄存器),而 32 位的Thumb‐2指令

则可以访问所有通用寄存器。特殊功能寄存器有预定义的功能,而且必须通过专用的指令来访问。R13 作

为堆栈指针 SP。SP 有两个(MSP和PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”

寄存器。

通用目的寄存器 R0-R7

R0‐R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后

的初始值是不可预料的。

通用目的寄存器 R8-R12

R8‐R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们,32

位的指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。

堆栈指针R13

R13 是堆栈指针。在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。

当引用 R13(或写作 SP)时,你引用到的是当前正在使用的那一个,另一个必须用特殊的指

令来访问(MRS,MSR 指令)。这两个堆栈指针分别是

  • 主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用
  • 进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服用例程中时)。

要注意的是,并不是每个应用都必须用齐两个堆栈指针。简单的应用程序只使用 MSP就够了。堆栈指针用

于访问堆栈,并且 PUSH 指令和 POP 指令默认使用 SP。

特殊功能寄存器

Cortex‐M3 还在内核水平上搭载了若干特殊功能寄存器,包括

程序状态字寄存器组(PSRs)

中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)

控制寄存器(CONTROL)

参考文献

Cortex-M3权威指南(中文参考) —— Joseph Yiu著 宋岩 译

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注