Part5.5关闭mmu和cache
cache作用就是存放曾经使用过的数据的拷贝,如果第二次要用就直接从cache中取,不用再到内存里面拿了



mmu就是完成虚拟地址转换到物理地址。

这里把它们关闭是因为如果没有正确配置会导致错误



第二个

第一个中0,2位必须disable掉,而12位不一定必须disable。所以这里就去掉两项
reset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
bl disable_mmu
set_svc:
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0x13 //uboot里面是0xd3,转化为二进制11010011,后五位一样,他屏蔽了中断和快速中断,我们也可以照它的来
msr cpsr,r0
mov pc,lr //LR(R14)保存了返回地址,PC(R15)保存了当前地址,这句话意思就是从子程序返回
#define pWTCON 0x7e004000 //这里定义的是看门狗控制器的地址,实现对里面值的操作
disable_watchdog:
ldr r0, =pWTCON //这个伪指令把常量转载到r0里面
mov r1,#0x0 //为了方便直接把寄存器所有位 置零
str r1,[r0] //不直接把立即数0放到r0里面 是因为mov指令只能访问通用寄存器
mov pc,lr
disable_interrupt:
mvn r1,#0x0 //mvn是取反后填入r1当中,这样就可以不需要知道r0位数将其全部置一
ldr r0, =0x71200014
str r1,[r0]
ldr r0, =0x71300014
str r1,[r0]
mov pc,lr
disable_mmu:
mcr p15,0,r0,c7,c7,0 //第二个
mrc p15,0,r0,c1,c0,0 //第一个
bic r0,r0,#0x00000007
mcr p15,0,r0,c1,c0,0
mov pc,lr

浙公网安备 33010602011771号