啟動的方式
使用Nor Flash方式啟動對于S3C2440而言,啟動的方式有兩種,一是Nor Flash方式啟動,二是Nand Flash方式啟動。
使用NAND Flash方式啟動Nor Flash的地址范圍如下
0x0000.0000—0x0800.0000 (2M Nor Flash)
片內(nèi)的BootSRAM地址被置為
0x4000.0000—0x4000.DFFF (4K BootSRAM)
由于可以在Nor Flash直接運行代碼,因此BootSRAM被映射到別的地址上去,可作為其他用途。
程序映像直接存放到NOR FLASH里面,中斷向量表存放在0x0000.0000開始的8×4大小的空間中。
中斷產(chǎn)生時,PC被置為相對應(yīng)的向量地址。如上電或者按Reset鍵時,PC直接置為0x00,從NOR FLASH的0x00處開始執(zhí)行。
中斷向量表的設(shè)置此時,片內(nèi)的BootSRAM地址被置為
0x0000.0000—0x0800.0000 (4K BootSRAM)
NAND Flash地址接NFCE
由于NAND Flash中不能運行代碼,因此必須復(fù)制到內(nèi)存之中再運行。
程序映像存放在NAND FLASH中,中斷向量表位置在程序映像的最前面。由于NAND FLASH不能運行代碼,系統(tǒng)上電或者Reset的時候,內(nèi)置的NAND FLASH 將訪問控制接口,并將中斷向量表和引導(dǎo)代碼自動加載到內(nèi)部SRAM(此時該SRAM 定位于起始地址空間0x00000000,容量為4KB),并且置PC值為0x00運行程序(這一切是有芯片內(nèi)部的硬件邏輯完成的)。之后,SRAM 中的引導(dǎo)程序?qū)⒉僮飨到y(tǒng)鏡像加載到SDRAM 中,操作系統(tǒng)就能夠在SDRAM 中運行。啟動完畢,4KB 的啟動SRAM 就可以用于其他用途。
ARM中的異常與中斷總共有7種
按響應(yīng)優(yōu)先級從高到低
按中斷向量表順序
復(fù)位
復(fù)位
數(shù)據(jù)中止
未定義指令中斷
FIQ
SWI
IRQ
預(yù)取指令中止
預(yù)取指令中止
數(shù)據(jù)中止異常
未定義指令、SWI
IRQ
FIQ
ARM要求中斷向量表必須放置在從0地址開始,連續(xù)8×4字節(jié)的空間內(nèi)(ARM720T和ARM9、ARM10也支持從0xFFFF0000開始的高地址向量表),各異常和中斷向量在向量表中的位置如下
地址
中斷
0x00
Reset
0x04
Undef
0x08
SWI
0x0C
Prefetch Abort
0x10
Data Abort
0x14
(Reserved)
0x18
IRQ
0x2C
FIQ
當(dāng)中斷產(chǎn)生時ARM處理器強(qiáng)制把PC指針置為中斷向量表中相對應(yīng)的向量地址。因為每個中斷向量在向量表中只有一個字節(jié)的存儲空間,只能存放一條指令,所以通常存放跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到存儲器的其他地方,再執(zhí)行中斷處理。
中斷向量表的實現(xiàn)程序通常如下
AREA Boot,CODE,READONLY
ENTRY
B Reset_Handler ; Reset_Handler is a label
B Undef_Handler
B SWI_Handler
B PreAbort_Handler
B DataAbort_Handler
B ;for reserved interrupt, stop here
B IRQ_Handler
B FIQ_Handler
其中的關(guān)鍵字ENTRY是指定編譯器保留這段代碼,因為編譯器可能會認(rèn)為這段代碼是冗余代碼,將其優(yōu)化。鏈接的時候要確保這段代碼被連接到0地址處,并且 作為整個程序的入口點(ENTRY并非總是用來設(shè)置程序的入口點的,所以通常需要在鏈接選項里面顯式的設(shè)置程序入口點)。