kukucat的印记 https://bbs.21ic.com/?511186 [收藏] [复制] [RSS] 仰观宇宙之大,俯察品类之盛!

日志

ARM的存储器映射与存储器重映射

已有 3666 次阅读2007-11-15 19:12 |个人分类:kukuARM|系统分类:ARM| 存储器映射, 存储器重映射

    今天终于明白了ARM的存储器映射与存储器重映射机制,,我觉得这一切都是为了中断向量得到有效的执行啊。下面可以进一步了学习啦!

    先前在课上在听老师讲ARM的存储器映射与存储器重映射时,听明白了ARM的存储器映射是怎么个回事!

    1.存储器映射:

          处理器产生的地址按其某种规则转移到具体的物理地址;用户可见的,开机后固定不变的。

    2.存储器重映射:

          重新修改局部(64字节异常向量表);可选操作,稳定运行时由用户需要进行改变(用户程序)。

    今天在ZLG的EazyARM板子上,对照着自带的实验册做存储器重映射的实验,需要设置MEMMAP寄存器,此时不是很明白这个MEMMAP寄存器该怎么设置,看了几遍ARM书上的相关章节,终于明白了实验程序的具体原理,也明白了MEMMAP设置的作用:

    MEMMAP=0:开机默认值,Boot装载模式----向量表(0x00000000-0x0000003c)映射的是BootBlock中的0x7FFFE000-0x7FFFF03c中的值;芯片复位时,启动boot装载程序,boot装载程序检查P0.14口的状态和用户的异常向量,判断是进入ISP状态还是启动用户程序,若启动用户程序,则自动设置MEMMAP=1(片内flash启动)或3(片外程序存储器启动)。

很奇怪的,我在实验中,当使用无片内flash的LPC2210时即使设置P0.14为高低都没关系,芯片会跳过继而执行片外flash中的代码.

    MEMMAP=1:中断向量表就在片内flash中,地址就是0x00000000-0x0000003c,相当于没有映射;

    MEMMAP=2:最为主要的设置,即是重映射的关键之所在,当设置MEMMAP=2  时,中断向量表(0x00000000-0x0000003c)映射的是片内SRAM中的0x40000000-0x4000003c中的值,而因为是SRAM,所以在程序运行的过程中是可以改变的,这样就可以达到重映射的目的(中断向量表可以随时修改)

    MEMMAP=3:中断向量表就在片外flash中,中断向量表(0x00000000-0x0000003c)映射到是片外flash中的0x80000000-0x8000003c中的值;功能上与MEMMAP=1时的差不多,因为一旦程序固化到flash中,即为只读,只是数值映射而已!

以上是我初学这块内容的体会,不知道哪里有没出错,万一有错了还请高手指正啊!

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (5 个评论)

2007-11-15 20:26
不错

QUOTE:
以下为blog主人的回复: 一起学习,哈哈
禾悠 2007-12-2 18:01
正在学习中
回复 ZZ 2007-12-27 20:46
写的不错!
访客w0REu2 2008-5-5 13:53
GOOD BOY
林华 2009-6-5 14:18
很奇怪的,我在实验中,当使用无片内flash的LPC2210时即使设置P0.14为高低都没关系,芯片会跳过继而执行片外flash中的代码. 很简单因为LPC2210无ISP功能