新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM学习中LPC2104的Boot与Remap详解

ARM学习中LPC2104的Boot与Remap详解

作者:时间:2012-08-30来源:网络收藏

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

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

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

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

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

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

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

  * - 修改原因:Append

Boot

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

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

若看门狗溢出标志置位,则表明当前的系统复位是内部软复位,CPU下一步将对Flash块中的异常向量表进行加和校验。如果加和检验结果为零,Bootload程序将撤销Bootload子块中异常向量表部分在0x00000000—0x00000003F地址空间上的映射,恢复Flash块的异常向量表在这64字节地址空间上的映射关系(如图3),然后跳转到异常向量表地址0x00000000处转入用户程序的执行。如果加和校验结果不为零,Bootload程序将进行UART0接口的波特率自动侦测,随时响应ISP宿主机的编程请求,执行处理器芯片的ISP编程工作。

  若Bootload没有发现看门狗溢出标志置位,则表明当前的系统复位是外部硬复位,CPU将采样P0.14引脚的外部逻辑电平输入。如果为0,Bootload执行UART0的自动波特率侦测,随时响应ISP宿主机的编程请求;如果为1,Bootload的后续动作将与前面检测到看门狗溢出标志置位的程序执行完全相同。

Remap(可选)

最后这一步可选的Remap动作完全处于用户的控制之下,Remap的对象是片内SRAM存储器块的异常向量部分,共计64字节大小。用户可以编程决定何时Remap、Remap之后是否再修改异常向量表以及如何修改异常向量表等等。需要强调的是,引发Remap动作的指令与建立SRAM块中异常向量的所有功能代码全部驻留在Flash块的用户编程区中,是用户应用软件的一部分。

曾经有网友对Philips在LPC2000系列处理器中引入这个可选的Remap功能提出质疑:LPC2000系列处理器片内的Flash块被分割成了两组,每组都配备了相互独立的128位宽度的读取缓冲,在绝大多数情况下,CPU从Flash块的访问是全速进行的,不存在有等待的状况;另一方面,一般应用LPC2000的嵌入式系统并不需要动态地改变异常向量表。因此,对片内SRAM进行Remap后,并不能提高处理器对异常的响应能力,实际意义不大。

事实上,LPC2000系列处理器引入SRAM的Remap功能对于IAP操作具有重要的意义。相对于其它基于ARM7DMI内核的处理器而言,LPC2000系列处理器有一个独具特色的功能—IAP。在IAP擦除/写入操作时,片上Flash块,包括该块上的异常向量部分,是无法被访问读取的,为了在IAP擦除/写入操作时有效地响应异常,必须在调用IAP擦除/写入操作之前,将SRAM中的异常向量部分提前映射到系统的异常向量表地址空间上。(待续)


上一页 1 2 下一页

关键词: LPC2104 Boot Remap

评论


相关推荐

技术专区

关闭