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

下载本文档

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

文档简介

arm期末大作业 江南大学信息工程学院微电子0701黄兆丰0301070112 什么叫重映射 为存储器分配地址的过程称为存储器映射 但是为了增加系统的灵活性 系统中有部分存储单元可以同时出现在不同的地址上 这称为存储器重映射 arm芯片的地址重映射映射就是一一对应的意思 重映射就是重新分配这种一一对应的关系 我们可以把存储器看成一个具有输出和输入口的黑盒子 如下图所示 输入量是地址 输出的是对应地址上存储的数据 当然这个黑盒子是由很复杂的半导体电路具现的 具体的实现的方式我们现在不管 存储单位一般是字节 这样 每个字节的存储单元对应一个地址 当一个合法地址从存储器的地址总线输入后 该地址对应的存储单元上存储的数据就会出现在数据总线上面 课本p148 154 核心板上的存储块 储存器映射 给芯片内 外的flash ram bootblock和外设进行统一编址 即用地址表示对象 一般芯片厂商都把这些地址分配好了 用户只能用而不能改 如lpc2290如下表 u13sst39vf1601norflash 2m 核心板正面 核心板背面 u3k9f2808u0cnandflash 16m 片内sram 16k u12mt45w4mw16psram 8m u5cat1025e2pram 2kb lpc2290片内没有rom 也是外扩片外的flash 复习映射示意图 复习lpc2290映射图 三 p9 片内sram 16k u3k9f2808u0cnandflash 16m u13sst39vf1601norflash 2m u12mt45w4mw16psram 8m u5cat1025e2pram 2kb 普通的单片机把可执行代码和数据存放到存储器中 单片机中的cpu从储器中取指令代码和数据 其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的 如下图 cpu读取0 x00000000地址上存储单元的过程 arm比较复杂 arm芯片与普通单片机在存储器地址方面的不同在于 arm芯片中有些物理存储单元的地址可以根据设置变换 就是说一个物理存储单元现在对应一个地址 经过设置以后 这个存储单元就对应了另外一个地址了 下图是随意举了个例子 不要与arm芯片对应 旨在说明地址重映射的过程 下图表示把0 x00000000地址上的存储单元映射到新的地址0 x00000007上 cpu存取0 x00000007就是存取0 x00000000上的物理存储单元 下面图a 图b是对arm芯片的两种地址重映射方式的图示 一 假设我们的应用程序存放在外扩flash当中 那么应用程序的异常向量表就存放在0 x80000000起始的64个 其中有32个存放异常向量 物理存储单元中 但是arm核发生异常 中断 后是从0 x00000000 0 x0000003f地址范围取异常向量的 所以要把0 x80000000 0 x8000003f范围内的存储单元重新映射到0 x00000000 0 x0000003f地址范围上 以后cpu存取0 x00000000 0 x0000003f地址就是存取0 x80000000 0 x8000003f范围内的存储单元 图a b只显示出第一个异常向量的地址重映射 整个异常向量表的地址重映射等同这个过程 图a 二 图b描述示了arm芯片的另外一种映射方式 这个映射可以由用户决定采用还是不采用 相关代码在工程文件的startup s中 这个文件是第三方提供 用户可以修改 这个映射主要是为了提高应用程序异常相应得速度 当我们把应用程序存放在片内flash的时候 异常向量表存放在0 x00000000 0 x0000003f存储单元内 每次发生异常 cpu从0 x00000000 0 x0000003f地址上取异常向量 但是对ram的存取速度远高于对flash的存取速度 所以为了提高异常相应速度我们采取以下做法 图b step1 先把0 x00000000 0 x0000003f flash 存储单元内的异常向量表复制到0 x40000000 0 x4000003f 片内ram的最低端64个字节的存储单元 范围内存储单元中 step2 把0 x40000000 0 x4000003f范围内存储单元地址重新映射到0 x00000000 0 x0000003f地址范围 这样做了以后 当异常发生的时候 cpu取异常向量就是从ram区中的异常向量表中区 速度快了 比如复位中断发生 cpu从地址0 x00000000取指令 但此时由于已经过地址重新映射 这个0 x00000000被地址转换器转换成0 x40000000 cpu实际上是取的ram区中0 x400000000这个存储单元内的指令 异常向量 当然用户可以不进行这种映射 片内flash中0 x00000000 0 x0000003f存储单元具有一模一样的异常向量表 只不过不进行这种处理 异常相应速度慢一点 但是这种速度上的差别很多情况下是不必要在意的 图中的地址转换器受控制寄存器menmap的控制 用户可以设置menmap实现对地址重映射的控制 这个地址转换器显然是通过内部硬件电路实现的 如lpc2290没有片内flash 存储器映射控制寄存器menmap 课本p165 内核与物理存储器的关系 存储器映射控制原理 当menmap 2时 如果访问0 x0 0 x3f的数据 实际上是在对0 x40000000 0 x4000003f进行访问 同样menmap 3时 同样对0 x0 0 x3f进行访问 就变成访问0 x80000000 0 x8000003f中的数据 指令了 lpc2210处理器的重映射机制 实验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 片内flash启动 或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 所以在程序运行的过程中是可以改变的 这样就可以达到重映射的目的啦 中断向量表可以随时修改 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集成开发环境 3 实验内容 1 设置memmap 2首先将0 x40000000 0 x4000003f地址上的存储单元全部写入0 x55 单步运行 同时观察0 x00000000 0 x0000003f地址上的数据 再写入0 xaa 同时观察0 x00000000 0 x0000003f地址上的数据 2 设置memmap 0 观察0 x00000000 0 x0000003f地址上的数据是否与0 x7fffe000 0 x7fffe03f地址上的数据一致 内部sram boot装载程序模式 即假设其为中断向量值 4 实验预习要求仔细阅读参考文献 1 第5 3节存储器重映射的说明 第5 4 8节p165的存储器映射控制 5 实验步骤 1 启动ads1 2 使用armexecutableimageformagicarm2200工程模版建立一个工程remap c 2 在user组中的main c中编写主程序代码 3 选用debuginexram生成目标 然后编译连接工程 片外ram调试模式 4 选择 project debug 启动axd进行jtag仿真测试 5 打开存储器观察窗口 memory 设置观察地址为0 x0 6 单步运行程序 观察0 x00000000 0 x0000003f地址上的数据 7 当运行memmap 0之后 观察0 x00000000 0 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 就等于使得地址0 x0和地址0 x7fffe000之后的64字节的内容相等 memmap 0 实验结果 在memmap 2 二进制为10 时 进入用户片内ram模式 单步运行 数据存储单元中的数据会按照程序由 00 变成 55 依次点击单步运行 可以看见观察窗口表中的数据依次从 00 变成 55 如此循环 第一个循环结束之后 继续点击单步运行 进行第二个循环 将 55 改成了 aa 依次点击单步运行 可以清楚看到 观察窗中表内数据 55 依次被更改为 aa 第二个循环结束后 进入memmap 0 二进制00 模式 即bootblock 引导块 模式 如图所示是观察窗tab1中的数据 如上图所示为tab2中的数据 是0 x7fffe000之后一段地址的上的数据 对比tab1中的数据 不难发现0 x7fffe000 0 x7fffe030与0 x00000000 0 x00000030上的数据是相同的 对实验结果的分析 实验开始执行程序 首先进入的是用户片内ram模式 即memmap 2 二进制10 此模式下 将存储器重映射到片内ram上 即将0 x00000000 0 x0000003f中的数据重映射到片内ram0 x40000000 0 x4000003f这段地址上 实验程序中 更改了ram上0 x40000000 0 x4000003f这段地址所对应的数据 由于重映射机制的原因 以上两段地址都同时指向这段数据 因此 0 x40000000 0 x4000003f上的数据被更改 0 x00000000 0 x0000003f上所显示的数据也自然有同样的变化 当进入bootblock引导块模式 即memmap 0 二进制00 此模式下 将存储器重映射到bootblock上 0 x00000000 0 x0000003f指向0 x7fffe000 0 x7fffe03f所对应的数据 这两段地址都指向相同的数据 显示结果相同 7 思考 1 实验工程中的启动代码target c文件 在targetresetinit 函数的memmap寄存器的设置依据是什么 2 请说明存储器重映射机制在jtag调试时的作用 1 实验工程中的启动代码target c文件 在targetresetinit 函数的memmap寄存器的设置依据是什么 menmap寄存器 存储器映射控制寄存器 memmap寄存器是依据操作对象的情况设置 当memmap 1

温馨提示

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

评论

0/150

提交评论