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

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中,即为只读,只是数值映射而已!以上是我初学这块内容的体会,不知道哪里有没出错,万一有错了还请高手指正啊。

你可能感兴趣的:(ARM的存储器映射与存储器重映射机制)