专题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之后,所有的地址都要经过一个转换的过程,不管是访问内存还是外设,故

代码如下:

 

原文地址:https://www.cnblogs.com/gary-guo/p/5799107.html