2440啟動步驟
網(wǎng)上有很多文章分析TQ2440的啟動文件2440init.s。介紹的很詳細,我這里只是把S3C2440上電后的程序流程描述下。
不管在哪種啟動方式下,ARM上電啟動都是從0X00000000開始運行。下面是復(fù)位程序入口。
AREA Init,CODE,READONLY
ENTRY
ResetEntry
b ResetHandler
……
ResetEntry的值在ARM上電運行時是0X00000000,在JTAG仿真時是0X30000000。這個值很關(guān)鍵,在拷貝程序時會用到。
從NAND FLASH啟動時,在ARM上電時,ARM會自動把NAND FLASH前4K的內(nèi)容拷貝到S3C2440內(nèi)部SRAM中,同時把SRAM的地址映射到0X00000000。ARM上電后會從SRAM處開始運行。
從NOR FLASH啟動時,因為NOR FLASH接在bank0。地址映射是0X00000000。所以ARM上電后直接運行NOR FLASH里的程序。此時S3C2440內(nèi)部SRAM地址為0X40000000。
在ARM上電的情況下,流程如下:
1、 關(guān)閉看門狗,關(guān)閉所有中斷。
2、 設(shè)置系統(tǒng)工作頻率,F(xiàn)CLK,HCLK,PCLK,UCLK。
3、 初始化內(nèi)存控制寄存器,初始化參數(shù)在段SMRDATA里定義。SDRAM初始化在這里處理。
4、 在開發(fā)板上電時,按住接在EINT0腳上的按鍵會清零64MSDRAM。
5、 初始化堆棧
6、 讀OM0,OM1引腳狀態(tài),判斷是從NAND FLASH啟動還是從NOR FLASH啟動。如果是從NAND FLASH啟動,把NAND FLASH的代碼拷貝到SDRAM中,接著程序開始在SDARM中運行。然后初始化數(shù)據(jù)段,最后跳轉(zhuǎn)到main()函數(shù)開始運行。
如果是從NOR FLASH啟動,判斷ResetEntry值和BaseOfROM值是否相等,BaseOfROM值是在ADS里定義的RO BASE,如果定義為0X30000000,因為ARM上電ResetEntry值為0,所以接下來程序會把NOR FLASH里的程序拷貝到SDRAM中。如果RO BASE定義為0,將直接在NOR FLASH里運行。然后初始化數(shù)據(jù)段,最后跳轉(zhuǎn)到main()函數(shù)開始運行。
評論