zoukankan      html  css  js  c++  java
  • Tiny6410之MMU开启

    存储管理单元存储管理单元MMU概述
      在ARM系统中,存储管理单元MMU主要完成以下工作:
    1、虚拟存储空间到物理存储空间的映射。在ARM中采用页式虚拟存储管理。他把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。页的大小可以分为粗粒度和细粒度两种。MMU要实现虚拟地址到物理地址的转换。
    2、存储访问权限的控制
    3、设置虚拟存储空间的缓冲特性

    MMU的操作步骤
    1、使无效cachen/TLB
      在S3C6410中 CP15中的寄存器C7用于控制cache和写缓冲区,他是一个只写的寄存器。使用MRC指令读取该寄存器,将产生不可预知的结果。使用MCR指令写该寄存器,具体操作格式如下:
        MCR p15, 0, <Rd>, <c7>, <CRm>, <opcode_2>
    其中 CRm = c7 ,opcode_2 = 0 表示使无效整个cache(Icachen和Dcachen),
    其中 CRm = c10 ,opcode_2 = 4 表示清空写缓冲区
        
    2、将页表地址告诉MMU
    页表存放在内存中,系统通常有一个寄存器来保存页表的基地址,在ARM中系统控制协处理器CP15的寄存器c2用来保存页表的基地址。具体操作格式如下
        MCR p15, 0, <Rd>, <c2>, <CRm>, <opcode_2>
        其中 CRm = c0 ,opcode_2 = 0 表示写入基地址


    3、设置域
      MMU可以将整个存储空间分为最多16个域。每个域对应一定的内存区域,该区域具有相同的访问控制属性。MMU中寄存器C3用于控制与该域相关的属性配置


    4、使能cache
      和cache和写缓冲操作相关的寄存器包括CP15中的寄存器C7、寄存器C9以寄存器C1中的某些位寄存器c1中与cache和写缓冲区操作相关的为有C(bit[2]),W(bit[3]),I(bit[12]),和RR(bit[14])其中 CRm = c7 ,opcode_2 = 0 表示使无效整个cache(Icachen和Dcachen).


    5、使能MMU
      CP15的寄存器C1的位[0]用于控制禁止/使能MMU。当CP15的寄存器C1的位[0]设置成0时,禁止MMU;当CP15的寄存器C1的位[0]设置成1时,使能MMU;C(bit[2]) 当数据cache和指令cache是分开的时候,本控制禁止/使能数据cache;当数据cache和指令cache是统一的时候该控制位禁止/使能整个cache
      0  禁止cache
      1  使能cache
     W(bit[3]) 禁止/使能写入缓冲
      0 禁止写入缓冲
      1 使能写入缓冲
     I(bit[12]) 当数据cache和指令cache是分开的时候,本控制禁止/使能指令cache;
      0  禁止cache
      1  使能cache

      RR(bit[14]) 如果系统中的淘汰算法可以选择的话,本控制位选择淘汰算法
      0 选择常规的淘汰算法
      1 选择预测性的淘汰算法

     //将页表地址告诉MMU,启动MMU
     .global mmu_enable
     mmu_enable:
         //使无效cache/TLB 
          mov r1, #0
          mcr p15, 0, r1, c7, c7, 0     //使无效ICache、DCache
          mcr p15, 0, r1, c7, c10, 0    //使无效写缓冲
          mcr p15, 0, r1, c8, c7, 0     //使无效指令、数据TLB
         
         //将页表地址告诉MMU
         mcr p15, 0, r0, c2, c0, 0     //写入页表地址,r0位页表基地址
         
         //设置域
         mrc p15, 0, r1, c3, c0, 0     //获取控制寄存器的值
         orr r1, r1, #3
         mcr p15, 0, r1, c3, c0, 0
         
         //使能ICache、DCache
         mcr p15, 0, r1, c1, c0, 0     //读取控制寄存器的值
      
         orr r1,r1, #(1<<2)
         orr r1,r1, #(1<<12)
         orr r1,r1, #(1<<14)
         mcr    p15, 0, r1, c1, c0, 0  //写入控制寄存器
         
         //使能MMU
         orr r1,r1,#(1<<0)
         mcr p15,0,r1,c1,c0,0
         //返回
         mov pc lr
    MMU.S
    海阔凭鱼跃,天高任鸟飞。
  • 相关阅读:
    SKAction类
    SpriteKit所有的类
    Reachability下载地址
    IOS学习教程
    SpriteKit游戏开发
    APP开发者到期续费说明
    Unique Paths
    Letter Combinations of a Phone Number
    Reverse Nodes in k-Group
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/chenshikun/p/6009275.html
Copyright © 2011-2022 走看看