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\n"
 "mcr p15,0,r0,c3,c0,0\n"把全部域设置为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之后,所有的地址都要经过一个转换的过程,不管是访问内存还是外设,故

代码如下:

最新文章

  1. FE
  2. 【百度文库课程】Java语言基础与OOP入门学习笔记一
  3. 从小工到专家 ——读《Java程序员职场全攻略》有感
  4. E9相关技术链接
  5. suse11 sp2 搭建openvpn
  6. 『方案』《女友十年精华》 ORC 图片 文字识别 详解
  7. Poj(2253),Dijkstra松弛条件的变形
  8. SQO (标准查询运算符)方法 & Linq To Object
  9. Android BroadcasetReceiver
  10. WebApi(三)-属性路由 自定义访问路径
  11. Ajax之HTTp请求
  12. robot framework环境搭建和简单示例
  13. boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
  14. angular实现跨域
  15. ios url网址相关问题解说
  16. Nginx概述和安装(1)
  17. nyoj 1022 合纵连横 经典并查集
  18. JS库创建
  19. 20165221 Linux安装及命令入门学习
  20. activemq 安装 部署

热门文章

  1. 洛谷3778 [APIO2017]商旅
  2. java md5 函数
  3. VMware网络模式介绍
  4. 浅谈FPGA资源评估
  5. NIOS EDS最容易出错的地方
  6. php排序集合
  7. Spring Session实现Session共享下的坑与建议
  8. 杂项-公司:摩根大通百科-un
  9. 第2章 深入分析java I/O的工作机制(下)
  10. 安卓端后台登录接口单元测试demo