




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1、引言2、匯編基礎2.1、偽操作GET 偽操作類似于C 語言里面的include,是將一個源文件包含到當前源文件中,并將被包含的文件在其當前位置進行匯編處理。IMPORT偽操作相當于C 語言中的extern 聲明,它告訴編譯器當前的符號不再本源文件中定義,而是在其他源文件中定義,在本源文件中可能引用該符號。AERA 偽操作用于定義一個代碼或者數據段。ASSERT在匯編編譯器對匯編程序的掃描中,如果ASSERT 中條件不成立,ASSERT 偽操作將報告錯誤信息。2.2、匯編指令LDR偽指令將一個32 位的常數或者一個地址值讀取到寄存器中。 BL跳轉指令,L 決定是否保存返回地址。MRS用于將狀
2、態寄存器的內容傳送到通用寄存器中。MSR用于將通用寄存器的內容或一個立即數傳送到狀態寄存器中。 LDM和STM分別為批量Load/Store內存訪問指令。FD為滿遞減數據棧。3、啟動代碼功能模塊分解啟動代碼主要是在主程序運行之前初始化系統硬件及軟件的運行環境,它的主要功能包括以下的幾個方面:* 建立中斷向量表* 初始化系統堆棧* 應用程序執行環境初始化* 跳轉至主函數3.1、系統堆棧初始化ARM有7種模式:* 用戶模式* 快速中斷模式* 中斷模式* 管理模式* 中止模式* 未定義模式* 系統模式系統堆棧的初始化主要是給各個處理器模式分配堆棧空間。堆棧是為中斷或程序跳轉服務的,當發生中斷或程序跳
3、轉時,需要將當前處理器的狀態及一些參數保持在堆棧中,當中斷處理完畢以后或程序執行完后返回時,再將堆棧保存的現場數據進行恢復,以保證原來的程序正確運行。USERMODE EQU 0x10 ;用戶模式FIQMODE EQU 0x11 ;快速中斷模式IRQMODE EQU 0x12 ;中斷模式SVCMODE EQU 0x13 ;監管模式ABORTMODE EQU 0x17 ;異常中斷模式UNDEFMODE EQU 0x1b ;未定義模式MODEMASK EQU 0x1f ;模式掩碼NOINT EQU 0xc0 ;取消中斷;設置工作模式的堆棧的起始地址;在option.inc 中定義了_STACK_B
4、ASEADDRESS EQU 0x33ff8000UserStack EQU (_STACK_BASEADDRESS-0x3800 ;堆棧空間0x33ff4800 SVCStack EQU (_STACK_BASEADDRESS-0x2800 ;堆棧空間0x33ff5800 UndefStack EQU (_STACK_BASEADDRESS-0x2400 ;堆棧空間0x33ff5c00AbortStack EQU (_STACK_BASEADDRESS-0x2000 ;堆棧空間0x33ff6000IRQStack EQU (_STACK_BASEADDRESS-0x1000 ;堆棧空間0x3
5、3ff7000 FIQStack EQU (_STACK_BASEADDRESS-0x0 ;堆棧空間0x33ff8000 堆棧初始化的順序決定系統最后運行在哪種處理器模式,最后初始化哪種模式的堆棧,系統就運行在哪種模式。InitStacksmrs r0,cpsrbit r0,r0,#MODEMASK先通過mrs 指令將狀態寄存器值讀取到r0,然后將r0 對應的處理器模式為修改成未定義指令中止模式,再寫回狀態寄存器使處理器真正切換到未定義指令中止模式,這就是“讀出-修改-寫回”的方式來修改狀態寄存器的內容。最后將該模式的堆棧指針sp 指向UndefStack 定義的地址,其他的模式操作方式也是一
6、樣的。orr r1,r0,#UNDEFMODE|NOINTmsr cpsr_cxsf,r1 ;UndefModeldr sp, = UndefStack ;UndefStack=0x33FF_5C00orr r1,r0,#ABORTMODE|NOINTmsr cpsr_cxsf,r1 ;AbortModeldr sp,=AbortStack ;AbortStack=0x33FF_60003.2、建立中斷向量表中斷向量表一般位于啟動代碼的開始部分,它是用戶程序與啟動代碼之間以及啟動代碼的各部分之間聯系的紐帶。它由一個一個的跳轉函數組成,它就象一個普通的散轉函數,只不過散轉的過程中有硬件機制參與,
7、當系統發生異常時,ARM 處理器會通過硬件機制強制將PC 指針指向中斷向量表中對應的異常跳轉函數存儲的地址,然后程序會跳轉到相應的中斷服務程序去執行。b ResetHandler ;復位異常,開發板上電或復位時進入0x00b HandlerUndef ;未定義異常,遇到無法識別的指令時0x04b HandlerSWI ;軟中斷異常0x08b HandlerPabort ;指令預取錯誤時進入0x0cb HandlerDabort ;數據訪問不能完成時進入0x10b . ;保留 0x14b HandlerIRQ ;發生IRQ 中斷時進入0x18b HandlerFIQ ;發生FIQ 中斷時進入0x
8、1c這些是從0x0 地址開始的連續32 字節的各個中斷入口,每個中斷占用4 字節的存儲空間,這些中斷入口地址是固定的,類似于51 單片機的入口。建立異常向量表需要開辟一塊大小為8*4 字節的空間,每個異常占據4 個字節的空間,這4 個字節的空間包含的是一個跳轉指令,通過這條指令使PC 指向相應的異常處理函數的入口,具體的處理函數是在別處實現的。下面這個宏是用于第一次查表過程的實現中斷向量的重定向,比如當產生FIQ 的時候,PC 先指向FIQ 的中斷入口地址0x1c(強制),b HandlerFIQ 執行跳轉指令到HandlerFIQ 標號處, 展開宏命令, 將$HandlerLabel HAN
9、DLER $HandleLabel 替換成HandlerFIQ HANDLER HandleFIQ。MACRO$HandlerLabel HANDLER $HandleLabel$HandlerLabelsub sp,sp,#4;減少sp(用于存放轉跳地址實質上是在計算返回地址 stmfd sp!,r0 ;SP 先遞減,再將r0 壓棧ldr r0,=$HandleLabel;將HandleXXX 的標號地址傳給r0ldr r0,r0 ;把HandleXXX 所指向的內容(也就是中斷程序的入口放入r0 str r0,sp,#4 ;把中斷服務程序(ISR壓入棧.ldmfd sp!,r0,pc;用出
10、棧的方式恢復r0 的原值和為pc 設定新值(完成了到ISR 的轉跳MEND3.3、程序的入口地址初始化程序中必須指明入口地址,因為處理器復位(仿真時,裝載image)后PC 要找到入口開始執行代碼,當各種異常或是中斷產生的時候也要找到各個異常的入口開始執行代碼。從這里開始就是真正的代碼入口了!AREA Init,CODE,READONLY ;這表明下面的是一個名為Init 的代碼段 ENTRY ;定義程序的入口(調試用ENTRY 只是定義一個普通的入口點,且在程序中可以多處定義,如果要使用它作為整個映像文件的唯一入口點,還需要設置鏈接器中的相關選項。ASSERT :DEF:ENDIAN_CHA
11、NGE ENDIAN_CHANGE ;如果已經定義了ENDIAN_CHANGE,則判斷FALSEASSERT :DEF:ENTRY_BUS_WIDTH ;判斷ENTRY_BUS_WIDTH 是否已定義 ENTRY_BUS_WIDTH=32 ;若已經定義了ENTRY_BUS_WIDTH,則判斷是否為32b ChangeBigEndian ;DCD 0xea000007 ENTRY_BUS_WIDTH=16andeq r14,r7,r0,lsl #20 ;DCD 0x0007ea00;也是b ChangeBigEndian 指令,;只是由于總線不一樣而取機器碼的順序不一樣 ENTRY_BUS_WI
12、DTH=8streq r0,r0,-r10,ror #1 ;DCD 0x070000ea,跟上面一條類似 | ;如果沒有定義總線寬度,則跳轉到復位中斷b ResetHandlerASSERT 是斷言偽指令,語法是:ASSERT +邏輯表達式 ,def 是邏輯偽操作符,格式為: :DEF:label,作用是:判斷label 是否定義過。這段程序開始使用了ASSERT 偽操作判斷ENDIAN_CHANGE 是否被定義,如果沒有被定義,ASSERT 偽操作將報告錯誤類型,并終止匯編。上面的四句指令能且只能執行一句,并且前三句若執行跳轉后處理程序的最后一句也是b ResetHandler。“ ” 相當
13、于 if ,“ | ”相當于else,“ ” 相當于endif。這里還要對大小端做一下解釋,因為ARM 的一個寄存器占用4 個字節,所以必須要設定數據存放的順序,平常的寫10 進制的習慣是高位放高字節,地位放低字節;這也是小端的存放方式。大端的方式是高字節放在低位,低字節放在高位。舉例來看:若將0xffffff 賦值給0x4c000000。Address 0 1 2 3 4 5 6 7 8 9 a b c d e f0x4c000000 FF FF FF 00 -這是小端表示0x4c000000 00 FF FF FF -這是大端表示3.4、看門狗及中斷的禁止上電和復位后,程序開始從位于0x0
14、 執行b ResetHandler 程序跳轉到這里執行,將看門狗,中斷之類的程序關掉,省得他們來打擾初始化程序的進行。ResetHandlerldr r0,=WTCON ;禁止看門狗ldr r1,=0x0str r1,r0WTCON 為看門狗控制寄存器,此處將其寫入0x0,就是禁止它的所有功能,包括定時器定時,溢出中斷及溢出復位。ldr r0,=INTMSKldr r1,=0xffffffff ;all interrupt disablestr r1,r0ldr r0,=INTSUBMSKldr r1,=0x7fff ;all sub interrupt disablestr r1,r0INT
15、MSK 為中斷屏蔽寄存器,寫入0xffffffff,就是禁止所有的中斷產生,因為中斷向量表還未初始化,如果此時產生中斷會使程序進入未知的狀態而跑飛。因為外設的中斷太多,INTMSK 不夠用,還需要INTSUBMSK 來將剩余的中斷源也禁止掉。3.5、系統時鐘初始化ldr r0,=LOCKTIME ;設置pll 鎖定時間ldr r1,=0xffffffff ;將0xffffffff 賦值給r1str r1,r0 ;將r1 寄存器的值保存到r0 指向的內存中LOCKTIME 為PLL 鎖定時間計數寄存器,重新設定分頻值時,PLL 進入鎖定,輸出穩定頻率的時鐘需要一定的時間。這里設置成默認的值,以滿
16、足鎖定的要求。 PLL_ON_STARTldr r0,=CLKDIVN ;用于設定FCLK,HCLK,PCLK 的比例ldr r1,=CLKDIV_VAL ;CLKDIV_VAL 是在option.inc 里定義的,默認為7str r1,r0 ;設置分頻數ldr r0,=UPLLCON ;設置UPLL 的輸出頻率ldr r1,=(U_MDIV<<12+(U_PDIV<<4+U_SDIV ;USB PLL CONFIG str r1,r0nop ;在UPP 設定之后,必須等待7 個時鐘的延遲,設定才會有效 nopnopnopnopnopnopldr r0,=MPLLCON
17、 ;設置主時鐘鎖相環寄存器ldr r1,=(M_MDIV<<12+(M_PDIV<<4+M_SDIV ;設置MPLL 的分頻系數str r1,r03.6、初始化內存控制器初始化內存控制器其實就是對S3C2440 的memory bank 進行設置,使其擴展的存儲器或外部設備能夠被處理器通過內存控制器正確讀寫。由于S3C2440 的最終應用程序是在SDRAM(bank6)中運行,并與C 語言變量等的用戶數據,各種模式的堆棧,中斷向量表,都被定位在SDRAM 的空間,所以它必須在涉及這些處理之前完成初始化工作。SMRDATA DATADCD(0+(B1_BWSCON<<4+(B2_BWSCON<<8+(B3_BWSCON<<12+(B4_BWSCON<<16+(B5_BWSCON<<20+(B6_BWSCON<<24+(B7_BWSCON<<28 這段程序的開始使用DATA 偽操作指明SMRDATA 標號處作為一段數據,而非代碼。接下來就用DCD 分配一個字的內存單元,一共13 個字數據。adrl r0, SMRDATAldr r1,=BWSCON ;BWSCON Address, 在2440addr.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《戰略更新課件:引領企業未來》
- 2025年江西省南昌市中考物理一調試卷(解析版)
- 合同終止時的員工權益
- 數據庫技術COMPUTER課件
- 鐵路橋隧無損檢測任務三隧道檢測的內容課件
- 鐵路市場營銷市場定位的涵義課件
- 《Python程序設計基礎》課件 第七章 面向對象編程
- 鐵路信號與通信設備接發列車工作31課件
- 中醫灸法技能培訓班課件
- 中專文化課課件
- 水上交通整治方案
- 醫德醫風工作考核總結通用五篇
- 提高PICC導管維護規范率成果匯報
- 公司安環部績效考核實施管理方法
- 建筑施工現場安全培訓課件
- 建筑施工升降機安裝使用拆卸安全技術規程
- 資產評估常用數據與參數手冊
- 2023年某路橋工程有限公司生產安全事故綜合應急預案
- 靜壓樁機安裝拆卸方案
- 電腦故障維修
- 2023山東春季高考數學真題(含答案)
評論
0/150
提交評論