有句话叫做前人种树,后人好乘凉,一点不假。LPC2220这个板子要我一个人搞,估计要个把月的时间,估计才能搞出来,现在硬件别人设计好了,软件的开发环境也帮我配置好了,结果我只用了1个小时,就在ARM上远行了我的第一个程序,Port 0置为输出,有1变成0,呵呵,ARM也不过如此,更单片机一样用。
不过我还是喜欢所有的东西都自己经手一遍,结果一经手才发现,有些东西要自己摸得半天搞,所以才有了前人种树,后人好乘凉的感慨。
ARM系统的设计:因为LPC2220内部没有FLASH,所以要外扩FLASH,我们用的是SST的39VF1061,是个16位的FLASH,当时看原理图的时候,发现FLASH的address线的A0接在了ARM的A1,就觉的很奇怪,因为一般A0对A0,A1对A1这样接的,现在看看LPC2220的DATASHEET和网上的一些资料,才知道ARM的DATA BUS如果是16位的,地址线是从A1开始的。
关于RE-MAP功能,因为以前曾看过几篇关于ARM的BOOT loader的文章,都提到了地址重映射,当时也没有看明白,只是有个映象,现在自己做了也就想搞清楚什么是地址重映射。俺的理解就是,ARM上电后PC指的是0x0000 0000,而我的程序的第一条指令放的又不是这个地方,怎么办咧?有办法,我通过把ARM的几个脚接上高低电平,告诉ARM,我程序的第一条指令放在了什么地方,例如俺的这块板子是放在了0x8000 0000,所以把LPC2220的BOOT1脚接0,BOOT0脚接1,把CS0接FLASH的CS。接在程序开始跑了,但每次从FALSH去指比较慢,而且什么RESET,Prefetch Abort等中断又是从0x0000 0000开始的,如果每次中断都到FLASH中取指去执行中断服务程序,好像比较慢,怎么办呢,于是设计ARM的人搞了一个Register,通过对register的配置,告诉PC指针把什么什么地址当作0x0000 0000,再有中断,你不要再去原来的0x0000 0000的地方找了,换成其他地方了。呵呵,这就是我对Re-map的肤浅认识。