关于LPCbootloader及map

来源:互联网 发布:剑三优化版客户端 编辑:程序博客网 时间:2024/05/22 03:51

重看了一遍LPC说明文档,配合Startup.s参考百度大虾“苏琦”后有很多关于bootloadermap的感想:

1、 以ARM7内核为核心外围扩展了茫茫多的外设,但是每个外设都是有地址的,向相应的地址写数据,其实是先选中这个外设再给它数据,这样这个外设就有值了,能够处理数据了哈

2、 在进入main函数前有Startup.s文件,它是启动代码:

1)当LPC一上电,首先运行0地址,当然在它下面的地址里还有中断向量,但是这些地址处也必须有跳转指令才能找到相应的处理函数,所以要向量表初始化

2)后面是配置启动代码了如:VPBDIV,PLL,MAM等,在后面是栈分配给各个模式,完了转向main函数了

3、关于存储器映射还不清楚,不知道什么时候用?

    答:后来看了百度博客“苏琦”后有了点感想。原来也有网友说:

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

但是这位大虾说:

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

最重要的一句话是最后一句,对Flash不能访问时,又要相应中断,所以需要把SRAM中的异常向量部分提前映射到系统的异常向量表地址空间上,这样再中断时,比如swi中断吧,flash虽然不能用了,但是ram映射到了这个空间了,所以在ram中可以根据向量表找到中断函数。

4Memory Map-〉Remap-〉Boot-〉Remap,最后一个Remap过程是用户可选的:

1LPC上电后,先进行Memory Map,这个映射主要是划分三大快:SRAM,FLASH,EXTRAM以及外围扩张等。

2Remap:bootload子快被重新映射到0x7FFFE0000x7FFFFFFF,而它的中断向量表部分(64字节)映射到0地址。

3boot:这时执行的是飞利浦公司的程序,看看门狗是否复位来判断是从0地址执行还是isp下载

4remap:是用户可选择的了3中也分析了哈

其实我主要在“苏琦”大虾的博客看了后,总结的,在此谢谢了

http://hi.baidu.com/suqiniat/blog/item/eb8ee7a9fd4f45f91f17a25f.html