MPC5777M的初始化流程

一、编写目的

处于加深记忆,后期方便回忆。以z4核为例,z7内核类似。

二、流程

1、关闭看门狗

        看门狗默认是开启的,初始化第一步先关闭看门狗,代码如下。

        e_lis    r4, 0xFC05    /*读取看门狗对应地址到r4寄存器*/
        e_or2i    r4, 0x8000

        e_li    r3, 0xC520    /*开关看门狗需要偏移0x10地址写入特性序列0xC520 0xD928*/
        e_stw    r3, 0x10(r4)

        e_li    r3, 0xD928
        e_stw    r3, 0x10(r4)

        e_lis    r3, 0xFF00    /*在偏移0地址写入0xFF00010A,至于最后为啥是0A,没看懂*/
        e_or2i    r3, 0x010A
        e_stw    r3, 0(r4)

2、清空分支预测中其他的有效值,并使能分支预测功能

        e_li    r3, 0x201
        mtspr    1013, r3    /*写入BUCSR*/
        se_isync

3、初始化内核通用寄存器

        e_li    r0, 0
        e_li    r1, 0
        e_li    r2, 0
        e_li    r3, 0
        e_li    r4, 0
        e_li    r5, 0
        e_li    r6, 0
        e_li    r7, 0
        e_li    r8, 0
        e_li    r9, 0
        e_li    r10, 0
        e_li    r11, 0
        e_li    r12, 0
        e_li    r13, 0
        e_li    r14, 0
        e_li    r15, 0
        e_li    r16, 0
        e_li    r17, 0
        e_li    r18, 0
        e_li    r19, 0
        e_li    r20, 0
        e_li    r21, 0
        e_li    r22, 0
        e_li    r23, 0
        e_li    r24, 0
        e_li    r25, 0
        e_li    r26, 0
        e_li    r27, 0
        e_li    r28, 0
        e_li    r29, 0
        e_li    r30, 0
        e_li    r31, 0

4、初始化其他的内核寄存器

        mtspr    1, r1        ;#XER
        mtcrf    0xFF, r1
        mtspr    CTR, r1
        mtspr    272, r1        ;#SPRG0
        mtspr    273, r1        ;#SPRG1
        mtspr    274, r1        ;#SPRG2
        mtspr    275, r1        ;#SPRG3
        mtspr    58, r1        ;#CSRR0
        mtspr    59, r1        ;#CSRR1
        mtspr    570, r1        ;#MCSRR0
        mtspr    571, r1        ;#MCSRR1
        mtspr    61, r1        ;#DEAR
        mtspr    63, r1        ;#IVPR
        mtspr    256, r1        ;#USPRG0
        mtspr    62, r1        ;#ESR
        mtspr    8,r31        ;#LR

5、根据PID的值决定是否跳转到初始化local ram(5777m有3个有效核,z4的id编码是2,即只有在z4中会初始化ram,z7直接跳过ram后初始化localram)。把循环的周期放入ctr寄存器,然后地址放在r5中。前面给通用寄存器r0~r31写的0,这里给ram初始化也是0.

;# Store number of 128Byte (32GPRs) segments in Counter
mfspr       r9, 286             ;# Save coreid to r9
e_cmp16i    r9, 0
e_beq       initialise_local_data_SRAM
e_cmp16i    r9, 1
e_beq       initialise_local_data_SRAM
 e_lis       r5, __SRAM_SIZE@h  # Initialize r5 to size of SRAM (Bytes)
 e_or2i      r5, __SRAM_SIZE@l
 e_srwi      r5, r5, 0x7         # Divide SRAM size by 128
 mtctr       r5                  # Move to counter for use with "bdnz"

;# Base Address of the internal SRAM
 e_lis   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值