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

来源:互联网 发布:羊毛刷批发淘宝网 编辑:程序博客网 时间:2024/05/20 11:21

一.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:  @处理未定义指令异常        nopsoftware_interrupt:     @软中断        nopprefetch_abort:         @预取指令异常        nopdata_abort:             @数据访问异常        nopnot_used:               @空位        nopirq:                    @中断        nopfiq:                    @快速中断        nopreset:                  @reset        bl set_svc          @设置为SVC模式        bl disable_watchdog @关闭看门狗        bl disable_interrupt @关闭中断        bl disable_mmu      @关闭mmuset_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,lrdisable_interrupt:        mvn r1,#0x0         @0x0 取反,给r1        ldr r0,=0x71200014        str r1,[r0]        ldr r0,=0x71300014        str r1,[r0]        mov pc,lrdisable_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

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

0 0
原创粉丝点击