历史上的今天
今天是:2025年03月08日(星期六)
2019年03月08日 | Cortex-M3寄存器组
2019-03-08 来源:eefocus

1、通用目的寄存器R0~R7
R0-R7 也被称为低组寄存器。所有指令都能访问它们。它们的字长全是 32 位,复位后的初始值是不可预料的。
2、通用目的寄存器 R8-R12
R8-R12 也被称为高组寄存器。这是因为只有很少的 16 位 Thumb 指令能访问它们, 32 位的thumb-2 指令则不受限制。它们也是 32 位字长,且复位后的初始值是不可预料的。
3、特殊功能寄存器

程序状态寄存器:APSR, IPSR, EPSR ---- 通过MRS/MSR 指令,这3 个PSRs 即可以单独访问,也可以组合访问(2 个组合,3 个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSR”。


APSR:
N:负条件码标志位,运算结果小于0,N=1, 大于等于0,N=0;
Z:零条件码标志位,运算结果为0,Z=1;
C:进位条件码标志位,运算指令产生进位(无符号加法溢出),C=1;
V:溢出条件码标志位,运算溢出(有符号加法溢出), V=1;
Q:饱和条件码标志位;
IPSR:处于线程模式时,该位域为0;在手柄模式下,该位域为当前异常的异常号。
EPSR:
T:Thumb状态, T=1,ARM状态,T=0;
PRIMASK, FAULTMASK 和 BASEPRI:控制异常的使能和除能

控制寄存器CONTROL:其一用于定义特权级别,其二用于选择当前使用哪个堆栈指针。

4、堆栈指针R13
R13 是堆栈指针。在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。当引用 R13(或写作 SP)时,引用到的是当前正在使用的那一个,另一个必须用特殊的指令来访问( MRS,MSR指令)。
主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。
进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服用例程中时)。
5、连接寄存器R14
R14 是连接寄存器( LR)。在一个汇编程序中,你可以把它写作 both LR 和 R14。 LR 用于在调用子程序时存储返回地址。例如,当你在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR的值。
6、程序计数器R15
R15 是程序计数器,在汇编代码中一般我们都都叫它的外号“ PC”。因为 CM3 内部使用了指令流水线,读 PC 时返回的值是当前指令的地址+4。
史海拾趣
|
以太网kitl通信通道的实现,用到虚拟的网络设备,我想问一下 kitl所用的虚拟的网络设备是由vbridge实现的,还是 由vbridge和vmini共同实现的,或者说vmini在kitl的实现过程中用到了吗? vmini都做些什么? 请高手指点!… 查看全部问答> |
|
各位前辈大侠, 我现在用一个USB接口的打印机,连接在Wince的PDA上,想直接发送打印数据到打印机。我在网上找了好几天资料都说要找到打印机设备的路径或者是名称,用CreateFile创建句柄,但是我不知道怎么找到该设备。无法用CreateF ...… 查看全部问答> |
|
目的是测量连续的脉冲宽度 源码见附件 typedef struct times { uchar second; //秒级 uint m_second; //毫秒级 uchar mm_second_1; / ...… 查看全部问答> |
|
请问用LF2407外部RAM调试程序时,中断向量表一定要先烧写到FLASH中吗? 现在用外扩的SRAM做程序调试仿真,把中断向量表也分配到了外部SRAM中,结果进不了中断;需要先把中断向量表先烧写到FLASH中吗?还需要加什么跳转指令吗? 更重要的是为 ...… 查看全部问答> |




