ARM體系結(jié)構(gòu)與編程:第6章 bootload啟動代碼分析_第1頁
ARM體系結(jié)構(gòu)與編程:第6章 bootload啟動代碼分析_第2頁
ARM體系結(jié)構(gòu)與編程:第6章 bootload啟動代碼分析_第3頁
ARM體系結(jié)構(gòu)與編程:第6章 bootload啟動代碼分析_第4頁
ARM體系結(jié)構(gòu)與編程:第6章 bootload啟動代碼分析_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第6章 bootload啟動代碼分析目標學員:嵌入式初級開發(fā)者課程時長:2學時,90分鐘 ARM微處理器指令系統(tǒng)本章目錄132匯編基礎(chǔ) 啟動代碼功能模塊分解 bootload實驗部分 課程目標掌握bootload啟動的過程 ;通過實驗加深對啟動代碼功能模塊的 理解 ;重點難點 Bootload整體框架 Bootload各功能模塊的理解課程目錄132匯編基礎(chǔ)啟動代碼功能模塊分解bootload實驗部分 偽操作 : GET , IMPORT , AERA , ASSERT .匯編基礎(chǔ) 匯編指令 : LDR,MOV,BX, add狀態(tài)寄存器 MRS 訪問指令內(nèi)存訪問指令 str,ldr課程目錄132

2、匯編基礎(chǔ)啟動代碼功能模塊分解 bootload實驗部分 啟動代碼功能模塊分解 S3C2440A啟動程序步驟:屏蔽所有中斷,關(guān)看門狗。根據(jù)工作頻率設(shè)置PLL寄存器初始化存儲控制相關(guān)寄存器初始化各模式下的棧指針設(shè)置缺省中斷處理函數(shù)將數(shù)據(jù)段拷貝到RAM中,將零初始化數(shù)據(jù)段清零跳轉(zhuǎn)到C語言Main入口函數(shù)中程序的入口地址 初始化程序中必須指明入口地址,因為處理器復(fù)位(仿真時,裝載image)后PC 要找到入口開始執(zhí)行代碼,當各種異常或是中斷產(chǎn)生的時候也要找到各個異常的入口開始執(zhí)行代碼。 AREA Init,CODE,READONLY ; 這表明下面的是一個名為Init 的代碼段ENTRY ;定義程序的

3、入口(調(diào)試用), ENTRY 只是定義一個普 通的入口點,ASSERT :DEF:ENDIAN_CHANGE ; 判斷是否已經(jīng)定義了ENDIAN_CHANGE 看門狗及中斷的禁止 上電和復(fù)位后,程序開始從位于0 x0 執(zhí)行b ResetHandler 程序跳轉(zhuǎn)到這里執(zhí)行,將看門狗,中斷之類的程序關(guān)掉, ResetHandler;啟動代碼之關(guān)看門狗,關(guān)中斷,初始化并配置時鐘,ldrr0,=WTCON ;watch dog disableldrr1,=0 x0strr1,r0ldrr0,=INTMSKldrr1,=0 xffffffff ;all interrupt disablestrr1,r0

4、系統(tǒng)時鐘初始化 設(shè)置pll 鎖定時間 ldr r0,=LOCKTIME ;設(shè)置pll 鎖定時間ldr r1,=0 xffffffff ;將0 xffffffff 賦值給r1str r1,r0 ;將r1 寄存器的值保存到r0 指向的內(nèi)存中設(shè)置UPLL 的輸出頻率 ldrr0,=MPLLCONldrr1,=(M_MDIV12)+(M_PDIV4)+M_SDIV) ;Fin=16.9344MHzstrr1,r0設(shè)置MPLL 的分頻系數(shù) (設(shè)置主時鐘鎖相環(huán)寄存器 )ldr r0,=MPLLCON ;設(shè)置主時鐘鎖相環(huán)寄存器ldr r1,=(M_MDIV12)+(M_PDIV4)+M_SDIV) ;設(shè)置M

5、PLL 的分頻系數(shù)str r1,r0初始化內(nèi)存控制器 初始化內(nèi)存控制器其實就是對S3C2440 的memory bank 進行設(shè)置,使其擴展的存儲器或外部設(shè)備能夠被處理器通過內(nèi)存控制器正確讀寫。 使其C語言變量等的用戶數(shù)據(jù),各種模式的堆棧,中斷向量表 在內(nèi)存的使用adrlr0, SMRDATA ldrr1,=BWSCON ;r1中存放BWSCON地址ldrr3, r0, #4strr3, r1, #4系統(tǒng)堆棧的初始化 ARM 有7 種模式,用戶模式,快速中斷模式,中斷模式,管理模式,中止模式,未定義模式和系統(tǒng)模式。系統(tǒng)堆棧的初始化主要是給各個處理器模式分配堆棧空間。 orrr1,r0,#IRQ

6、MODE|NOINT;中斷模式msrcpsr_cxsf,r1;IRQModeldrsp,=IRQStack; IRQStack=0 x33FF_7000 初始化方式:堆棧初始化的順序決定系統(tǒng)最后運行在哪種處理器模式,最后初始化哪種模式的堆棧,系統(tǒng)就運行在哪種模式。建立中斷向量表 中斷向量表一般位于啟動代碼的開始部分,它是用戶程序與啟動代碼之間以及啟動代碼的各部分之間聯(lián)系的紐帶。它由一個一個的跳轉(zhuǎn)函數(shù)組成 $HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,#4 ;減少sp(用于存放轉(zhuǎn)跳地址)實質(zhì)上是在計算返回地址stmfd sp!,

7、r0 ;SP 先遞減,再將r0 壓棧ldr r0,=$HandleLabel ;將HandleXXX 的標號地址傳給r0ldr r0,r0 ;把HandleXXX 所指向的內(nèi)容(也就是中斷程序的入口)放入r0str r0,sp,#4 ;把中斷服務(wù)程序(ISR)壓入棧.ldmfd sp!,r0,pc ;用出棧的方式恢復(fù)r0 的原值和為pc 設(shè)定新值(完成了到ISR 的轉(zhuǎn)跳) 向量表的作用:當系統(tǒng)發(fā)生異常時,ARM 處理器會通過硬件機制強制將PC 指針指向中斷向量表中對應(yīng)的異常跳轉(zhuǎn)函數(shù)存儲的地址,然后程序會跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序去執(zhí)行。跳轉(zhuǎn)到C入口 ; 跳轉(zhuǎn)到C語言中的main函數(shù)call_C_

8、main ; LDR R0, =_main IMPORT main BL main課程目錄132匯編基礎(chǔ)啟動代碼功能模塊分解 bootload實驗部分 bootload實驗部分 步驟一:為bootload建立工程,加入文件Option.inc 2440addr.inc Memcfg.inc s3c2440.s main.c 2440slib.s并配置、編譯,生成axf文件。步驟二:點擊Step單步運行,觀察Registers窗口的Current寄存器和相應(yīng)的Memory單元發(fā)生了什么變化,分析變化的原因。步驟三: debug調(diào)試,注意在菜單欄Debug中選項Memory Map如圖做相關(guān)的內(nèi)存可讀寫映射.否則在程序調(diào)試的過程中會遇到地址訪問的可讀寫權(quán)限的錯誤 本章小節(jié)本章主要的工作就是對啟動代碼的解讀,以期望在理解ARM 硬件的基礎(chǔ)上,對ARM的工作模式以及運行的狀況有一個深入的理解。幾乎每個 S3C2440 的應(yīng)用工程都包含啟動代碼,通常是在2440init.s 匯編文件中,特殊功能寄存器定義在2440addr.s,memory bank 配置在mencfg.s,還有系統(tǒng)的選項等在option.s文件中。244

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論