实验2.13存储器重映射.ppt

上传人:仙人指路1688 文档编号:2778934 上传时间:2023-02-24 格式:PPT 页数:37 大小:3.16MB
返回 下载 相关 举报
实验2.13存储器重映射.ppt_第1页
第1页 / 共37页
实验2.13存储器重映射.ppt_第2页
第2页 / 共37页
实验2.13存储器重映射.ppt_第3页
第3页 / 共37页
实验2.13存储器重映射.ppt_第4页
第4页 / 共37页
实验2.13存储器重映射.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《实验2.13存储器重映射.ppt》由会员分享,可在线阅读,更多相关《实验2.13存储器重映射.ppt(37页珍藏版)》请在三一办公上搜索。

1、ARM期末大作业,江南大学信息工程学院 微电子0701 黄兆丰 0301070112,什么叫重映射?,为存储器分配地址的过程称为存储器映射。但是为了增加系统的灵活性,系统中有部分存储单元可以同时出现在不同的地址上,这称为存储器 重映射。,ARM芯片的地址重映射映射就是一一对应的意思。重映射就是重新分配这种一一对应的关系。我们可以把存储器看成一个具有输出和输入口的黑盒子。如下图所示,输入量是地址,输出的是对应地址上存储的数据。当然这个黑盒子是由很复杂的半导体电路具现的,具体的实现的方式我们现在不管。存储单位一般是字节。这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,

2、该地址对应的存储单元上存储的数据就会出现在数据总线上面。,课本P148-154/核心板上的存储块,储存器映射给芯片内、外的Flash、RAM、BootBlock和外设进行统一编址。即用地址表示对象。一般芯片厂商都把这些地址分配好了,用户只能用而不能改。如LPC2290如下表。,U13 SST39VF1601 Nor Flash(2M),核心板正面,核心板背面,U3 K9F2808U0CNand Flash(16M),片内SRAM(16K),U12MT45W4MW16 PSRAM(8M),U5 CAT1025E2PRAM(2KB),LPC2290片内没有ROM,也是外扩片外的Flash,复习映射

3、示意图,复习LPC2290映射图,(三)P9,片内SRAM(16K),U3 K9F2808U0CNand Flash(16M),U13 SST39VF1601 Nor Flash(2M),U12MT45W4MW16 PSRAM(8M),U5 CAT1025E2PRAM(2KB),普通的单片机把可执行代码和数据存放到存储器中。单片机中的CPU从储器中取指令代码和数据。其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。如下图,CPU读取0 x00000000地址上存储单元的过程。,ARM比较复杂。ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理存储单元的地址可以根

4、据设置变换。就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了。下图是随意举了个例子(不要与ARM芯片对应),旨在说明地址重映射的过程。下图表示把0 x00000000地址上的存储单元映射到新的地址0 x00000007上。CPU存取0 x00000007就是存取0 x00000000上的物理存储单元。,下面图a,图b是对ARM芯片的两种地址重映射方式的图示。一、假设我们的应用程序存放在外扩FLASH当中,那么应用程序的异常向量表就存放在0 x80000000起始的64个(其中有32个存放异常向量)物理存储单元中。但是ARM核发生异常(中断)后是从0 x0

5、00000000 x0000003F地址范围取异常向量的。所以要把0 x800000000 x8000003F范围内的存储单元重新映射到0 x000000000 x0000003F地址范围上。以后CPU存取0 x000000000 x0000003F地址就是存取0 x800000000 x8000003F范围内的存储单元。图a、b只显示出第一个异常向量的地址重映射,整个异常向量表的地址重映射等同这个过程。,图a,二、图b描述示了ARM芯片的另外一种映射方式。这个映射可以由用户决定采用还是不采用(相关代码在工程文件的startup.s中,这个文件是第三方提供,用户可以修改)。这个映射主要是为了提

6、高应用程序异常相应得速度。当我们把应用程序存放在片内FLASH的时候,异常向量表存放在0 x000000000 x0000003F存储单元内。每次发生异常,CPU从0 x000000000 x0000003F地址上取异常向量。但是对RAM的存取速度远高于对FLASH的存取速度,所以为了提高异常相应速度我们采取以下做法:,图b,Step1:先把0 x000000000 x0000003F(FLASH)存储单元内的异常向量表复制到0 x400000000 x4000003F(片内RAM的最低端64个字节的存储单元)范围内存储单元中。Step2:把0 x400000000 x4000003F范围内存

7、储单元地址重新映射到0 x000000000 x0000003F地址范围。这样做了以后,当异常发生的时候,CPU取异常向量就是从RAM区中的异常向量表中区,速度快了。比如复位中断发生,CPU从地址0 x00000000取指令,但此时由于已经过地址重新映射,这个0 x00000000被地址转换器转换成0 x40000000,CPU实际上是取的RAM区中0 x400000000这个存储单元内的指令(异常向量)。当然用户可以不进行这种映射。片内FLASH中0 x000000000 x0000003F存储单元具有一模一样的异常向量表。只不过不进行这种处理,异常相应速度慢一点。但是这种速度上的差别很多情

8、况下是不必要在意的。图中的地址转换器受控制寄存器MENMAP的控制,用户可以设置MENMAP实现对地址重映射的控制。这个地址转换器显然是通过内部硬件电路实现的。,如LPC2290没有片内Flash,存储器映射控制寄存器MENMAP,课本P165,内核与物理存储器的关系,存储器映射控制原理,当MENMAP=2时,如果访问0 x00 x3F的数据,实际上是在对0 x400000000 x4000003F进行访问。同样MENMAP=3时,同样对0 x00 x3F进行访问,就变成访问0 x800000000 x8000003F中的数据/指令了。,LPC2210处理器的重映射机制,实验2.13,LPC2

9、210处理器重映射原理图,在实验中,程序将首先从外部Flash启动,然后将异常向量表从Flash存储器拷贝到片内SRAM中,并进行存储器重映射,将异常向量表映射到片内SRAM。,片外Flash,MEMMAP=0:开机默认值,Boot装载模式-向量表(0 x00000000-0 x0000003c)映射的是0 x7FFFE000-0 x7FFFF03c中的BootBlock;芯片复位时,启动boot装载程序,boot装载程序检查P0.14口的状态和用户的异常向量,判断是进入ISP状态还是启动用户程序,若启动用户程序,则自动设置MEMMAP=1(片内flash启动)或3(片外程序存储器启动)。很奇

10、怪的,实验中,当使用无片内flash的LPC2210时即使设置P0.14为高低都没关系,芯片会跳过继而执行片外flash中的代码.MEMMAP=1:中断向量表就在片内flash中,地址就是0 x00000000-0 x0000003c,相当于没有映射;MEMMAP=2:最为主要的设置,即是重映射的关键之所在,当设置MEMMAP=2时,中断向量表(0 x00000000-0 x0000003c)映射的是片内SRAM中的0 x40000000-0 x4000003c中的值,而因为是SRAM,所以在程序运行的过程中是可以改变的,这样就可以达到重映射的目的啦(中断向量表可以随时修改)。MEMMAP=3

11、:中断向量表就在片外flash中,中断向量表(0 x00000000-0 x0000003c)映射到的是片外flash中的0 x80000000-0 x8000003c中的值;功能上与MEMMAP=1时的差不多,因为一旦程序固化到flash中,即为只读,只是数值映射而已。,*,实验2.13,存储器重映射实验,1.实验目的通过实验,熟悉LPC2000系列ARM7微控制器的存储器重映射机制。2.实验设备 硬件:PC机一台,MagicARM2200教学实验开发平台一套。软件:Windows98/XP/2000系统,ADS1.2集成开发环境。,3.实验内容(1)设置MEMMAP=2首先将 0 x400

12、000000 x4000003F地址上的存 储单元全部写入0 x55,单步运行,同时观察 0 x000000000 x0000003F地址上的数 据;再写入0 xAA,同时观察 0 x000000000 x0000003F地址上的数据。(2)设置MEMMAP=0,观察0 x00000000 0 x0000003F地址上的数据是否 与0 x7FFFE0000 x7FFFE03F地址上的 数据一致。,内部SRAM,Boot装载程序模式,即假设其为中断向量值,4.实验预习要求仔细阅读参考文献【1】第5.3节存储器重 映射的说明,第5.4.8节P165的存储器映射控制。5.实验步骤(1)启动ADS1.

13、2,使用ARM Executable Image for MagicARM2200工程模版建 立一个工程ReMap_c。(2)在user组中的main.c中编写主程序代码。(3)选用DebugInExram生成目标,然后编 译连接工程。,片外RAM调试模式,(4)选择【Project】【Debug】,启动AXD进行JTAG仿真测试。(5)打开存储器观察窗口(Memory)设置观察地址为0 x0,(6)单步运行程序,观察 0 x000000000 x0000003F地址 上的数据。,(7)当运行MEMMAP=0之后,观察 0 x000000000 x0000003F地址上 的数据是否与0 x7F

14、FFE000 0 x7FFFE03F地址上的数据是否 一致。6.实验参考程序 存储器重映射实验的参 考程序见程序清单。,贴这个程序是不对的,应该是main.c,程序运行前各个存储器的值,64字节的中断向量值,SRAM中的随机值,执行到mina.c断点处 0 x0全清零 MEMMAP=2,设置了MEMMAP=2,就等于使得地址0 x0和地址0 x40000000之后的64字节的内容相等,实验结果证明重映射正确,续 结果正确,程序运行前各个存储器的值,64字节的中断向量值,设置了MEMMAP=0,就等于使得地址0 x0和地址0 x7FFFE000之后的64字节的内容相等,MEMMAP=0,实验结果

15、,在MEMMAP=2(二进制为10)时,进入用户片内RAM模式。单步运行,数据存储单元中的数据会按照程序由“00”变成“55”。,依次点击单步运行,可以看见观察窗口表中的数据依次从“00”变成“55”。如此循环。,第一个循环结束之后,继续点击单步运行,进行第二个循环,将“55”改成了“AA”。,依次点击单步运行,可以清楚看到,观察窗中表内数据“55”依次被更改为“AA”。,第二个循环结束后,进入MEMMAP=0(二进制00)模式,即Boot Block(引导块)模式。如图所示是观察窗Tab1中的数据。,如上图所示为Tab2中的数据,是0 x7fffe000之后一段地址的上的数据,对比Tab1中

16、的数据,不难发现0 x7FFFE0000 x7FFFE030与0 x000000000 x00000030上的数据是相同的。,对实验结果的分析,实验开始执行程序,首先进入的是用户片内RAM模式,即MEMMAP=2(二进制10),此模式下,将存储器重映射到片内RAM 上。即将0 x000000000 x0000003F中的数据重映射到片内RAM0 x400000000 x4000003F 这段地址上。实验程序中,更改了RAM 上0 x400000000 x4000003F 这段地址所对应的数据,由于重映射机制的原因,以上两段地址都同时指向这段数据,因此,0 x400000000 x4000003

17、F 上的数据被更改,0 x000000000 x0000003F上所显示的数据也自然有同样的变化。当进入Boot Block引导块模式,即MEMMAP=0(二进制00),此模式下,将存储器重映射到Boot Block上。0 x000000000 x0000003F 指向0 x7FFFE0000 x7FFFE03F所对应的数据,这两段地址都指向相同的数据,显示结果相同。,7.思考(1)实验工程中的启动代码Target.c文件,在TargetResetInit()函数的 MEMMAP寄存器的设置依据是什么?(2)请说明存储器重映射机制在JTAG调试 时的作用。,(1)实验工程中的启动代码Targe

18、t.c文件,在Target ResetInit()函数的MEMMAP寄存器的设置依据 是什么?MENMAP寄存器:存储器映射控制寄存器。MEMMAP寄存器是依据操作对象的情况设置。当MEMMAP【1:0】=00(Boot Block模式)当MEMMAP【1:0】=01(用户片内Flash模式)当MEMMAP【1:0】=10(用户片内RAM模式)当MEMMAP【1:0】=11(用户外部存储器模式),(2)请说明存储器重映射机制在JTAG调试 时的作用。CPU一启动,总是要从0地址处取指令来执行,JTAG调试之后,会从0地址开始取指令和执行,但是实验理想的开始位置并不在0地址处,那么就要通过重映射,把理想开始地址对应的存储单元映射到0地址位置。此时,这些存储单元就同时出现在不同的地址上。通过以上方式就可以从理想的位置开始处理数据了,使得系统更灵活。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号