Cortex-M3的寄存器知识

Home / 博客 / Cortex-M3的寄存器知识

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

AHB  先进高性能总线

AHB‐AP   AHB访问端口

AMBA  先进单片机总线架构

APB  先进外设总线

ARM ARM ARM架构参考手册

ASIC  行业领域专用集成电路

ATB  先进跟踪总线

BE8  字节不变式大端模式

CPI   每条指令的周期数

CPU  中央处理单元

DAP  调试访问端口

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

DWT  数据观察点及跟踪

ETM  嵌入式跟踪宏单元

FPB  闪存地址重载及断点

FSR   Fault状态寄存器

HTM   CoreSight 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.iwiznet.cn/?p=318

 

有关公司产品W7100A的博文请看这里:

 

如何使用W7100A实现网络字符LCD 

单片机以太网控制芯片— iMCU W7100A

如何使用W7100A模拟I2C总线

如何实现W7100A程序烧录