zoukankan      html  css  js  c++  java
  • 专题1-MMU-lesson3-MMU配置与使用

    1、段方式MMU

    利用虚拟地址然后找到物理地址,通过物理地址访问到led,其过程如下:

    一个段的大小是[19:0]总共有1M的地址空间。

    从上面可知对应GPIO的段物理基地址是0x7f000000.那么要在虚拟地址当中找一个段与之形成对应关系,那么这个段是多少呢,假如是0xa0000000这个段,把这两个段关联起来,那么通过页表来建立这个关系。那么这个页表存放在内存的起始地址0x50000000。接下来就要建立该页表的页表项,要建立页表项就要知道它在页表当中的位置,它的位置实际上就是页表的起始地址+虚拟地址的高12位,

    找具体表项里面的内容看芯片手册

    [31:20]保存的段的物理基地址的高12位,[19:12]should be zero固定为零。[11:10]access permission控制访问权限的,[9]:也为0;[8:5]域,[4]固定为1,[3]是否使用cache

    ,[2]是否使用write buffer

    ,[1]固定为1,[0]固定为0.

    表项中的第一个部分[31:20](0x7f000000&0xfff00000)

    表项中的第二个部分[19:12]0b00000000

    表项中的第三个部分[11:10]AP:

    表项中的第四个部分[9]为0

    表项中的第五个部分[8:5]domain

    表项中的第六个部分[4]固定为1

    表项中的第七个部分[3]c是否使用cache

    表项中的第八个部分[2]b是否使用buffer

    表项中的第九个部分[1:0]固定为0b10段的模式

    域和AP来共同决定访问权限的:

    有疑问???怎么把域写到对应页表项,是直接把对应数字域写到[8:5]位吗?比如要域3,将3写到[8:5]这里??,视频里面使用的域0,将0左移5位保存在[8:5]这里。那么下面的3-11表是什么意思??

    ARM系统把整个的存储空间分为了16个域,每一个域可以有一个权限,你可以选择你访问的区域放到哪一个域里面去,假如我们放到我们的域0里面,放到哪个域都没有关系,那么放到域0之后,那么这个区域的访问权限怎么来决定呢,

    可以将其设置为11对应table3-11

    "mvn r0,#0 "
     "mcr p15,0,r0,c3,c0,0 "把全部域设置为11,

    由三个因素AP、S、R来决定的;S、R由域里面的S、R来决定的,在cp15里面每一个域都有一个S和R设置,当把AP设置为11的时候,就不管S和R了,都可以进行读写操作。

    1、建立一级页表

    建立好了页表项之后,要写入TTB。

    2、写入TTB

    TTB是保存在CP15的c2寄存器,

    3、打开MMU

    别忘了当我们打开了MMU之后,所有的地址都要经过一个转换的过程,不管是访问内存还是外设,故

    代码如下:

     

  • 相关阅读:
    常用查询mysql
    java Scanner
    存储过程
    使用IDEA打jar包
    创建一个jmeter的外部jar包
    关于jmeter
    Anaconda
    IDEA中使用IdeaVim
    爬虫之scrapy框架
    爬虫之图形验证码识别技术
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5799107.html
Copyright © 2011-2022 走看看