ARM7——LPC2xxx小总结

来源:互联网 发布:网络执法官破解版win7 编辑:程序博客网 时间:2024/06/08 08:55
 

1.       7种工作模式:
fiq/irq/abt/und/sys/usr/svc。通过"MSR cpsr_c,#0xdx"切换。上电时进入svc模式。svcusr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr不可以。各模式下有自己的堆栈。要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入usr模式

2.    Prefetch AbortData Abort模式:
Prefetch Abort
通常会发生在自修改指令之后。而Data Abort发生于向无效内存中取操作数时,通常是数据指针越过边界了。如果在scatter文件中不指定边界,若编译时内存分配超过了实际物理内存,一定会有Data AbortPrefetch Abort发生 Data Abort这个异常会经常出现,要注意。

3.    存储器映射:
0-1G(0x0000,0000 - 0x3fff,ffff):
片内Flash.
1-2G(0x4000,0000 - 0x7fff,ffff):
片内
RAM.
2-3.5G(0x8000,0000 - 0xbfff,ffff - 0xdfff,ffff):
片外存储器。

3.5G - 3.75G(0xe000,0000 - 0xefff,ffff): VPB
外设。
3.75G - 4G(0xf000,0000 - 0xffff,ffff): AHB
外设。
虽然ARM7的寻址空间为4G,但是LPC2200系列只提供A0~A23总共16M的地址。片选信号CS0 - CS3A24A25的译码输出,将片外存储区0x8000,0000 - 0x83ff,ffff划分为bank0 - bank3,16M*4=64M. 4bank可以被分别配置为8/16/32位总线宽度。复位时,bank0的总线宽度由Boot1:0引脚决定, bank132位,bank216位,bank38位。

4.    Boot Block
LPC2114/2214
BootBlock
固化在最高的Flash块中,运行时被映射到0x7FFF,E000 - 0x7FFFF,FFFF的区域。而LPC2210没有片内Flash,但它有8K片内ROM存储了BootBlock,也被映射到0x7FFF,E000处。BootBlock是上电以后芯片最早自动运行的程序,被固化在LPC22XX中,相当于LPC22xx自身的bootloader

5.    分散加载描述文件.scf的设置
Metrowerks Code Warrior V1.2
"Edit->Debug In ExRAM Settings",然后在"Linker->ARM Linker"Output页中,选中Scatter选项。在Scatter的编辑框中选择写好的.scf文件。(Scatter-Loading description file).
简单应用时可以不写.scf文件。而在"Output"页中选择"Simple".然后填写"RO Base""RW Base"的起始地址。在"Lay Out"页中,填写Object/Symble: Startup.o, Section: Start.编写启动文件:Startup.s."Option"页里的"Image Entry Point"填入起始地址。

Scatter文件中最好每一个Region都加一个Maximum参数,这样当编译时如果实际使用的空间大于Maximum Size,会有Error:16220E: Excution region xxx size (xxx bytes) exceeds limit (xx bytes)。如果地址有重复,会有Error: 16221E: Excution region xxx overlaps with excution region xxx。前一个Region的首地址 + Maximum > 后一个Region的首地址时不一定有Error。只有当一分配的内存出现覆盖时才会有Error
mem_c.scf
,是使程序在FLASH运行
mem_a.scf
,使程序在FLASH运行,并且加密。
mem_b.scf
,使程序在RAM中运行

6.    LPC2106/2105/2104 ARM7TDMI-S 配置为小端(little-endian)字节顺序。

7.    LPC2131基于ARM7TDMI-S核,采用冯.诺依曼结构,数据和指令混合编址,只有加载,存储和交换指令可以访问存储器中的数据。

原创粉丝点击