2.ARMv7-M registers

Registers

1. 通用寄存器R0-R12

2. R13 - Stack Pointer(SP_main & SP_process)。

        (1).Reset之后, 处理器会自动获取Vector中偏移为0下的内容,写入到SP_main中,即初始化SP_main指针,此时为Thread mode并且为Privileged。如果想要切换为SP_process,需要再将SP_process初始            化,使用MSR指令即可。

        (2).ARMv7-M的实现中,忽略掉了SP[1:0],也就是处理器自动向下取4-byte对齐使用。ARM建议在软件的使用SP时,也将SP[1:0]清零,以保证良好的可移植性。

3. R14 - Link Register(LR)

        在软件使用Bl/BLX等跳转且保存link状态的指令时,处理器自动将当前PC内的值存放到LR中,一般为Bl/BLX下条指令的地址。

4. R15 - Program Counter(PC)

        指向下条要执行的指令地址。

5. xPSR - Status Registers(APSR & IPSR & EPSR)

        APSR:包含N,Z,C,V,Q,GE[3:0] bit,

                N[31]:负的条件标记
        ​​​​​​​        Z[30]:零的条件标记
        ​​​​​​​        C[29]:操作进位
        ​​​​​​​        V[28]:操作溢出

        ​​​​​​​        Q[27]:饱和指令饱和标记

        ​​​​​​​        GE[19:16]:DSP单元扩展标记

        IPSR:包含Exception Number

        ​​​​​​​        IPSR[8:0]值为0或者当前Active的异常对应的异常号。虽然Reset异常的异常号为1,但对于软件来说1这个值是不可见的,是一个瞬间的值。

        EPSR:

        ​​​​​​​        T bit,Thumb状态标记。

        ​​​​​​​        ICI/IT bit, 当使用interrupt-continue load/store指令或者IT指令时,用来保存指令状态或者IT状态。

6. Mask Registers(PRIMASK & BASEPRI & FAULTMASK)

        PRIMASK:1bit有效,设置此bit为1代表提升运行优先级为0,即屏蔽掉除Reset(-3),NMI(-2),HARDFAULT(-1)之外的任何优先级,因为其他异常的优先级默认为0。

        BASEPRI:基本优先级Mask,一个8位寄存器。BASEPRI更改异常抢占所需的优先级。只有当BASEPRI的值低于当前正在执行的软件的未屏蔽优先级时,它才有效

        FAULTMASK:Fault mask,1bit有效,设置此bit为1,来提升运行优先级为-1,和HardFault的优先级相同。达到屏蔽HardFault异常的作用。只有特权级下运行并且在优先级在-1之下时才能设置这个bit,这意         味着HardFault和NMI Handler中不能设置此bit。在出去NMI的异常返回时,处理器都会自动清楚此bit。

        使用CPS指令来修改Mask Registers。

7. CONTROL - Control Registers

        nPRIV:  CONTROL.bit[0]定义了Thread mode下的特权等级,是Privileged还是Unprivieged。

                0:Thread mode has Privileged access。

                1:Thread mode has Unprivileged access。

        SPSEL: CONTROL.bit[1]定义了使用哪个栈。

                0:使用SP_main作为当前栈。

                1:在Thread mode下使用SP_process作为当前栈,Handler mode下此bit保留。

        FPCA: CONTROLbit[2]处理器是否包含FP单元。

                0:无FP Extension。

                1:有FP Extension。

        软件可以使用MSR指令设置此CONTROL寄存器,然后使用ISB指令确保在下条指令运行时,当前配置能够应用成功。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值