`
happmaoo
  • 浏览: 4343626 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

走近Cortex-M3(3)--寄存器知识

阅读更多

前两周,我们相继介绍了Cortex-M3的发展近况,也了解了其相关技术背景。而作为一名初学者,在ARM的学习中,会遇到大量的或熟悉或陌生的名词缩写,有效的理解并记忆它们十分有利于我们的学习。下面,是我们大致做的一些总结:

AHB先进高性能总线

AHB‐AP AHB访问端口

AMBA先进单片机总线架构

APB先进外设总线

ARM ARMARM架构参考手册

ASIC行业领域专用集成电路

ATB先进跟踪总线

BE8字节不变式大端模式

CPI每条指令的周期数

CPU中央处理单元

DAP调试访问端口

DSP数字信号处理器/数字信号处理

DWT数据观察点及跟踪

ETM嵌入式跟踪宏单元

FPB闪存地址重载及断点

FSRFault状态寄存器

HTMCoreSight AHB跟踪宏单元

ICE在线仿真器

IDE集成开发环境

IRQ中断请求(通常是指外部中断的请求)

ISA指令系统架构

ISR中断服务例程

ITM指令跟踪宏单元

JTAG连结点测试行动组(一个关于测试和调试接口的标准)

JTAG‐DP JTAG调试端口

LR连接寄存器

LSB最低有效位

LSU加载/存储单元

MCU微控制器单元(俗称单片机)

MMU存储器管理单元

MPU存储器保护单元

MSB最高有效位

MSP主堆栈指针

NMI不可屏蔽中断

NVIC嵌套向量中断控制器

OS操作系统

PC程序计数器

PSP进程堆栈指针

PPB私有外设总线

接下来,请随我来了解一下Cortex-M3的寄存器组

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

1. R0-R12:通用寄存器

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

2. Banked R13: 两个堆栈指针

Cortex‐M3拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。

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

3. R14:连接寄存器

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

4. R15:程序计数寄存器

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

5. 特殊功能寄存器

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

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

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

控制寄存器(CONTROL)

更多信息请访问相关博文:http://blog.csdn.net/wiznet2012/article/details/7178238

如果您有什么疑问请留言或者来信:wiznetbj@wiznettechnology.com,希望本篇文章可以给

您带来帮助,谢谢。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics