




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARM 啟動及工作模式切換一、原理 如何讓嵌入式系統(tǒng)快速穩(wěn)定地啟動是一個重要問題。嵌入式系統(tǒng)的資源有限,程序通常都是固化在ROM 中運行。但在實際應(yīng)用中,為提高系統(tǒng)的實時性,加快代碼的執(zhí)行速度,系統(tǒng)啟動后程序往往要被搬移到RAM 中,因為RAM 的存取速度要比ROM 快得多,這樣大大提升系統(tǒng)的性能。啟動程序要完成的任務(wù)包括:硬件初始化,系統(tǒng)存儲系統(tǒng)的配置,復(fù)制二級中斷向量表。二、啟動程序過程 系統(tǒng)硬件初始化系統(tǒng)上電或復(fù)位后,程序從位于地址0x0 的Reset Exception Vector 處開始執(zhí)行,因此需要在這里放置Bootloader 的第一條指令:
2、b ResetHandler,跳轉(zhuǎn)到標號為ResetHandler 處進行第一階段的硬件初始化,主要內(nèi)容為:關(guān)看門狗定時器,關(guān)中斷,初始化PLL 和時鐘,初始化存儲器系統(tǒng)。執(zhí)行完以上程序后,系統(tǒng)進行堆棧和存儲器的初始化。系統(tǒng)堆棧初始化取決于用戶使用了哪些中斷,以及系統(tǒng)需要處理哪些錯誤類型。一般情況下,管理者堆棧必須設(shè)置,如果使用了IRQ 中斷,則IRQ 堆棧也必須設(shè)置。如果系統(tǒng)使用了外設(shè),則需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率、總線寬度等信息。 代碼段復(fù)制到RAM 中運行因為嵌入式系統(tǒng)的代碼通常都是固化在ROM或者Flash 中,上電后開始運行。由于ROM和Flash 的讀取速度相對較慢,這
3、樣無疑會降低代碼的執(zhí)行速度和系統(tǒng)的運行效率。為此,需要把系統(tǒng)的代碼復(fù)制到RAM 中運行。使用SDT 鏈接器ARMLink 產(chǎn)生的定位信息,把RO 的有效代碼和數(shù)據(jù)段到RAM 中。ARMLink 將編譯后的程序鏈接成ELF 文件。映像文件內(nèi)部共有三種輸出段:RO 段、RW 段和ZI 段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數(shù)據(jù)、可讀寫的數(shù)據(jù)、初始化為0 的數(shù)據(jù),ARMLink 同時還產(chǎn)生了這三種輸出段的起始和終止定位信息: Image$RO$Base 、Image$RO$Limit 、image$RW$Base、Image$Limit、Image$Linit 和Image$ZI$
4、Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM 中的代碼和數(shù)據(jù)搬移到RAM 中。 建立二級中斷向量表在ARM 系統(tǒng)中,中斷向量表位于0x000000000 開始的地址處,意味著無論運行什么樣的上層軟件,一旦發(fā)生中斷,程序就得到Flash 存儲器中的中斷向量表里去,降低系統(tǒng)的運行效率。因此在RAM 中建立自己的二級中斷向量表,當中斷發(fā)生后,程序直接從RAM 中取中斷向量進入中斷子程序。尤其是在中斷頻繁發(fā)生的系統(tǒng)里,這種方法可以大大提高系統(tǒng)的運行效率。 MMU 的應(yīng)用MMU 是存儲器管理單元的縮寫,是用來管理虛擬內(nèi)存系統(tǒng)的器件。MMU 通常是CPU的一部分,本身有少量存儲空間存放從虛擬地址到物
5、理地址的匹配表,此表稱作TLB(轉(zhuǎn)換旁置緩沖區(qū))。所有數(shù)據(jù)請求都送往MMU,由MMU 決定數(shù)據(jù)是在RAM 內(nèi)還是在大容量外部存儲器設(shè)備內(nèi)。如果數(shù)據(jù)不在存儲空間內(nèi),MMU 將產(chǎn)生頁面錯誤中斷。MMU 存儲器系統(tǒng)的結(jié)構(gòu)允許對存儲器系統(tǒng)的精細控制,大部分的控制細節(jié)由存在存儲器中的轉(zhuǎn)換表提供。這些表的入口定義了從1KB1MB 的各種存儲器區(qū)域的屬性。MMU 完成的兩個主要功能是:將虛地址轉(zhuǎn)換成物理地址,控制存儲器存取允許。MMU 關(guān)掉時,虛地址直接輸出到物理地址總線。SDRAM 地址分配 三、啟動代碼完成的主要功能1) 建立異常中斷的入口向量2) 建立中斷向量表3) 為ARM 每種運行模式設(shè)
6、置堆棧4) 初始化ARM 的MPLL 時鐘5) 初始化MMU(內(nèi)存管理單元)6) 初始化存儲器控制器7) 關(guān)閉看門狗、關(guān)閉中斷8) 判斷IRQ 中斷的中斷入口9) 將RW 段的內(nèi)容從flash 拷貝到SDRAM,初始化ZI 段為010) 跳轉(zhuǎn)到應(yīng)用程序(C 代碼)四、S3C2410 初始化說明1 創(chuàng)建中斷向量表中斷向量表創(chuàng)建到SDRAM 高位地址上,主要是因為SDRAM 的地址位置需要放置執(zhí)行的映象程序,而且在SDRAM 中查找向量表速度會快很多。中斷向量表放置時需要字對齊。 ALIGN ;通過添加補丁字節(jié)使當前位置滿足一
7、定的對齊方式 ;可讀寫的數(shù)據(jù)段 AREA RamData, DATA, READWRITE;=MAP:定義一個結(jié)構(gòu)化的內(nèi)存表(storage map)的首地址,地址為0x33ff8000 _ISR_STARTADDRESS ;0x33ff8
8、000HandleReset # 4 ;#Field:定義一個結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域,該域為4 個字節(jié)HandleUndef # 4HandleSWI # 4HandlePabort # 4HandleDabort # 4HandleReserved # 4HandleIRQ # 4HandleFIQ # 4;Dont use the label IntVectorTable,;The value of IntVectorTable is different with the address you think it may be.;IntVectorTableHandleEINT0 # 4H
9、andleEINT1 # 4HandleEINT2 # 4HandleEINT3 # 4HandleEINT4_7 # 4HandleEINT8_23 # 4HandleRSV6 # 4HandleBATFLT # 4HandleTICK # 4HandleWDT # 4HandleTIMER0 # 4HandleTIMER1 # 4HandleTIMER2 # 4HandleTIMER3 # 4HandleTIMER4 # 4HandleUART2 # 4HandleLCD # 4HandleDMA0 # 4HandleDMA1 # 4HandleDMA2 # 4HandleDMA3 # 4
10、HandleMMC # 4HandleSPI0 # 4HandleUART1 # 4HandleRSV24 # 4HandleUSBD # 4HandleUSBH # 4HandleIIC # 4HandleUART0 # 4HandleSPI1 # 4HandleRTC # 4HandleADC # 42 創(chuàng)建異常中斷的入口函數(shù)b ResetHandlerb HandlerUndef ;handler for Undefined modeb HandlerSWI ;handler for SWI interruptb HandlerPabort ;handler for PAbortb Ha
11、ndlerDabort ;handler for DAbortb . ;reservedb HandlerIRQ ;handler for IRQ interruptb HandlerFIQ ;handler for FIQ interrupt異常向量的入口函數(shù)是由8 個跳轉(zhuǎn)指令組成的,這8 個跳轉(zhuǎn)指令需要按照順序放置到固定的地址上,地址是0x000x1c,這8 個跳轉(zhuǎn)指令是ARM 匯編指令,所以條指令占4 個字節(jié)的位置。3 關(guān)閉看門狗、關(guān)閉中斷l(xiāng)dr r0,=WTCON ;watch dog disableldr r1,=0x0str r1,r0ldr r0,=INTMSKldr r1,=0
12、xffffffff ;all interrupt disablestr r1,r0ldr r0,=INTSUBMSKldr r1,=0x3ff ;all sub interrupt disablestr r1,r04 設(shè)置ARM 的主時鐘頻率;To reduce PLL lock time, adjust the LOCKTIME register.ldr r0,=LOCKTIMEldr r1,=0xffffffstr r1,r0;Configure MPLLldr r0,=MPLLCONldr r1,=(M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
13、;Fin=12MHz,Fout=50MHzstr r1,r05 設(shè)置存儲器控制器 ;Set memory control registers adr r0, SMRDATA ldr r1,=BWSCON ;BWSCON Address add r2, r0, #52 ;End address of SMRDATA 一共13
14、 個寄存器0 ldr r3, r0, #4 str r3, r1, #4 cmp r2, r0 bne %B0LTORG ;聲明一個數(shù)據(jù)緩沖池的開始SMRDATA DATADCD 0x2211D110 ; BWSCONDCD 0x0700 ; BANKCON0DCD 0x7FFC ; BANKCON1DCD 0x0700 ; BANKCON2DCD 0x07
15、00 ; BANKCON3DCD 0x0700 ;BANKCON4DCD 0x0700 ;BANKCON5DCD 0x18005 ;BANKCON6DCD 0x18005 ; BANKCON7DCD 0x008E0459 ;REFRESHDCD 0x32 ;BANKSIZE=0x32DCD 0x30 ;MRSR6 CL=3clkDCD 0x30 ;MRSR7以上是對S3C2410A 的存儲器進行初始化,存儲器的初始化是和具體的硬件平臺相關(guān)的,具體的內(nèi)容見S3C2410A 的使用手冊。6 堆棧初始化及ARM 工作模式轉(zhuǎn)換UserStack EQU (_STACK_BASEADDRESS-0x38
16、00) ;0x33ff4800 SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 InitStacks;UndefMo
17、de 堆棧mrs r0,cpsrbic r0,r0,#MODEMASKorr r1,r0,#UNDEFMODE|NOINTmsr cpsr_cxsf,r1 ;UndefModeldr sp,=UndefStack;AbortMode 堆棧orr r1,r0,#ABORTMODE|NOINTmsr cpsr_cxsf,r1 ;AbortModeldr sp,=AbortStack;IRQMode 堆棧orr r1,r0,#IRQMODE|NOINTmsr cpsr_cxsf,r1 ;IRQModeldr sp,=IRQStack;FIQMode 堆棧orr r1,r0,#FIQMODE|NOIN
18、Tmsr cpsr_cxsf,r1 ;FIQModeldr sp,=FIQStack;SVCMode 堆棧bic r0,r0,#MODEMASK|NOINTorr r1,r0,#SVCMODEmsr cpsr_cxsf,r1 ;SVCModeldr sp,=SVCStackmov pc,lr7 將RW 內(nèi)容從flash 中copy 到SDRAM 中,并將ZI 內(nèi)容初始化為0 adr r0, ResetEntry ldr r2, BaseOfROM
19、60; cmp r0, r2 ldreq r0, TopOfROM beq InitRam ldr r3, TopOfROM;將RO 區(qū)域的代碼copy 到RW 域中并且將ZI 區(qū)域初始化為0。0 ldmia r0!, stmia r2!,
20、0; cmp r2, r3 bcc %B0 sub r2, r2, r3 sub r0, r0, r2InitRam ldr r2, BaseOfBSS ldr r3, BaseOfZero0 cmp r2, r3 ;copy 初始化代碼 ldrcc r1, r0, #4 strcc r1, r2, #4 bcc %B0 mov r0, #0 ;初始化Z
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓安裝櫥柜合同范本
- 勞務(wù)合同范本版一
- 出租土地建設(shè)合同范本
- 加盟合同范本找
- 勞務(wù)外包個人合同范本
- 個人購買商鋪合同范本
- 代辦合同范本寫
- 住宅租賃居間合同范本
- 凱迪拉克訂購合同范本
- 2025年羧甲淀粉鈉合作協(xié)議書
- 家校共育之道
- 公司EHS知識競賽題庫附答案
- DeepSeek入門寶典培訓(xùn)課件
- 社區(qū)健康促進工作計劃
- 《作文中間技巧》課件
- 2025年度移動端SEO服務(wù)及用戶體驗優(yōu)化合同
- 中小學(xué)《清明節(jié)活動方案》班會課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 新蘇教版一年級下冊數(shù)學(xué)第1單元第3課時《8、7加幾》作業(yè)
- 2024年山東電力高等??茖W(xué)校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計劃
評論
0/150
提交評論