这里说的BOOT其实是系统最开始的启动代码 XXinit.s文件。在ads的工程文件中需要把几个文件的先后顺序排好。因为从NAND FLASH启动时CPU将NAND FLASH的前4K拷贝到cpu自带的SRAM中,而一般编译出来的会大于4k。开发板上的程序上电时是从INIT.S文件开始的,然后调用nand.C的NAND FLASH 读取程序数据到SDRAM中,读取完毕再进行后面的程序,最后再跳到main.c中的main执行。
BOOT的主要功能
1.建立中断异常向量表。系统一旦发生中断,处理器还是会自动跳转到0X0地址开始的异常中断向量表。该表包含跳转指令,具体的中断处理有中断处理程序完成。
2.初始化堆栈。arm9有7种模式。用户模式,系统模式,快速中断模式,普通中断模式,特权模式,中止模式,未定义模式。BOOT需要为每一种模式建立堆栈,这需要初始化其程序状态寄存器(SPSR)和堆栈指针。
3.初始化硬件。对硬件的初始化通过配置特殊控制寄存器来完成包括:
(1) 关看门狗 (WTCON)
(2) 屏蔽所有中断cpsr
(3) 初始化PLL和时钟频率(FCLK(FOR CPU) HCLK(FOR AHB) PCLK(FOR AHP),UCLK(FOR USB))
(4)初始化内存控制。主要通过memory contro register 设定外部数据总线的宽度,访问周期(bankconN),定时控制信号等 (BWSCON),SDRAM的设置。
(5)复制RW到SDRAM将ZI段清0.一个ARM数据结构有RO,RW,ZI三段组成。其中RO是代码段,只读的。RW是全局变量,ZI是未初始化的变量。
image$$RO$$Base RO起始地址
image$$RO$$Limit RW起始地址
image$$RW$$Base
image$$RW$$Limit
(6)跳转到C语言程序,开始第2阶段初始化和系统引导。