当前位置:首页 > 单片机 > 单片机
[导读]MMU是内存管理单元,负责虚拟地址到物理地址的映射和内存访问权限检查。本文只讲地址映射,地址映射长度有段1MB、大页64KB、小页4KB、极小页1KB,本文只讲段1MB的情况,其它类似。我们每个进程的空间都是4G,不同的进

MMU是内存管理单元,负责虚拟地址到物理地址的映射和内存访问权限检查。本文只讲地址映射,地址映射长度有段1MB、大页64KB、小页4KB、极小页1KB,本文只讲段1MB的情况,其它类似。我们每个进程的空间都是4G,不同的进程的变量地址有可能一样,这就是虚拟地址,其实它们对应到物理地址是不一样的。这种虚拟地址到物理地址的转换就是MMU做的事。所以开启MMU之后,cpu发出的地址就是虚拟地址,关闭MMU,cpu发出的地址就是物理地址,关闭MMU的时刻,一般是boot阶段。


首先要建立一张映射表,按1M映射的话,4G共有4096个1M的段,每个需要4字节存储映射的地址,所以映射表的大小是4096*4字节(即16k),映射表的地址放在内存起始地址0x30000000。比如要把GPB的寄存器0x56000000映射到0xA0000000,0xA000000/1M=2560,所以在映射表的2560*4地址,存放0x56000000。然后把表格的首地址,即0x30000000告诉MMU,启动MMU即可。后面操作虚拟地址0xA0000000就是操作物理地址0x56000000。


unsignedlong*mmu_tlb_base=(unsignedlong*)0x30000000;

/*

*0x56000000是GPIO寄存器的起始物理地址,

*GPBCON和GPBDAT这两个寄存器的物理地址0x56000010、0x56000014,

*为了在第二部分程序中能以地址0xA0000010、0xA0000014来操作GPBCON、GPBDAT,

*把从0xA0000000开始的1M虚拟地址空间映射到从0x56000000开始的1M物理地址空间

*/

virtuladdr=0xA0000000;

physicaladdr=0x56000000;

*(mmu_tlb_base+(virtuladdr>>20))=(physicaladdr&0xFFF00000)|

MMU_SECDESC;

启动MMU的代码需要使用协处理器,需要了解arm核,暂不深入研究。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【转】mini2440裸机开启MMU实验 .text .global _start _start:     ldr sp, =4096                       @ 设置栈指针

关键字: mmu 裸机

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: mini2440 u-boot 移植 dm9000驱动

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。4,...

关键字: eeprom i2c mini2440 u-boot 移植

从NandFlash启动CPU的时候,CPU会自动通过其内部硬件结构复制NandFlash中的前4K代码到cpu的自带SRAM中,注意这是CPU自带的SRAM,区别于本文所讲的SDRAM,本文所指的SDRAM是外接SDR...

关键字: s3c2440 sdram 硬件篇

以下是驱动的源码。#includelinux/config.h//配置头文件#includelinux/kernel.h//用于调用kmalloc和kfree#includelinux/sched.h//调度,进程睡眠,...

关键字: gpio mini2440 驱动led

接上一篇:s3c2440硬件篇之三:NandFlash(1)介绍s3c2440读NAND Flash的步骤:①设置NFCONF 在HCLK=100Mhz的情况下,TACLS=0,TWRPH0=3,TWRPH1=0,则 N...

关键字: s3c2440 硬件篇 读nandflash

1.硬件原理2440有5个16位定时器,其中0、1、2、3有PWM功能,有一根输出引脚,可以产生周期性高低电平变化。定时器4没有输出引脚。2.芯片手册3.mini2440电路图4.S3C2440寄存器定时器时钟源是PCL...

关键字: mini2440 硬件篇 pwm定时器

移植环境1,主机环境:VMare下CentOS 5.5 ,1G内存。2,集成开发环境:Elipse IDE3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc...

关键字: Linux mini2440 内核 开发环境 移植

通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器。UART以全双工方式传输数据,最简单的连线只有2根,TxD用于发送,RxD...

关键字: mini2440 uart 硬件篇

//定义LED设备的名称,这里是leds,这个模块加载后,会自动在/dev目录里创建该名字的设备文件。#define DEVICE_NAME "leds"//mini2440开发板上有4个LED(发光...

关键字: LED驱动 mini2440
关闭