2410之MMU_Init()

发布者:科技独行者最新更新时间:2016-08-14 来源: eefocus关键字:MMU  Init() 手机看文章 扫描二维码
随时随地手机看文章
/************************************************ 

  NAME    : MMU.C
  DESC   :
  Revision: 2002.2.28 ver 0.0
 ************************************************/

#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "mmu.h"

// 1) Only the section table is used. 
// 2) The cachable/non-cachable area can be changed by MMT_DEFAULT value.
//    The section size is 1MB.

 

void MMU_Init(void)
{
    int i,j;
    //========================== IMPORTANT NOTE =========================
    //The current stack and code area can't be re-mapped in this routine.
    //If you want memory map mapped freely, your own sophiscated MMU
    //initialization code is needed.
    //===================================================================

    MMU_DisableDCache();//关闭数据Cache
    MMU_DisableICache();//关闭指令Cache

    //If write-back is used,the DCache should be cleared.
    for(i=0;i<64;i++)    //16K的Cache由512条Cache Line组成
     for(j=0;j<8;j++)    //ARM920T的一个Cache Line是32字节
         MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));//清除无效的数据cache内的列表
    MMU_InvalidateICache();  //无效指令cache
    
    #if 0
    //To complete MMU_Init() fast, Icache may be turned on here.
    MMU_EnableICache(); 
    #endif
    
    MMU_DisableMMU();  //关闭MMU
    MMU_InvalidateTLB();   //无效整个TLB

    //MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr) 虚拟地址与物理地址映射规则函数
    MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB);  //bank0 //attr为访问权限,页缓冲等属性配置
    MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB);  //bank1  //此处皆为平行相等映射
    MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
    MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
    MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4
    MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
    MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CB);   //bank6-1
    MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_NCNB); //bank6-2
    MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   //bank6-3
    MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
    
    MMU_SetMTT(0x40000000,0x5af00000,0x40000000,RW_NCNB);//SFR+StepSram    
    MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used

    MMU_SetTTBase(_MMUTT_STARTADDRESS);   //设置基地址:C2用于保存页表的在内存中的基地址,
    MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);   ////MMU将整个存储空间分成16个域
     //DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
    MMU_SetProcessId(0x0);
    MMU_EnableAlignFault();
     
    MMU_EnableMMU();
    MMU_EnableICache();
    MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}   


// attr=RW_CB,RW_CNB,RW_NCNB,RW_FAULT
void ChangeRomCacheStatus(int attr)
{
    int i,j;
    MMU_DisableDCache();
    MMU_DisableICache();
    //If write-back is used,the DCache should be cleared.
    for(i=0;i<64;i++)
     for(j=0;j<8;j++)
         MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    MMU_InvalidateICache();
    MMU_DisableMMU();
    MMU_InvalidateTLB();
    MMU_SetMTT(0x00000000,0x07f00000,0x00000000,attr); //bank0
    MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,attr); //bank1
    MMU_EnableMMU();
    MMU_EnableICache();
    MMU_EnableDCache();
}    
   

//void MMU_SetMTT(虚拟地址首地址,虚拟地址末地址,物理地址首地址,相关属性)

void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
{
    U32 *pTT;
    int i,nSec;      
    pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);//基址加VA高12位得到该描述符在页表中的地址
                                  // 页表中每一行对应一个虚地址页对应的实地址页的地址、该位的方位权限和该页的缓冲特性
    nSec=(vaddrEnd>>20)-(vaddrStart>>20);//段大小
    for(i=0;i<=nSec;i++)*pTT++=attr |(((paddrStart>>20)+i)<<20);//映射规则:在映射页表中条目中写上相应的要映射的物理地址及相关属性。由虚拟地址可以找到在映射页表中的相应条目,再由条目中的内容找到相应的物理地址。注:条目中的内容:高12为物理地址段基址,映射规则的根本之处;低12位为相应的访问属性等
}

关键字:MMU  Init() 引用地址:2410之MMU_Init()

上一篇:S3C2410启动代码详解(3)
下一篇:S3C2410之LCD

推荐阅读最新更新时间:2024-03-16 15:05

S3C2410简易JTAG详解
常见的JTAG cable结构都比较简单,一端是DB25,接到电脑的并口上,中间经过74HC244和一些电阻实现电平转换(5V3.3V?)(也有比较猥琐的只用了 几个100 Ohm电阻的方案),另一端的JTAG header接到目标板的JTAG interface。 并口DB25原先主要是用来连接打印机,其引脚定义如下: 25 Pin D-Sub SPP SIGNAL DIRECTION IN/OUT 1 /Strobe In/Out 2 Data 0 Out 3 Data 1 Out 4 Data 2 Out 5 Data
[单片机]
基于S3C2410处理器实现3G无线网卡接入无线网络功能的设计
本研究的目的是实现一个具有3G无线网络接入功能的嵌入式系统。系统的硬件平台是基于ARM系列的S3C2410微处理器。文章简要介绍了该系统的体系结构,给出USB主机接口硬件电路。研究基于USB接口的3G无线网卡的无线网络接入功能实现,包括研究Linux USB设备驱动程序、实现USB Serial设备的驱动、定制Cramfs文件系统。最后移植和配置PPP拨号程序,实现嵌入式系统通过3G无线网卡接入无线网络的功能。 目前,嵌入式技术已广泛应用于工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品等各类产品。随着3G牌照的发放,无线网络的带宽大幅扩展,具有3G无线网络接入功能的嵌入式系统更加具有发展前景。本文将介绍中兴的AC
[单片机]
基于S3C<font color='red'>2410</font>处理器实现3G无线网卡接入无线网络功能的设计
Nandflash 驱动深度分析(基于S3C2410
NAND Flash在嵌入式系统中的地位与PC机上的硬盘类似,用于保存系统运行所必需的操作系统、应用程序、用户数据、运行过程中产生的各类数据。与内存掉电后数据丢失不同,NAND Flash中的数据在掉电后仍可永久保存。 操作NAND Flash时,先传输命令,然后传输地址,最后读/写数据,期间要检查Flash的状态。对于K9F5608U0D,它的容量为32MB,需要25位地址。发出命令后,后面要紧跟3个地址序列。比如读Flash时,发出读命令和3个地址序列后,后续的读操作就可以得到这个地址及其后续地址的数据。相应的命令字和地址序列如表1和2所示: 表1:K9F5608U0D命令设置表 表2:K9F5608U0D寻址周期
[单片机]
Nandflash 驱动深度分析(基于S3C<font color='red'>2410</font>)
基于S3C2410-ARM-Linux静态映射分析
s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_TOUT0); 我们可以这样控制外设寄存器,想过它怎么实现的吗? 首先分析下 struct machine_desc (include/asm-arm/Mach/Arch.h) 这是一个非常重要的结构体,内核通过 machine_desc 来控制体系架构相关部分的初始化,包括map_io,init_irq,init_machine,pthys_io,timer等 struct machine_desc { /* * Note! The first five elements are
[单片机]
基于S3C2410的辅助倒车数字图象系统设计
1 、引言 据统计,由于车后盲区所造成的交通事故在中国约占30%,美国20%。前两代倒车辅助产品,一种是倒车喇叭,一种是倒车雷达。前者只能提醒路人自行躲闪,而司机却一无所知,固定的障碍物更是无法探测,起到的作用微乎其微,后者虽能把固定的障碍物通过报警的形式告知司机,但司机还是无法判断障碍物的确切位置,更不能探测地坑或低矮障碍物。 目前,国内外的研究趋势是在倒车雷达的基础上采用数字图像处理技术,利用强大的嵌入式处理器,开发用于检测车后物距和监视车后图像的优点相结合的车载可视倒车装置。 因此本文提出一种基于S3C2410的辅助倒车系统设计,该系统不但使驾驶员可以在车内观察到汽车车尾的真实场景,而且可以通过系统所带的测距报警模块可
[单片机]
基于S3C<font color='red'>2410</font>的辅助倒车数字图象系统设计
关于S3C2410的存储器
s3c2410的存储控制器的的主要特性如下: 1.可通过软件设置大端/小端模式. 2.分为8个bank,每个bank为128M,总共为1G. 3.每个bank的数据宽度都可以设为8/16/32bit方式(bank0除外,因为bank0要用作系统引导) 4.bank0-5支持ROM SRAM等,bank6-7支持ROM SRAM,SDRAM等等. 5.bank0-6的起始地址空间固定,bank7可变. 6.bank6-7的空间大小可以调整 7.可编程所有bank的访问时序. 8.可用外部等待模式延长访问周期. 9支持SDRAM的自刷新模式和power down模试. 其空间分配情况如下: 当从nor flash引导时,空间0
[单片机]
关于S3C<font color='red'>2410</font>的存储器
Linux2.6内核2410平台上的移植
一、准备必要的文件 1.首先去官方网站下载最新的llinux内核 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 2.因为linux2.6.14内核需要更新版本的编译器,所以需要下载交叉编译器 ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2 二、安装文件 1、把gcc解压到/usr/local/arm/3.4.1目录下 2、接下来需要解压linux内核,输入命令: # tar -jxvf linux-2.6.14.tar.bz2 将内核解压
[单片机]
S3C2410存储器管理单元
MMU,全称Memory Manage Unit, 中文名 存储器管理单元。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。覆盖块0首先运行,结束时他将调用另一个覆盖块。虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。人
[单片机]
S3C<font color='red'>2410</font>存储器管理单元
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved