S3C2410快速啟動(dòng)的實(shí)現
關(guān)鍵詞:S3C2410;快速啟動(dòng);MMU
---S3C2410是三星公司基于A(yíng)RM920T設計的一款處理器,在開(kāi)發(fā)基于S3C2410的系統的過(guò)程中,如何讓系統快速穩定地啟動(dòng)是一個(gè)重要問(wèn)題。嵌入式系統的資源有限,程序通常都是固化在ROM中運行。但在實(shí)際應用中,為提高系統的實(shí)時(shí)性,加快代碼的執行速度,系統啟動(dòng)后程序往往要被搬移到RAM中,因為RAM的存取速度要比ROM快得多,這樣大大提升系統的性能。啟動(dòng)程序要完成的任務(wù)包括:硬件初始化,系統存儲系統的配置,復制二級中斷向量表。
啟動(dòng)程序過(guò)程
● 系統硬件初始化
---系統上電或復位后,程序從位于地址0x0的Reset Exception Vector處開(kāi)始執行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉到標號為ResetHandler處進(jìn)行第一階段的硬件初始化,主要內容為:關(guān)看門(mén)狗定時(shí)器,關(guān)中斷,初始化PLL和時(shí)鐘,初始化存儲器系統。執行完以上程序后,系統進(jìn)行堆棧和存儲器的初始化。系統堆棧初始化取決于用戶(hù)使用了哪些中斷,以及系統需要處理哪些錯誤類(lèi)型。一般情況下,管理者堆棧必須設置,如果使用了IRQ中斷,則IRQ堆棧也必須設置。如果系統使用了外設,則需要設置相關(guān)的寄存器,以確定其刷新頻率、總線(xiàn)寬度等信息。
● 代碼段復制到RAM中運行
---因為嵌入式系統的代碼通常都是固化在ROM或者Flash中,上電后開(kāi)始運行。由于ROM和Flash的讀取速度相對較慢,這樣無(wú)疑會(huì )降低代碼的執行速度和系統的運行效率。為此,需要把系統的代碼復制到RAM中運行。使用SDT鏈接器ARMLink產(chǎn)生的定位信息,把RO的有效代碼和數據段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數據、可讀寫(xiě)的數據、初始化為0的數據,ARMLink同時(shí)還產(chǎn)生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM中的代碼和數據搬移到RAM中,具體程序如下。
---LDR r0, =|Image$$RO$$Base| /*RO段起始地址*/
---LDR r1, =|Image$$RO$$Limit| /*RO段結束地址*/
---LDR r2, =|Image$$RW$$Base|
---LDR r3, =|Image$$RW$$Limit|
---/*分別求出需要映像的代碼和數據的長(cháng)度并累加,放到寄存器R1中*/
---SUB r1, r1, r0
---SUB r3, r3, r2
---ADD r1, r1, r3
---/*將需要映象的代碼和數據復制到RAM中去*/
---0 /*標示符*/
---LDR r3, [r0], #4
---STR r3, [r2], #4
---SUBS r1, r1, #4
---BNE %B0 /*如果沒(méi)有復制完,跳轉到0標示符處的匯編語(yǔ)句,繼續復制,參見(jiàn)ARM指令幫助手冊*/
● 建立二級中斷向量表
---在A(yíng)RM系統中,中斷向量表位于0X0開(kāi)始的地址處,意味著(zhù)無(wú)論運行什么樣的上層軟件,一旦發(fā)生中斷,程序就得到Flash存儲器中的中斷向量表里去,降低系統的運行效率。因此在RAM中建立自己的二級中斷向量表,當中斷發(fā)生后,程序直接從RAM中取中斷向量進(jìn)入中斷子程序。尤其是在中斷頻繁發(fā)生的系統里,這種方法可以大大提高系統的運行效率,具體的實(shí)現代碼如下。
---b ResetHandler
---b HandlerUndef /*未定義模式句柄*/
---b HandlerSWI /*SWI中斷句柄*/
---b HandlerPabort /*PAbort中斷句柄*/
---b HandlerDabort /*Dabort中斷句柄*/
---b. /*保留*/
---b HandlerIRQ /*IRQ 中斷句柄*/
---b HandlerFIQ /*FIQ中斷句柄*/
---HandlerFIQ HANDLER HandleFIQ
---HandlerIRQ HANDLER HandleIRQ
---HandlerUndef HANDLER HandleUndef
---HandlerSWI HANDLER HandleSWI
---HandlerDabort HANDLER HandleDabort
---HandlerPabort HANDLER HandlePabort
---其中HANDLER是一個(gè)宏,用于查找中斷處理程序的入口地址。這些地址存放在由HandleXXX指向的表項中,該表定位在RAM高端,基地址為_(kāi)ISR_STARTADDRESS。
---^ _ISR_STARTADDRESS
---HandleReset # 4
---HandleUndef # 4
---HandleSWI # 4
---HandlePabort # 4
---HandleDabort # 4
---HandleReserved # 4
---HandleIRQ # 4
---HandleFIQ # 4
● MMU的應用
---MMU是存儲器管理單元的縮寫(xiě),是用來(lái)管理虛擬內存系統的器件。MMU通常是CPU的一部分,本身有少量存儲空間存放從虛擬地址到物理地址的匹配表,此表稱(chēng)作TLB(轉換旁置緩沖區)。所有數據請求都送往MMU,由MMU決定數據是在RAM內還是在大容量外部存儲器設備內。如果數據不在存儲空間內,MMU將產(chǎn)生頁(yè)面錯誤中斷。MMU存儲器系統的結構允許對存儲器系統的精細控制,大部分的控制細節由存在存儲器中的轉換表提供。這些表的入口定義了從1KB~1MB的各種存儲器區域的屬性。MMU完成的兩個(gè)主要功能是:將虛地址轉換成物理地址,控制存儲器存取允許。MMU關(guān)掉時(shí),虛地址直接輸出到物理地址總線(xiàn)。
---經(jīng)過(guò)以上的分析可以發(fā)現,系統啟動(dòng)程序主要是完成了硬件的初始化,以及克服Flash或ROM讀取速度慢的弱點(diǎn),提高指令和數據的讀取速度,實(shí)現系統的高速運行,并且通過(guò)MMU的應用,減少RAM的使用,降低系統成本。
參考文獻
1 S3C2410數據手冊
2 ARM920T數據手冊
3 王京林.ARM7在嵌入式應用中啟動(dòng)程序
的實(shí)現
相關(guān)推薦
-
★被水淹死的魚(yú)★ | 2003-03-04
-
-
瘋海龍 | 2004-01-06
-
-
布魯斯許 | 2004-07-15
-
-
-
-
-
-
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論