ARM寄存器

文章目录

  • ARM寄存器组
    • 堆栈指针寄存器(MSP和PSP)
    • 连接寄存器(LR)
    • 程序计数器(PC)
    • 程序状态寄存器(xPSR或CPSR)
    • 中断屏蔽寄存器
    • 控制寄存器(CONTROL)

ARM寄存器组

  一共有 R0~R15, xPSR, PRIMASK, FAULTMASK, BASEPRI, CONTROL 21个寄存器 (注意区分外设寄存器!)
ARM寄存器_第1张图片

堆栈指针寄存器(MSP和PSP)

  R13为堆栈指针寄存器,堆栈指针的最低两位永远是 0,这意味着堆栈总是 4 字节对齐的。
  Cortex-M3 内核中共有两个堆栈指针,分别是主堆栈指针(MSP)和进程堆栈指针(PSP)。
  主堆栈指针(MSP)是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。
  进程堆栈指针(PSP),用于常规的应用程序代码(不处于异常服用例程中时)。

连接寄存器(LR)

  R14是连接寄存器(LR),用于在调用子程序时存储返回地址。
LR的LSB是可读可写的。由最低位来指示ARM/Thumb状态。LSB为0时指令是Thumb模式,为1时指令为ARM模式。
stm32为Thumb指令集,但仍允许LSB可读可写,以便移植。

程序计数器(PC)

  R15是程序计数器(PC),用于指示下次欲执行的指令的地址。因为 CM3 内部使用了三级流水线,读 PC 时返回的值是当前指令的地址+4/+8。(thumb是加4/arm是加8)
PC 的 LSB 总是 0(因为代码是 4 / 8 字对齐的)

程序状态寄存器(xPSR或CPSR)

  程序状态寄存器内部各位定义如下:

31 30 29 28 27 26:25 24 23:16 15:10 9 8:0
xPSR N Z C V Q ICI/IT T ICI/IT Exception Number

N:正负标志,N=1表示运算结果为负数,N=0表示运算结果为正数或者0。
Z:零标志,Z=1表示运算结果为0,Z=0表示运算结果为非0。
C:加法运算时表示进位标志,C=1表示产生进位,C=0表示未产生进位;减法运算时表示借位标志,C=0表示产生借位,C=1表示未产生借位;
V:溢出标志,V=1表示有溢出,V=0表示无溢出。
Q:表示增强的DSP指令是否发生溢出,在ARMv7-M架构的ARM Cortex-M3 内核无定义。
ICI/IT[26:25]:暂未找到解释,后期再补上。
T:暂未找到解释,后期再补上。
ICI/IT[15:10]:暂未找到解释,后期再补上。
Exception Number[8:0]:中断号。

中断屏蔽寄存器

  中断屏蔽寄存器包含三个寄存器,用于控制异常的使能和除能。只有在特权级下使用 MRS/MSR 指令,才允许访问这 3 个寄存器。

  • PRIMASK:此寄存器只有一个位,设置为1时,会关闭所有的可屏蔽异常(中断),只有NMI和硬件异常(fault)可以相应。默认值0。
  • FAULTMASK:此寄存器只有一个位,设置为1时,只有NMI会响应,其他的所有异常(中断)和硬件异常(fault)全部关闭响应。默认值0。
  • BASEPRI:这个寄存器最多有 9 位(由表达优先级的位数决定)。它定义了被屏蔽优先级的阈值。当它被设成某个值后,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低)。但若被设成 0,则不关闭任何中断,0 也是默认值。

其实,为了快速地开关中断,CM3 还专门设置了一条 CPS 指令,有 4 种用法

CPSID    I     ;PRIMASK=1,  ;关中断    
CPSIE    I     ;PRIMASK=0,  ;开中断     
CPSID    F     ;FAULTMASK=1, ;关异常     
CPSIE    F     ;FAULTMASK=0  ;开异常     

控制寄存器(CONTROL)

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

CONTROL[1]: 堆栈指针的选择;

0 = 选择主堆栈指针 MSP(复位后缺省值)
1 = 选择进程堆栈指针 PSP
在线程或基础级(没有在响应异常——译注),可以使用 PSP。
在 handler 模式下,只允许使用 MSP,所以此时不得往该位写 1。

CONTROL[0]:模式选择

0 = 特权级的线程模式;
1 = 用户级的线程模式;
Handler模式永远都是特权级的。

ARM寄存器_第2张图片

文章目录

  • ARM寄存器组
    • 堆栈指针寄存器(MSP和PSP)
    • 连接寄存器(LR)
    • 程序计数器(PC)
    • 程序状态寄存器(xPSR或CPSR)
    • 中断屏蔽寄存器
    • 控制寄存器(CONTROL)

你可能感兴趣的:(#,ARM内核,arm开发,stm32,单片机,嵌入式硬件)