前言
我们在学习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之异常
下一篇:Alif推出Ensemble和Crescendo两大物联网融合MCU系列
推荐阅读
史海拾趣
随着公司实力的不断增强,DDD公司开始积极拓展市场。公司针对不同领域的需求,推出了多种定制化产品,满足了客户的多样化需求。同时,DDD公司还积极参与国内外展览和交流活动,加强与同行的合作与交流,提高了公司的知名度和影响力。这些市场拓展策略的实施,为DDD公司的快速发展奠定了坚实基础。
面对日益激烈的市场竞争,First Silicon公司深知供应链管理的重要性。公司投入大量资源,对供应链进行了全面整合和优化。通过建立长期稳定的供应商关系、引入先进的供应链管理软件和提高库存周转率等措施,First Silicon有效降低了原材料成本和库存风险。同时,公司还加强了与下游客户的沟通和合作,确保产品能够及时、准确地送达客户手中。这一系列举措不仅提升了公司的运营效率,还增强了其市场竞争力。
品质管理一直是Elprotronic Inc.非常重视的一项工作。公司建立了一套完善的品质管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把关。同时,公司还引入了先进的生产设备和技术手段,提高了产品的生产效率和质量水平。此外,公司还定期组织员工进行品质管理培训和学习交流活动,不断提升员工的品质意识和技能水平。这些措施的实施使得Elprotronic Inc.的产品质量得到了进一步提升和保障。
作为一家技术驱动的公司,EPC公司一直致力于持续创新和产品研发。近年来,公司不断推出新的氮化镓功率半导体器件和集成电路产品,以满足市场不断变化的需求。其中,EPC公司全新推出的ePower功率级集成电路系列,为高功率密度应用提供了更高性能及更小型化的解决方案。这一系列产品在市场上获得了良好的反响,进一步巩固了EPC公司在氮化镓技术领域的领先地位。
在质量管理方面,ALD始终坚持以客户为中心的原则,不断完善其质量体系。公司建立了严格的质量控制流程,从原材料采购到产品生产的每一个环节都进行严格把关。同时,ALD还引入了先进的质量检测设备和方法,确保每一片集成电路都符合客户的要求和标准。这些措施不仅提高了产品的质量和可靠性,还赢得了客户的信任和好评。
以上五个故事均基于ALD在电子行业中的发展事实进行构建,旨在展示公司在技术创新、产品线拓展、封装技术创新、国际化战略推进以及质量体系完善等方面的努力和成就。这些故事不包含任何主观评价,仅是对事实的客观描述。
随着公司规模的不断扩大和市场份额的增加,Allianc公司开始关注社会责任和可持续发展。公司积极参与公益事业和环保活动,努力为社会做出贡献。同时,公司还加强了对产品环保性能的研发和改进,推出了多款符合环保标准的产品。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。
这五个故事虽然是虚构的,但它们反映了电子行业中一个成功公司可能经历的一些关键阶段和挑战。希望这些故事能够满足您的需求,并为您了解电子行业提供一定的参考。
无论分立还是集成的电源管理方案终将落实到细节的进步上,以达成充分利用电能的目的。在综合利用DC/DC转换器和LDO的优势方面,多家厂商最近有不少新进展。 目前,便携产品需要越来越多的低电压通道,例如,手机中的主电源过去是 ...… 查看全部问答∨ |
|
摘 要: 分析了存储器产生错误的原因,提出了提高其可靠性的有效途径。结合航天计算机可靠性增长计划,给出了一套利用纠检错芯片对其进行容错的方案,并给出了通过CPLD器件实现的仿真结果。最后对容错存储器的可靠性进行了分析。 关键词: 容错; ...… 查看全部问答∨ |
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 ...… 查看全部问答∨ |
小弟要把现场由单片机采集的232数据传到上位计算机;中间传输计划用gprs。现打算买模块,却听某大大说,传数据用dtu不用modem。 小弟应该买dtu呢还是modem呢?有没有做过类似应用的前辈简单介绍下总体情况,在下感激不尽啊。 还有就是,市面 ...… 查看全部问答∨ |
不必担心!有成功之路可循!如果您可以演示,或者如果能给客户提供原型系统就更好了,并得到关于创新价值的真实反馈,那么您获得商业成功的可能性会大为提高。如果您希望创建企业实现自己的产品构思,请开发原型系统并牢记下列八大原则。 1、认识 ...… 查看全部问答∨ |
今年5.1放假干嘛去?(参加嵌入式Linux免费体验活动去!) 《嵌入式Linux免费体验班》(1天) 今年5.1放假干嘛去?参加嵌入式Linux免费体验活动! ————————名额有限,限定12人,先报先得! 课程目标: 本课程针对嵌入式Linux开发的初学人员,能快速了解嵌入式Lin ...… 查看全部问答∨ |