微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM学习中LPC2104的Boot与Remap详解

ARM学习中LPC2104的Boot与Remap详解

时间:08-30 来源:互联网 点击:

在异常处理时也充分发挥出CPU的处理能力,而非易失性存储器的读取速度使得CPU只能以多个空闲等待同期来获取异常向量,这样就限制了CPU计算能力的充分发挥。尤其是非易失性存储器位宽小于CPU位宽时,这种负面的影响更加明显。于是,Remap技术被引入,以提高系统对异常的实时响应能力。

从Remap这个英文单词的构成不难看出,它是对此前已确立的存储器映射的再次修改。从本质上讲,Map和Remap是一样的,都是将地址编码资源分配给存储器块,只不过二者产生的时间不同:前者在系统上电的时刻发生,是任何计算机系统都必需的;而后者在系统上电后稳定运行的时刻发生,对计算机系统设计人员来说是可选的。典型的8位单片机系统中,就没有使用Remap技术。

完整的Remap过程实际上通常始于系统的Bootload过程。具体执行动作为:Bootload将非易失性存储器中的异常向量复制到高速易失性存储器块的一端,然后执行Remap命令,将位于高速易失性存储器中的异常向量块映射到异常向量表地址空间上。此后,系统若产生异常,CPU将从已映射到异常微量表地址空间的高速非易失性存储器中读取异常向量。具体到典型的ARM7嵌入式系统中,就是由Bootload程序将片内或片外的Flash/ROM中的异常向量复制到片内的SRAM中指定的存在器单元中,然后再执行Remap命令。由于片内的SRAM数据位宽通常与CPU数据位宽相等,因而CPU可以无等待地全速跳入异常处理程序,获得最佳的实时异常响应。

LPC2000的Boot和Remap解析

从上面的技术描述中可知,典型的Boot、Memory Map和Remap的时间顺序应该是:Memory Map-〉Boot-〉Remap。但是,LPC2000处理器中这三个动作的顺序却有一点不同,依次为Memory Map-〉Remap-〉Boot-〉Remap,最后一个Remap过程是用户可选的,可执行也可不执行。每当系统复位以后,LPC2000处理器就顺次执行上述四个过程,下面分析这几个阶段。为简化起见,以总线不开放的LPC2104处理器为例。

LPC2106的片上存储器分类

LPC2104片内的存储器类型只有两种:Flash块和SRAM块。其中,部分Flash存储器块在芯片出厂前由Philips写入了Bootload程序和64字节的异常向量表。为方便讨论,我们称这部分Flash块为Bootload子块,其大小为8KB。如前所述,在处理器未上电之前或复位时,Flash块和SRAM块仅仅是两个没有地址编码的物理存储器,与地址编码尚未建立起实际的映射关系。

Memory Map

LPC2104处理器(上电)复位以后,Flash块和SRAM块的地址映射结果为:SRAM占据0x40000000—0x40003FFF范围的地址编码空间;Flash占据0x00000000—0x0001FFFF范围的地址编码空间。该映射结果是个中间态,只存在极短的时间,应用系统开发人员无法看到这个中间态。处理器内核外围模块的地址映射结果为0xE0000000—0xFFFFFFFF。

Remap

Memory Map完成以后,紧接着LPC2104会作一次Remap,这次Remap操作的对象是Bootload子块,由处理的内部硬件逻辑执行完成,不受开发人员的控制。经过Remap后,Bootload子块被整体Remap到了0x7FFFE000—0x7FFFFFFF的片内高地址内存空间;同时,原Memory Map后占用0x00000000—0x0000003F地址空间的那部分64 字节大小的Flash子块被暂时注销映射关系,由Bootload子块中的异常向量部分取而代之。

至此,Flash块对内存地址空间的占用情况如下:

1、除去因Remap被暂时注销了映射关系的那小部分64字节的Flash子块外,Flash块作为一个整体占用的地址编码空间为0x00000040—0x0001FFFF;

2、同时,Bootload子块又占用了0x7FFFE000—0x7FFFFFF的地址编码空间,Bootload子块中的异常向量表部分占用了0x00000000—0x0000003F。

因此,Bootload子块中的异常向量表部分实际上是占用了重复占用了三段地址编码空间:0x00000000—0x0000003F、0x0001E000—0x0001E03F以及0x7FFFE000—0x7FFFE03F。

图2中,存储器的映射顺序为:Memory Map-〉Reset Remap-〉Bootload Remap。

SRAM块和内核外围模块的映射关系在Remap之后保持不变,可参见图1。

  * - 本贴最后修改时间:2005-3-10 17:31:19 修改者:andrewpei

  * - 修改原因:Append

Boot

LPC2104有效的异常向量表地址编码空间是0x00000000—0x0000003F(严格来说应该是0x00000000—0x0000001F)。处理器复位后的Boot动作就是从0x00000000处起始字中取出跳转指令,开始程序的执行。由于处理器复位后,映射到0x00000000—0x0000003F地址空间的异常向量表源于Bootload子块,因此CPU实际上开始执行的是Philips在芯片出厂前写入的Bootload程序。

进入Bootload后,程序首先检查看门狗溢出标志是否置位。

若看门狗溢出标志置位,则表明当前的系

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top