arm9之MMU_Init()

发布者:平静心境最新更新时间:2016-11-27 来源: eefocus关键字:ARM9  MMU 手机看文章 扫描二维码
随时随地手机看文章

#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位为相应的访问属性等
}


关键字:ARM9  MMU 引用地址:arm9之MMU_Init()

上一篇:2440 ADC触摸屏控制
下一篇:S3C2440快速启动的实现描述

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

基于ARM9的无线多床位心电监护仪的设计
1 引言 随着社会生活节奏加快、人口逐渐老龄化,心血管疾病已经成为同前威胁人类生命的丰要疾病之一,此类疾病往往具有突发性、短暂性和危险性的特点,如果不能及时发现并进行治疗将会产生非常严重的后果。心电图是检查.诊断和预防该类疾病的主要手段和依据,对于心肌梗塞、心律失常等症状,心电监护仪的使用贯穿于治疗、康复的整个过程。由于传统的基于PC机平台的心电躲护仪,价格昂贵,体积庞大,不便于移动且主要集中在大医院,给医生和病人带来了很大的不便。因此,为了降低成本、缩小体积,本文设计了一种基于ARM9微处理器的新型便携式多床位遥测心电监护仪。该监护仪采用Samsung公司的一款以ARM920T为控制器内核的16/32位高速处理器S3C2
[工业控制]
基于<font color='red'>ARM9</font>的无线多床位心电监护仪的设计
采用ARM9处理器S3C2410的数字多路语音记录器设计
1. 引言 数字多路语音记录器在安全、监控方面有很多应用。一些传统的设计方案基于工控机,用数据采集卡实现语音的A/D转换,用软件实现语音编解码,这种方案成本高、功耗大。如果采用嵌入式的设计方案,可以实现同样的功能,并且具有低成本,低功耗的特点。 普通的低成本嵌入式处理器性能不高,不足以实现多路语音的实时编码、解码,需要用专门的语音处理芯片完成这一工作。基于DSP自主设计语音编码器是一种方法,但工作量大。AC48304广泛应用于各种小型VOIP网关中,价格低廉,是一种很好的替代方案。同时AC48304还具有DTMF识别和静音检测等功能,便于实现电话号码识别和语音的自动记录。 ARM是一种应用广泛的嵌入式处理器,Samsung、
[单片机]
采用<font color='red'>ARM9</font>处理器S3C2410的数字多路语音记录器设计
ARM9的寄存器
CPSR寄存器(程序状态): T标志位:1:THUMB状态(指令16位半对齐) 0:ARM状态(指令32位对齐) I、F: 中断屏蔽位,把它们设置为1可以相应的屏蔽IRQ和FIQ中断 M4-M0: 处理器工作模式位,只能按照下列组合工作,其它的非法组合都会进入未知的状态,而导致处理器复位。
[单片机]
<font color='red'>ARM9</font>的寄存器
基于ARM9的自由摆平板控制板的设计及实现
本设计的重点在于通过加速度传感器MMA7455采集各关节处角度信息,并根据得到的角度值及任务要求控制步进电机的运转,完成自由摆臂末端平板姿态的调整,完成预定任务。通过MMA7455加速度传感器得到的是三轴加速度信息,而在实际控制过程中所需要的是角度信息,所以要用到三角函数完成加速度值到角度值的转换,其次实践证明MMA7455加速度传感器稳定性较差,需要通过滑动平均滤波算法对得到的三轴加速度值进行滤波处理,以达到精确控制的目的。而对于步进电机的精确控制则需要PID控制算法以去除控制过程中的抖动,达到自控系统“稳、准、快”的设计要求。综上所述,本系统中存在大量的数据运算及控制算法并且对实时性要求较高,因此选用主频高达400 MHz
[单片机]
基于<font color='red'>ARM9</font>的自由摆平板控制板的设计及实现
基于ARM9与LINUX的RS485总线的通信接口设计
  摘要:在ARM9处理器S3C2440上设计RS485通信接口,实现与总线上其他设备的通信,利用ARM9处理器内部集成的UART外设和RSM485CT模块组成RS485通信硬件接口,在嵌入式Linux系统下设计RS485通信程序实现与RS485总线上的其他外设间的数据互通。实验效果良好,表明该设计是行之有效的。文中在介绍了通信接口的硬件设计、Linux下RS485驱动设计、通信程序设计的同时,重点介绍了Linux系统下RS485通信程序的编写方法以及RS485总线上设备通信的实现过程。   0引言   随着ARM处理器应用的范围的不断深入,根据需求的不同ARM提供的外设也越来越丰富,常用的通信接口有RS232、RS485、C
[单片机]
基于<font color='red'>ARM9</font>与LINUX的RS485总线的通信接口设计
基于ARM9的嵌入式Zigbee网关设计与实现
引言 无线传感器网络(Wireless Sensor Network,WSN)是指由大量成本相对低廉的,具有感知能力、计算能力、实时通信能力的传感器节点组成的嵌入式无线网络,是当前众多领域的研究和应用热点。建立在IEEE 802.15.4(LR_WPAN,低速率无线个人区域网)上的Zigbee协议是应用于无线监测与控制的全球性无线通信标准,是无线传感器网络组网的首选技术之一。 随着Zigbee无线传感器网络技术的广泛应用,如何通过现有网络基础设施(如Internet、GPRS等)对其进行远程管理、控制感测环境中的各种传感装置,逐渐成为该领域的重要研究课题。图1给出了基于Zigbee的无线传感器网络体系结构,如图示Zig
[单片机]
基于<font color='red'>ARM9</font>的嵌入式Zigbee网关设计与实现
2410之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) On ly the section table is used. // 2) The c
[单片机]
基于ARM9的数控铣床系统设计方案
引言 目前国内使用的数控系统通常是在通用计算机或工控机的基础上加装运动控制卡,使用Windows操作系统,并安装昂贵的数控软件构成的。这样的系统软件成本高、硬件资源浪费、功耗大。而嵌入式产品具有系统结构精简、功耗低等特点,能弥补传统数控系统的不足。免费软件Linux 操作系统进军嵌入式领域,更使得嵌入式产品能够充分发挥廉价、高性价比的优势。 本文所述的正是以Linux操作系统为软件平台,以ARM9微处理器为硬件平台,以数控铣床为背景,自主研发数控硬件及软件的嵌入式数控铣床控制系统。 1 系统硬件组成 系统的硬件由ARM系统主板和扩展板卡组成。 硬件结构如图1。 1.1 ARM系统主板 根据系统需要,主板上主要包括
[单片机]
基于<font color='red'>ARM9</font>的数控铣床系统设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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