中断 0 发生后,程序自动跳转到地址 0x20 处,0x20 地址单元的指令为“ldr pc, = HandlerEINT0”,
因此程序跳转到 HandlerEINT0 处执行这个宏操作,就是把外部中断地址赋给 PC。
一个 arm 程序是由 R0,RW,ZI 三个段组成。其中 R0 为代码段,RW 是已经初始化的全局变量,ZI 是未
初始化的全局变量,BOOTLOADER 要将 RW 段复制到 RAM 中并将 ZI 段清零。
编译器使用下列段来记录各段的起始地址和结束地址
|Image$$RO$$Base| ; RO 段起始地址|Image$$RO$$Limit| ; RO 段结束地址加 1|Image$$RW$$Base|
; RW 段起始地址
|Image$$RW$$Limit| ; RW 段结束地址加 1|Image$$ZI$$Base| ; ZI 段起始地址|Image$$ZI$$Limit
| ; ZI 段结束地址加 1
这些标号的值是通过编译器的设定来确定的如编译软件中对 ro-base 和 rw-base 的设定,例如 ro-b
ase=0xc000000 rw-base=0xc5f0000,在这里用 IMPORT 伪指令( 和 c 语言的 extren 一样) 引入|Im
age$$RO$$Base|,|Image$$RO$$Limit|...等比较古怪的变量是编译器生成的。RO, RW, ZI 这三个段
都保存在 Flash 中,但 RW,ZI 在 Flash 中的地址肯定不是程序运行时变量所存储的位置,因此我
们的程序在初始化时应该把 Flash 中的 RW,ZI 拷贝到 RAM 的对应位置。这些变量是通过 ADS 的工
程设置里面设定的 RO Base 和 RW Base 设定的,最终由编译脚本和连接程序导入程序.
IMPORT |Image$$RO$$Base|
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
引入外部变量 mmu 的快速总线模式和同步总线模式两个变量
IMPORT MMU_SetAsyncBusMode
IMPORT MMU_SetFastBusMode
我们所熟知的 main 函数
IMPORT Main
把镜像从 Nandflash 拷贝到 SDRAM 的函数
IMPORT RdNF2SDRAM
定义 arm 汇编程序段,段名叫 init 段,为只读段