电子产品世界 » 论坛首页 » 嵌入式开发 » ARM » Cortex-M3寄存器组


共1条 1/1 1 跳转至

Cortex-M3寄存器组

专家
2010-12-02 11:21:02    评分
Cortex-M3 处理器拥有 R0-R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。

  R0-R12:通用寄存器

  R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。

  Banked R13: 两个堆栈指针

  Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。

   主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)

   进程堆栈指针(PSP):由用户的应用程序代码使用。

  在ARM编程领域中,凡是打断程序顺序执行的事件,都被称为异常(exception)。除了外部中断外,当有指令执行了“非法操作” ,或者访问被禁的内存区间,因各种错误产生的 fault,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。在不严格的上下文中,异常与中断也可以混用。另外,程序代码也可以主动请求进入异常状态的(常用于系统调用)。

  堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。

  R14:连接寄存器

  当呼叫一个子程序时,由 R14存储返回地址

  不像大多数其它处理器,ARM为了减少访问内存的次数(访问内存的操作往往要 3个以上指令周期,带MMU和cache的就更加不确定了),把返回地址直接存储在寄存器中。这样足以使很多只有1级子程序调用的代码无需访问内存(堆栈内存),从而提高了子程序调用的效率。如果多于 1 级,则需要把前一级的 R14 值压到堆栈里。在 ARM上编程时,应尽量只使用寄存器保存中间结果,迫不得以时才访问内存。在 RISC 处理器中,为了强调访内操作越过了处理器的界线,并且带来了对性能的不利影响,给它取了一个专业的术语:溅出。

  R15:程序计数寄存器

  指向当前的程序地址。如果修改它的值,就能改变程序的执行流(很多高级技巧就在这里面——译注)。

  特殊功能寄存器

  Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括 程序状态字寄存器组(PSRs)

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

  控制寄存器(CONTROL)

Cortex-M3 中的特殊功能寄存器集合

寄存器及其功能




关键词: Cortex-M3     寄存器     堆栈    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]