128k/256 flash, 支持jtag/isp下载 , 支持iap.
16k sram.support 8/16/32 bit r/w.
lpc2210/2212/2214支持外接4bank,每个空间16MB.
每个外设空间固定规格是16k.所有外设寄存器都是按32位边界设计的。
flash 0x0--0x20000 128k.
sram 0x4000 0000 --0x4000 1fff.
8k--0x80000000 bootblock.
只有试图执行指令时,才可能发生取指中止/数据中止异常。
因为中断地址为0x0开始段,复位启动也在0x0这个位置开始,因此支持地址映射是必要的。
boot装载程序模式 --复位就会执行,把boot block中断向量映射到0x0。
用户flash模式 --由boot代码软件激活 --当存储中有一个有效的用户程序标志并boot装载
未被执行的时候。不做重新映射,位于flash存储底部。
0x0--0x1c的数据累加为0---有效用户程序标志,-利用0x14 4个保留字节满足要求。
用户ram模式 --用户代码可以把0x4000 0000 ram空间映射到 0x0.
用户外部模式 复位boot1/boot0 决定/ 1:1 --正常内部flash启动。
其它组合8/16/32外部flash启动。
启动代码-汇编代码--做c语言的准备工作。
包括向量表定义,堆栈初始化,系统变量初始化,中断系统初始化,i/o初始化,外围初始化,地址
重映射等操作。
code32
area vectors,code,readonly
reset
ldr pc, ResetAddr
ldr pc, UndefinedAddr
...
dcd 0xb9205f80 ; 用ldr的好处是所有的中断表代码都是固定的,与实际矢量地址无关,因此用这个数保证0x0--0x1c累加为0。
ldr pc,[pc,#-0xff0] ;这是跳转到VicVectAdr.
ldr pc,FIQ_Addr
ResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
...
ResetInit
..
BL InitStack
BL TargetResetInit
BL __main ; ads 's startup ,then call the c code's main function.