ARM的啟動和中斷向量表


啟動的方式

對於S3C2440而言,啟動的方式有兩種,一是Nor Flash方式啟動,二是Nand Flash方式啟動。

使用Nor Flash方式啟動

Nor Flash的地址范圍如下

   0x0000.0000—0x0800.0000 (2M Nor Flash)

   片內的BootSRAM地址被置為

   0x4000.0000—0x4000.DFFF (4K BootSRAM)

由於可以在Nor Flash直接運行代碼,因此BootSRAM被映射到別的地址上去,可作為其他用途。

程序映像直接存放到NOR FLASH里面,中斷向量表存放在0x0000.0000開始的8×4大小的空間中。

中斷產生時,PC被置為相對應的向量地址。如上電或者按Reset鍵時,PC直接置為0x00,從NOR FLASH的0x00處開始執行。

使用NAND Flash方式啟動

此時,片內的BootSRAM地址被置為

   0x0000.0000—0x0800.0000 (4K BootSRAM)

   NAND Flash地址接NFCE

由於NAND Flash中不能運行代碼,因此必須復制到內存之中再運行。

      程序映像存放在NAND FLASH中,中斷向量表位置在程序映像的最前面。由於NAND FLASH不能運行代碼,系統上電或者Reset的時候,內置的NAND FLASH 將訪問控制接口,並將中斷向量表和引導代碼自動加載到內部SRAM(此時該SRAM 定位於起始地址空間0x00000000,容量為4KB),並且置PC值為0x00運行程序(這一切是有芯片內部的硬件邏輯完成的)。之后,SRAM 中的引導程序將操作系統鏡像加載到SDRAM 中,操作系統就能夠在SDRAM 中運行。啟動完畢,4KB 的啟動SRAM 就可以用於其他用途。

中斷向量表的設置

ARM中的異常與中斷總共有7種

 

按響應優先級從高到低

按中斷向量表順序

復位

復位

數據中止

未定義指令中斷

FIQ

SWI

IRQ

預取指令中止

預取指令中止

數據中止異常

未定義指令、SWI

IRQ

 

FIQ

      ARM要求中斷向量表必須放置在從0地址開始,連續8×4字節的空間內(ARM720T和ARM9、ARM10也支持從0xFFFF0000開始的高地址向量表),各異常和中斷向量在向量表中的位置如下

 

地址

中斷

0x00

Reset

0x04

Undef

0x08

SWI

0x0C

Prefetch Abort

0x10

Data Abort

0x14

(Reserved)

0x18

IRQ

0x2C

FIQ

      當中斷產生時ARM處理器強制把PC指針置為中斷向量表中相對應的向量地址。因為每個中斷向量在向量表中只有一個字節的存儲空間,只能存放一條指令,所以通常存放跳轉指令,使程序跳轉到存儲器的其他地方,再執行中斷處理。

 

中斷向量表的實現程序通常如下

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

      其中的關鍵字ENTRY是指定編譯器保留這段代碼,因為編譯器可能會認為這段代碼是冗余代碼,將其優化。鏈接的時候要確保這段代碼被連接到0地址處,並且 作為整個程序的入口點(ENTRY並非總是用來設置程序的入口點的,所以通常需要在鏈接選項里面顯式的設置程序入口點)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM