S3C2410快速啟動(dòng)的實(shí)現(xiàn)
發(fā)布時(shí)間:2007/8/15 0:00:00 訪問次數(shù):574
Quick startup of S3C2410
摘 要:介紹S3C2410處理器的快速啟動(dòng)技術(shù),重點(diǎn)對(duì)系統(tǒng)硬件的初始化,二級(jí)中斷向量表的復(fù)制,代碼段的復(fù)制以及MMU管理進(jìn)行了探討,并且對(duì)具體的實(shí)現(xiàn)代碼進(jìn)行了分析,實(shí)現(xiàn)了系統(tǒng)從RAM中的高速啟動(dòng)運(yùn)行。
關(guān)鍵詞:S3C2410;快速啟動(dòng);MMU
嵌入式系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等均有嚴(yán)格要求,以ARM體系結(jié)構(gòu)為基礎(chǔ)的各種RISC微處理器具有靈活的特性和強(qiáng)大的性能,在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。
S3C2410是三星公司基于ARM920T設(shè)計(jì)的一款處理器,在開發(fā)基于S3C2410的系統(tǒng)的過程中,如何讓系統(tǒng)快速穩(wěn)定地啟動(dòng)是一個(gè)重要問題。嵌入式系統(tǒng)的資源有限,程序通常都是固化在ROM中運(yùn)行。但在實(shí)際應(yīng)用中,為提高系統(tǒng)的實(shí)時(shí)性,加快代碼的執(zhí)行速度,系統(tǒng)啟動(dòng)后程序往往要被搬移到RAM中,因?yàn)镽AM的存取速度要比ROM快得多,這樣大大提升系統(tǒng)的性能。啟動(dòng)程序要完成的任務(wù)包括:硬件初始化,系統(tǒng)存儲(chǔ)系統(tǒng)的配置,復(fù)制二級(jí)中斷向量表。
啟動(dòng)程序過程
● 系統(tǒng)硬件初始化
系統(tǒng)上電或復(fù)位后,程序從位于地址0x0的Reset Exception Vector處開始執(zhí)行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉(zhuǎn)到標(biāo)號(hào)為ResetHandler處進(jìn)行第一階段的硬件初始化,主要內(nèi)容為:關(guān)看門狗定時(shí)器,關(guān)中斷,初始化PLL和時(shí)鐘,初始化存儲(chǔ)器系統(tǒng)。執(zhí)行完以上程序后,系統(tǒng)進(jìn)行堆棧和存儲(chǔ)器的初始化。系統(tǒng)堆棧初始化取決于用戶使用了哪些中斷,以及系統(tǒng)需要處理哪些錯(cuò)誤類型。一般情況下,管理者堆棧必須設(shè)置,如果使用了IRQ中斷,則IRQ堆棧也必須設(shè)置。如果系統(tǒng)使用了外設(shè),則需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率、總線寬度等信息。
● 代碼段復(fù)制到RAM中運(yùn)行
因?yàn)榍度胧较到y(tǒng)的代碼通常都是固化在ROM或者Flash中,上電后開始運(yùn)行。由于ROM和Flash的讀取速度相對(duì)較慢,這樣無疑會(huì)降低代碼的執(zhí)行速度和系統(tǒng)的運(yùn)行效率。為此,需要把系統(tǒng)的代碼復(fù)制到RAM中運(yùn)行。使用SDT鏈接器ARMLink產(chǎn)生的定位信息,把RO的有效代碼和數(shù)據(jù)段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內(nèi)部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數(shù)據(jù)、可讀寫的數(shù)據(jù)、初始化為0的數(shù)據(jù),ARMLink同時(shí)還產(chǎn)生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit。可以在程序中使用這些定位信息。將ROM中的代碼和數(shù)據(jù)搬移到RAM中,具體程序如下。
LDR r0, =|Image$$RO$$Base| /*RO段起始地址*/
LDR r1, =|Image$$RO$$Limit| /*RO段結(jié)束地址*/
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit|
/*分別求出需要映像的代碼和數(shù)據(jù)的長(zhǎng)度并累加,放到寄存器R1中*/
SUB r1, r1, r0
SUB r3, r3, r2
ADD r1, r1, r3
/*將需要映象的代碼和數(shù)據(jù)復(fù)制到RAM中去*/
0 /*標(biāo)示符*/
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE %B0 /*如果沒有復(fù)制完,跳轉(zhuǎn)到0標(biāo)示符處的匯編語(yǔ)句,繼續(xù)復(fù)制,參見ARM指令幫助手冊(cè)*/
● 建立二級(jí)中斷向量表
在ARM系統(tǒng)中,中斷向量表位于0X0開始的地址處,意味著無論運(yùn)行什么樣的上層軟件,一旦發(fā)生中斷,程序就得到Flash存儲(chǔ)器中的中斷向量表里去,降低系統(tǒng)的運(yùn)行效率。因此在RAM中建立自己的二級(jí)中斷向量表,當(dāng)中斷發(fā)生后,程序直接從RAM中取中斷向量進(jìn)入中斷子程序。尤其是在中斷頻繁發(fā)生的系統(tǒng)里,這種方法可以大大提高系統(tǒng)的運(yùn)行效率,具體的實(shí)現(xiàn)代碼如下。
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指向的表項(xiàng)中,該表定位在RAM高端,基地址為_ISR_STARTADDRESS。
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
● MMU的應(yīng)用
MMU是存儲(chǔ)器管理單元的縮寫,是用來管理虛擬內(nèi)存系統(tǒng)的器件。MMU通常是CPU的一部分,本身有少量存儲(chǔ)空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(轉(zhuǎn)換旁置緩沖區(qū))。所有數(shù)據(jù)請(qǐng)求都送往MMU,由MMU決定數(shù)據(jù)是在RAM內(nèi)還是在大容量外部存儲(chǔ)器設(shè)備內(nèi)。如果數(shù)據(jù)不在存儲(chǔ)空間內(nèi),MMU將產(chǎn)生頁(yè)面錯(cuò)誤中斷。MMU存儲(chǔ)器系統(tǒng)的結(jié)構(gòu)允許對(duì)存
Quick startup of S3C2410
摘 要:介紹S3C2410處理器的快速啟動(dòng)技術(shù),重點(diǎn)對(duì)系統(tǒng)硬件的初始化,二級(jí)中斷向量表的復(fù)制,代碼段的復(fù)制以及MMU管理進(jìn)行了探討,并且對(duì)具體的實(shí)現(xiàn)代碼進(jìn)行了分析,實(shí)現(xiàn)了系統(tǒng)從RAM中的高速啟動(dòng)運(yùn)行。
關(guān)鍵詞:S3C2410;快速啟動(dòng);MMU
嵌入式系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等均有嚴(yán)格要求,以ARM體系結(jié)構(gòu)為基礎(chǔ)的各種RISC微處理器具有靈活的特性和強(qiáng)大的性能,在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。
S3C2410是三星公司基于ARM920T設(shè)計(jì)的一款處理器,在開發(fā)基于S3C2410的系統(tǒng)的過程中,如何讓系統(tǒng)快速穩(wěn)定地啟動(dòng)是一個(gè)重要問題。嵌入式系統(tǒng)的資源有限,程序通常都是固化在ROM中運(yùn)行。但在實(shí)際應(yīng)用中,為提高系統(tǒng)的實(shí)時(shí)性,加快代碼的執(zhí)行速度,系統(tǒng)啟動(dòng)后程序往往要被搬移到RAM中,因?yàn)镽AM的存取速度要比ROM快得多,這樣大大提升系統(tǒng)的性能。啟動(dòng)程序要完成的任務(wù)包括:硬件初始化,系統(tǒng)存儲(chǔ)系統(tǒng)的配置,復(fù)制二級(jí)中斷向量表。
啟動(dòng)程序過程
● 系統(tǒng)硬件初始化
系統(tǒng)上電或復(fù)位后,程序從位于地址0x0的Reset Exception Vector處開始執(zhí)行,因此需要在這里放置Bootloader的第一條指令:b ResetHandler,跳轉(zhuǎn)到標(biāo)號(hào)為ResetHandler處進(jìn)行第一階段的硬件初始化,主要內(nèi)容為:關(guān)看門狗定時(shí)器,關(guān)中斷,初始化PLL和時(shí)鐘,初始化存儲(chǔ)器系統(tǒng)。執(zhí)行完以上程序后,系統(tǒng)進(jìn)行堆棧和存儲(chǔ)器的初始化。系統(tǒng)堆棧初始化取決于用戶使用了哪些中斷,以及系統(tǒng)需要處理哪些錯(cuò)誤類型。一般情況下,管理者堆棧必須設(shè)置,如果使用了IRQ中斷,則IRQ堆棧也必須設(shè)置。如果系統(tǒng)使用了外設(shè),則需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率、總線寬度等信息。
● 代碼段復(fù)制到RAM中運(yùn)行
因?yàn)榍度胧较到y(tǒng)的代碼通常都是固化在ROM或者Flash中,上電后開始運(yùn)行。由于ROM和Flash的讀取速度相對(duì)較慢,這樣無疑會(huì)降低代碼的執(zhí)行速度和系統(tǒng)的運(yùn)行效率。為此,需要把系統(tǒng)的代碼復(fù)制到RAM中運(yùn)行。使用SDT鏈接器ARMLink產(chǎn)生的定位信息,把RO的有效代碼和數(shù)據(jù)段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內(nèi)部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數(shù)據(jù)、可讀寫的數(shù)據(jù)、初始化為0的數(shù)據(jù),ARMLink同時(shí)還產(chǎn)生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit?梢栽诔绦蛑惺褂眠@些定位信息。將ROM中的代碼和數(shù)據(jù)搬移到RAM中,具體程序如下。
LDR r0, =|Image$$RO$$Base| /*RO段起始地址*/
LDR r1, =|Image$$RO$$Limit| /*RO段結(jié)束地址*/
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit|
/*分別求出需要映像的代碼和數(shù)據(jù)的長(zhǎng)度并累加,放到寄存器R1中*/
SUB r1, r1, r0
SUB r3, r3, r2
ADD r1, r1, r3
/*將需要映象的代碼和數(shù)據(jù)復(fù)制到RAM中去*/
0 /*標(biāo)示符*/
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE %B0 /*如果沒有復(fù)制完,跳轉(zhuǎn)到0標(biāo)示符處的匯編語(yǔ)句,繼續(xù)復(fù)制,參見ARM指令幫助手冊(cè)*/
● 建立二級(jí)中斷向量表
在ARM系統(tǒng)中,中斷向量表位于0X0開始的地址處,意味著無論運(yùn)行什么樣的上層軟件,一旦發(fā)生中斷,程序就得到Flash存儲(chǔ)器中的中斷向量表里去,降低系統(tǒng)的運(yùn)行效率。因此在RAM中建立自己的二級(jí)中斷向量表,當(dāng)中斷發(fā)生后,程序直接從RAM中取中斷向量進(jìn)入中斷子程序。尤其是在中斷頻繁發(fā)生的系統(tǒng)里,這種方法可以大大提高系統(tǒng)的運(yùn)行效率,具體的實(shí)現(xiàn)代碼如下。
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指向的表項(xiàng)中,該表定位在RAM高端,基地址為_ISR_STARTADDRESS。
^ _ISR_STARTADDRESS
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
● MMU的應(yīng)用
MMU是存儲(chǔ)器管理單元的縮寫,是用來管理虛擬內(nèi)存系統(tǒng)的器件。MMU通常是CPU的一部分,本身有少量存儲(chǔ)空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(轉(zhuǎn)換旁置緩沖區(qū))。所有數(shù)據(jù)請(qǐng)求都送往MMU,由MMU決定數(shù)據(jù)是在RAM內(nèi)還是在大容量外部存儲(chǔ)器設(shè)備內(nèi)。如果數(shù)據(jù)不在存儲(chǔ)空間內(nèi),MMU將產(chǎn)生頁(yè)面錯(cuò)誤中斷。MMU存儲(chǔ)器系統(tǒng)的結(jié)構(gòu)允許對(duì)存
熱門點(diǎn)擊
- 光伏發(fā)電系統(tǒng)最大功率點(diǎn)跟蹤控制
- BA8206 BA4遙控風(fēng)扇控制器的新應(yīng)用
- CAN總線在混和動(dòng)力汽車電機(jī)控制系統(tǒng)中的應(yīng)用
- 基于TMS320F240的多種PWM實(shí)現(xiàn)
- 真有效值直流轉(zhuǎn)換芯片AD536A在直流點(diǎn)焊微
- 由單片機(jī)和多片DS1820組成的多點(diǎn)溫度測(cè)控
- KEELOQ技術(shù)的軟件實(shí)現(xiàn)
- 帶故障檢測(cè)的PWM風(fēng)扇轉(zhuǎn)速控制器MC642
- ZMD31050在數(shù)字式氣壓傳感器系統(tǒng)中的應(yīng)
- 基于英飛凌智能傳感器SP12/SP30的TP
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點(diǎn)是“靈動(dòng)”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- 100V高頻半橋N-溝道功率MOSFET驅(qū)動(dòng)
- 集成高端和低端 FET 和驅(qū)動(dòng)
- 柵極驅(qū)動(dòng)單片半橋芯片MP869
- 數(shù)字恒定導(dǎo)通時(shí)間控制模式(COT)應(yīng)用探究
- 高效率 (CSP/QFN/BG
- IC 工藝、封裝技術(shù)、單片設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究