实验2.13存储器重映射_第1页
实验2.13存储器重映射_第2页
实验2.13存储器重映射_第3页
实验2.13存储器重映射_第4页
实验2.13存储器重映射_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、是ARM核发生异常(中断)后是从0 x000000000 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 x40

7、0000000 x4000003F范围内存储单元地址重新映射到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中的数据/指令了。,LPC221

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

10、ash启动)或3(片外程序存储器启动)。 很奇怪的,实验中,当使用无片内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,所以在程序运行的过程中是可以改变的,这样就可以达到重映射的

11、目的啦(中断向量表可以随时修改)。 MEMMAP=3:中断向量表就在片外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集成开发环境。,

12、3.实验内容 (1)设置MEMMAP=2 首先将 0 x400000000 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节存储器重 映射的说明,第

13、5.4.8节P165的存储器映射控制。 5.实验步骤 (1)启动ADS1.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

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

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

16、1中的数据。,如上图所示为Tab2中的数据,是0 x7fffe000之后一段地址的上的数据,对比Tab1中的数据,不难发现0 x7FFFE000 0 x7FFFE030与0 x000000000 x00000030上的数据是相同 的。,对实验结果的分析,实验开始执行程序,首先进入的是用户片内RAM模式, 即MEMMAP=2(二进制10),此模式下,将存储器重映 射到片内RAM 上。 即将0 x000000000 x0000003F中的数据重映射到片内RAM0 x400000000 x4000003F 这段地址上。 实验程序中,更改了RAM 上0 x400000000 x400000 3F 这段

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论