历史上的今天

今天是:2024年09月26日(星期四)

正在发生

2021年09月26日 | ARM内存管理单元--MMU

发布者:清新生活 来源: eefocus关键字:ARM  内存管理单元  MMU 手机看文章 扫描二维码
随时随地手机看文章

前言

我们在学习4412的时候,我们原本的中断地址已经被IROM和IRAM占据了,并且不允许被修改,所以我们只能去选取高端地址0xffff 0000高端地址,但是这一片地址属于虚拟地址,所以我们需要开启MMU


MMU定义

MMU功能,(memory management unit) 内存管理单元,MMU是硬件的内存管理器件,使用硬件方式对内存进行映射管理。


物理内存 0X4000 0000 - 0X8000 0000,的某些指定地址,映射到虚拟内存地址上。 虚拟内存地址总计大小 0X0000 0000 – 0X FFFF FFFF 总计4GB ,他包含了0xffff 0000这地址,我们就可以去开启异常,其中异常包含着硬件最重要的中断


同样的,MMU的存在可以让计算机多出很多的空间,他要配合协处理器寄存器等方式来实现,所以我们需要使用到内联汇编

他是一种多对一的方式,虚拟地址很多存储在相同的物理空间中,它通过走表的方式获得物理内存,下面我们详细介绍他的走表过程


MMU的走表过程

上图就是完整的走表过程,他经过非常精细的设计,下面我们来介绍一下他这个过程


Input address,先获取一个虚拟地址,然后去掉后面的20位,只留前面的12位,

First-level descriptor address,将他和从C2寄存器中取出来的28位拼在一起,并且在后面加上00代替,表示使用的部分流的方式,刚才虚拟地址的前12位就被当作了偏移量

First-level Section descriptor,通过图中Translation flow for a Section找到了对应的地址,

Output address,这时候取他的前16位就是他的真实物理地址

协处理器来查表

协助核心工作的协处理了,他的内部有16个寄存器,cp0–cp15,他的名字是c1-c15,其中我们要用到的是c1,c2,c3,起始表项写到c2,c1是用来使能mmu,c是用来设置使能内存的权限


extern void enable_mmu(u32 *ttb)

{

    __asm__ __volatile__(

        "nopnt"

        //将TTB基地址写入C2

        "mcr p15, 0, %[ttb], c2, c0, 0nt"


        //设置C3的内存访问权限为最大权限,全部设为11

        "mvn r0, #0nt"

        "mcr p15, 0, r0, c3, c0, 0nt"

        //设置C1,使能MMU,顺便设置异常向量表存储在高端地址

        

        "mrc p15, 0, r0, c1, c0, 0nt"

        "orr r0, r0, #(0x1 << 13)nt"

        "orr r0, r0, #0x1nt"

        "mcr p15, 0, r0, c1, c0, 0nt"

        "nopnt"

        :

        :[ttb]"r"(ttb)

        :"r0"

    );


}


MMU功能的实现

由于频繁使用,所以我们将走表过程写成宏函数


/*

    TTB 由C2给定的转换表的基地之,看成一个数组

    VA 要映射的虚拟地址的基地址, 取高12位,可以配合TTB基地址当成数组寻找表项

    PA 表项中需要指定的物理基地址,管理本地址上1M的物理地址空间的映射

*/

#define CREAT_DESCRIPTOR(TTB, VA, PA)

    TTB[VA>>20] = ((PA&0xfff0000)|(0x2))


同时我们查手册,我们需要将板子出场的地址占用,还有真实的物理地址,不能让他映射,方法就是自己映射自己


memset(ttb, 0x0, 4096*4);


    section_map(ttb, 0x0, 0x0cd00000,0x0);


    section_map(ttb,0x0ce00000,0x14000000,0x0ce00000);


    section_map(ttb, 0x40000000,0x80000000,0x40000000);


同时我们应该注意,我们映射的时候使用的是段映射,所以我们的低20位要和映射地址的低20位相同,因为在走表的时候,他们的偏移量是相同的

关键字:ARM  内存管理单元  MMU 引用地址:ARM内存管理单元--MMU

上一篇:ARM之异常
下一篇:Alif推出Ensemble和Crescendo两大物联网融合MCU系列

推荐阅读

最近,一段短视频在推特上引发了病毒式传播,短时间内有超过五百万人次观看。视频内容其实很简单,就是一个人形机器人在路上漫步。 然而,点开视频的人都感到无可言状的恐惧,大呼噩梦来临,著名的英国精神论者 Drren Brown 转发配文说“我们都要死(WE ARE ALL GOING TO DIE)”,更是引发了讨论热潮。 原因就在于:这个机器人和人类实在太像...
外媒PhoneArena测试了苹果iPhone 11 Pro的快速充电;信息显示,将苹果iPhone 11 Pro充满电需要1小时42分钟。  据PhoneArena统计信息显示,充电15分钟显示28%的电量,充电30分钟电量为55%,45分钟电量为74%,1小时电量为85%,1小时15分钟电量为94%,1小时30分钟为98%,1小时42分钟充满。  此前据工信部信息显示,苹果iPhone 11内置3110mA...
国内MCU芯片市场风云再起,资本力量向优质国内MCU厂商聚焦。9月25日,上海芯旺微电子技术有限公司(ChipON,以下简称“芯旺微”)正式宣布,公司引入包括硅港资本、上汽恒旭、中芯聚源、超越摩尔、联储证券、炬成投资等在内的A轮融资,获得亿元左右投资额,将主要用于新一代高性能MCU的开发、汽车电子领域的市场拓展,以及销售网络的搭建。公开资料显示,芯...
/**************************************************************************************实验现象:下载程序后"动态数码管模块"第5位循环显示0-9***************************************************************************************/#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16; //对...

史海拾趣

问答坊 | AI 解惑

综合利用LDO和DC/DC转换器优势

无论分立还是集成的电源管理方案终将落实到细节的进步上,以达成充分利用电能的目的。在综合利用DC/DC转换器和LDO的优势方面,多家厂商最近有不少新进展。     目前,便携产品需要越来越多的低电压通道,例如,手机中的主电源过去是 ...…

查看全部问答∨

新成员向大家问好

用心搜索,,用手去描写,大家好,!!!…

查看全部问答∨

单片机做的智能台灯

单片机做的智能台灯…

查看全部问答∨

基于CPLD的容错存储器的设计实现

摘 要: 分析了存储器产生错误的原因,提出了提高其可靠性的有效途径。结合航天计算机可靠性增长计划,给出了一套利用纠检错芯片对其进行容错的方案,并给出了通过CPLD器件实现的仿真结果。最后对容错存储器的可靠性进行了分析。 关键词: 容错; ...…

查看全部问答∨

CPU板器件、液晶及PCB收到,焊接完成

CPU板器件、液晶及PCB收到,一个晚上终于焊接完成,不多说了,上图。 [ 本帖最后由 disheng 于 2009-8-2 00:46 编辑 ]…

查看全部问答∨

步进电机正反转为什么有快慢?

我写了这么一个程序用于控制步进电机,通过改变flag的值来改变电机的转向,但为什么两个转向的速度有很明显的不一致? #include<reg52.h> unsigned char code Forward[4]={0xf1,0xe9,0xe5,0xe3}; unsigned char code Back[4]={0xf1,0xe3,0xe ...…

查看全部问答∨

用gprs传数据,用dtu呢还是modem呢

小弟要把现场由单片机采集的232数据传到上位计算机;中间传输计划用gprs。现打算买模块,却听某大大说,传数据用dtu不用modem。 小弟应该买dtu呢还是modem呢?有没有做过类似应用的前辈简单介绍下总体情况,在下感激不尽啊。 还有就是,市面 ...…

查看全部问答∨

构造原型系统的八大原则 对自己的产品设计很有帮助

不必担心!有成功之路可循!如果您可以演示,或者如果能给客户提供原型系统就更好了,并得到关于创新价值的真实反馈,那么您获得商业成功的可能性会大为提高。如果您希望创建企业实现自己的产品构思,请开发原型系统并牢记下列八大原则。 1、认识 ...…

查看全部问答∨

今年5.1放假干嘛去?(参加嵌入式Linux免费体验活动去!)

《嵌入式Linux免费体验班》(1天) 今年5.1放假干嘛去?参加嵌入式Linux免费体验活动!       ————————名额有限,限定12人,先报先得! 课程目标: 本课程针对嵌入式Linux开发的初学人员,能快速了解嵌入式Lin ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved