前两周,我们相继介绍了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
如果您有什么疑问请留言或者来信:[email protected],希望本篇文章可以给
您带来帮助,谢谢。