·上一文章:嵌入式系统中USB主机控制器的设计
·下一文章:基于ARM-Linux的MiniGUI的仿真与移植
ENTRY
CODE32
Reset
LDR PC,ResetInit;复位跳到驻留代码初始化程序ResetInit
B 0x000010004;跳到用户异常向量UndefinedAddr
B 0x000010008;跳到用户异常向量SWI_Addr
B 0x00001000c;跳到用户异常向量PrefetchAddr
B 0x000010010;跳到用户异常向量DataAbortAddr
NOP
B 0x000010018;跳到用户异常向量IRQ_Addr
B 0x00001001c;跳到用户异常向量FIQ_Addr
ResetInit
3 注意事项
为了让用户代码运行地址从0x0000_1000开始,在ADS的ARM Linker选项卡将RO Base设为0x0000_1000。因为处理器要切换到Thumb指令执行IAP代码,需要将ARM C Compiler下的ARMThumb Interwoking选项勾上。另外IAP函数使用了RAM空间的高32 bit空间,因此用户程序不应该使用该空间,用户堆栈栈顶要设定为小于RAM顶端地址减32。
4 结束语
实验结果显示按照上面的方法编写的驻留程序,能够稳定的接受主机发来的新程序,并成功烧写进Flash区,实现程序的更新。文中虽然以LPC2132为例实现,对于具有IAP功能的其他公司的ARM7芯片的在线程序更新也有借鉴意义。