這裏說的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階段初始化和系統引導。