嵌入式学习-uboot-lesson4.4-关闭MMU和cache

一.cache

cache里面存放的是存储器数据的拷贝
Cache是一种容量小但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。按照功能划分:
I-Cache(16KB): 指令Cache,用于存放指令
D-Cache(16kb): 数据Cache,用于存放数据

mmu和cache都是通过CP15协处理器来控制的
在Arm1176jzfs.pdf中

1.首先需要使ICACHE和dcache无效

这里写图片描述

2.然后将cp15寄存器里面的数据读取出来

这里写图片描述

3.将MMU和Dcace置为0,Icache则不是必需的

这里写图片描述

disable_mmu:
        mcr p15,0,r0,c7,c7,0    @使ICACHE 和DCACHE 无效
    mrc p15,0,r0,c1,c0,0    @read control register
    bic r0,r0,#0x00000007   @mmu 和 dcache置零
    mcr p15,0,r0,c1,c0,0    @write control register
    mov pc,lr
@****************************
@name: start.S
@by  : stone
@time: 2016.6.23
@function: 关闭mmu
@****************************

.text
.global _start  @将_start声明为全局变量
_start:
        b   reset                       
        ldr pc, _undefined_instruction  
        ldr pc, _software_interrupt     
        ldr pc, _prefetch_abort         
        ldr pc, _data_abort             
        ldr pc, _not_used               
        ldr pc, _irq                    
        ldr pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt:    .word software_interrupt
_prefetch_abort:    .word prefetch_abort
_data_abort:        .word data_abort
_not_used:      .word not_used
_irq:           .word irq
_fiq:           .word fiq                   

undefined_instruction:  @处理未定义指令异常
        nop

software_interrupt:     @软中断
        nop

prefetch_abort:         @预取指令异常
        nop

data_abort:             @数据访问异常
        nop

not_used:               @空位
        nop

irq:                    @中断
        nop

fiq:                    @快速中断
        nop

reset:                  @reset
        bl set_svc          @设置为SVC模式
        bl disable_watchdog @关闭看门狗
        bl disable_interrupt @关闭中断
        bl disable_mmu      @关闭mmu
set_svc:        
        mrs r0, cpsr        @将值取出cpsr寄存器
        bic r0, r0, #0x1f   @将后5位 即M[4:0]清零 
        orr r0, r0, #0xd3   @0b10011 转化为16进制为0x13 同时为了屏蔽irq和fiq,可以将其设置为0b11010011即0xd3  
        msr cpsr, r0        @将值送回cpsr寄存器
        mov pc, lr          @返回

#define pwTCON 0x7E004000   @WTCON寄存器
disable_watchdog: 
        ldr r0, =pwTCON     @把地址装载到R0
        mov r1, #0x0        @置0,关闭看门狗
        str r1,[r0]     
        mov pc,lr

disable_interrupt:
        mvn r1,#0x0         @0x0 取反,给r1
        ldr r0,=0x71200014
        str r1,[r0]
        ldr r0,=0x71300014
        str r1,[r0]
        mov pc,lr

disable_mmu:
        mcr p15,0,r0,c7,c7,0  @使ICACHE 和DCACHE 无效
        mrc p15,0,r0,c1,c0,0  @read control register
        bic r0,r0,#0x00000007 @mmu 和 dcache置零
        mcr p15,0,r0,c1,c0,0  @write control register
        mov pc,lr

菜鸟一枚,如有错误,多多指教。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值