设计基于NXP LPC2000的次级启动加载程序用于代码升级
用户应用程序
本文引用地址:https://www.eepw.com.cn/article/118092.htm存储器分布
用户应用程序存放在和次级启动加载程序位置不同的的扇区中,并且占用了从0x4000 0000开始的一部分片内SM空间。
在片内SRAM的最底部,存放了应用程序的中断向量表。要注意在配置系统RW区域时,把这部分空间预留出来,即用户应用程序的RW从0x4000 0040开始。
中断向量表重映射
对于ARM7处理器而言,中断向量位于从0x0000 0000到0x0000 001C的地址范围,因此在Boot ROM和SRAM内的一小部分空间必须被映射到这个地址内,使得可以在不同的模式(参考LPC2000用户手册内存映射章节)下使用中断。
这一小段空间包括32字节的中断向量以及额外的32字节跳转指令,总共64字节,范围为0x0000 0000到0x0000 003F。
因为次级启动加载程序的中断向量表存在于闪存的0x0000 0000到0x0000 003F,因此用户应用程序的中断向量表只能被映射到片内SRAM(对于支持外部总线接口的LPC2000器件,也可以映射到片外存储器)。在跳转到用户应用程序执行前,要将这64字节的数据复制到片内SRAM的底部(0x4000 0000 – 0x4000 003F),并且将系统的内存映射模式设置为“User RAM Mode”。这样当用户应用程序产生中断时,系统会自动到位于SRAM的中断向量表取中断向量入口,而不是错误地跳转到位于0x0地址处的、属于次级启动加载程序的中断向量表。
运行用户应用程序
更新完成后,修改PC指针,使其指向新的用户程序的起始地址,然后开始执行。
注意:要保证用户应用程序能运行,必须还要做一些必要的初始化工作,包括RW区域的复制、ZI区域的清零等等,这些没有放在次级启动加载程序里完成,而是在用户应用程序开始运行时首先执行。
程序(从串口利用XMODEM协议更新代码)上电运行时,串口将会打印出如图4的信息。
用户可以测试一些IAP命令,或者选择PROG命令更新用户代码,更新完成后,选择RUN命令来执行。
评论