uboot源码(2 CPU开始SVC模式)

    xiaoxiao2021-03-25  142

    入口点: _start

    .globl _start _start: b reset

    reset符号

    reset: /* * set the cpu to SVC32 mode */ mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr,r0

    (mrs r0,cpsr)读取状态寄存器CPSR到R0

    在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。

    MRS R1,CPSR ; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR ; 将SPSR状态寄存器读取,保存到R2中

    (bic r0,r0,#0x1f) r0低5位清零

    BIC(bit clean)指令对 r0 中的值 和#0x1f 值的反码按位进行逻辑“与”运算。

    (orr r0,r0,#0xd3) r0低8位依次为 11*10011

    orr是逻辑或。

    (msr cpsr,r0) 将r0的值重新写入CPSR中

    msr 写状态寄存器指令。在ARM 处理器中。只有MSR 指令可以直接设置状态寄存器CPSR或SPSR。

    CPSR为什么要设置为11*1 0011呢?

    关注后8位,可以看到,低5位是一个特殊状态,标识CPU模式,第6位是Thumb或者ARM指令状态,第七位是FIQ,第八位是IRQ。

    11*,10011表示CPU位管理模式,FIQ和IRQ中断禁止,可能是Thumb指令,也可以是ARM指令。

    转载请注明原文地址: https://ju.6miu.com/read-8375.html

    最新回复(0)