




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第五講ARM微處理器的編程模型(二)
2023/2/42023/2/42主要內(nèi)容3.1引言3.2嵌入式處理器的特點3.3嵌入式處理器的分類3.4嵌入式處理器的發(fā)展趨勢3.5嵌入式處理器的選擇原則3.6ARM微處理器概述3.7ARM微處理器的編程模型3.8ARM微處理器的指令系統(tǒng)實驗時間(實驗樓0912)28號補6號的課(4班下午實驗)(第4周周日)9號(2班下午1:00實驗)(第5周周四)10號(3班下午1:00實驗)(第5周周五)11號補7號的課(1班下午1:00實驗)(第5周周六)2023/2/432023/2/443.7ARM微處理器的編程模型3.7.1ARM微處理器的工作模式3.7.2ARM微處理器的工作狀態(tài)3.7.3ARM體系結(jié)構(gòu)的寄存器組織3.7.4ARM微處理器的數(shù)據(jù)類型3.7.5ARM微處理器的異常狀態(tài)2023/2/453.7.4ARM微處理器的數(shù)據(jù)類型字、半字、字節(jié)字(Word):字的長度為32位半字(Half-Word):半字的長度為16位字節(jié)(Byte):字節(jié)的長度為8位ARM微處理器要求自然對界字需要4字節(jié)對齊地址的低兩位為0半字需要2字節(jié)對齊地址的最低位為0字節(jié)則是任意地址對齊
2023/2/463.7.4ARM微處理器的數(shù)據(jù)類型(續(xù))邊界對齊(數(shù)據(jù)存儲)如果一個數(shù)據(jù)是從偶地址開始的連續(xù)存儲,那么它就是半字對齊如果一個數(shù)據(jù)是以能被4整除的地址開始的連續(xù)存儲,那么它就是字對齊方式半字對齊字對齊地址0x000000000x000000020x00000004……0x000000000x000000040x00000008……特征Bit0=0Bit1=0,Bit0=02023/2/473.7.4ARM微處理器的數(shù)據(jù)類型(續(xù))ARM體系結(jié)構(gòu)的存儲結(jié)構(gòu)(編址以字節(jié)為單位)從零字節(jié)到三字節(jié)放置第一個存儲的字數(shù)據(jù),從第四個字節(jié)到第七個字節(jié)放置第二個存儲的字數(shù)據(jù),依次排列。那么,字內(nèi)數(shù)據(jù)如何存儲?作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB(232字節(jié))受到物理地址線的限制,一般實際嵌入式處理器最大尋址空間為幾百兆2023/2/483.7.4ARM微處理器的數(shù)據(jù)類型(續(xù))ARM體系結(jié)構(gòu)可以用兩種方法存儲字數(shù)據(jù)大端格式(Bigendian)(8051)字數(shù)據(jù)的高字節(jié)存儲在低地址中字數(shù)據(jù)的低字節(jié)存放在高地址中小端格式(Littleendian)(X86)與大端存儲格式相反低地址中存放的是字數(shù)據(jù)的低字節(jié)高地址中存放的是字數(shù)據(jù)的高字節(jié)2023/2/49大端格式(Bigendian)2023/2/410小端格式(Littleendian)2023/2/411舉例1程序LDRR0,
=0x11223344LDRR1,=0x00000100STRR0,[R1]LDRBR2,[R1]R2=?答案小端模式:R2=0x44大端模式:R2=0x11LDR偽指令,使用以下項之一加載寄存器:一個32位常數(shù)值一個地址LDR偽指令的形式:LDR
Rn,=expr;=而非#2023/2/412舉例2structx{
chara;
intb;
charc;
shortd;};問:在缺?。ㄗ匀粚纾┣闆r下,上述結(jié)構(gòu)需要多少存儲空間(小端格式)?12個字節(jié)強制對界編譯控制:匯編align(1/2/4/8)unalignC語言#pragmapack(1/2/4/8)2023/2/4133.7.5ARM微處理器的異常狀態(tài)當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常(Exception)例如處理一個外部的中斷請求在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行處理器允許多個異常同時發(fā)生,它們將會按固定的優(yōu)先級進行處理中斷優(yōu)先級中斷嵌套(可能導(dǎo)致堆棧溢出)2023/2/414異常類型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時,產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行未定義指令當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時,產(chǎn)生未定義指令異常。可使用該異常機制進行軟件仿真軟件中斷該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C制實現(xiàn)系統(tǒng)功能調(diào)用指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問,存儲器會向處理器發(fā)出中止信號,但當(dāng)預(yù)取的指令被執(zhí)行時,才會產(chǎn)生指令預(yù)取中止異常數(shù)據(jù)中止若處理器數(shù)據(jù)訪問的地址不存在,或該地址不允許當(dāng)前指令訪問時,產(chǎn)生數(shù)據(jù)中止異常IRQ(外部中斷請求)當(dāng)處理器的外部中斷請求引腳有效,且CPSR中的I位為0時,產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請求中斷服務(wù)FIQ(快速中斷請求)當(dāng)處理器的快速中斷請求引腳有效,且CPSR中的F位為0時,產(chǎn)生FIQ異常2023/2/4153.7.5ARM微處理器的異常狀態(tài)(續(xù))1對異常的響應(yīng)2從異常返回3各類異常的具體描述4異常向量5異常優(yōu)先級(CPU內(nèi)部)6應(yīng)用程序中的異常處理2023/2/4161對異常的響應(yīng)當(dāng)出現(xiàn)異常后,ARM處理器會執(zhí)行以下操作1將CPSR復(fù)制到相應(yīng)的SPSR中2對CPSR進行設(shè)置根據(jù)異常類型,強制設(shè)置CPSR的工作模式位設(shè)置中斷禁止位,以禁止中斷發(fā)生如果處理器處于Thumb狀態(tài),則切換到ARM狀態(tài)3將下一條指令的地址存入相應(yīng)鏈接寄存器LRLR中保存的是下一條要取指令的地址(一般情況下,當(dāng)前執(zhí)行指令地址+4)4強制PC從相關(guān)的異常向量地址取一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處LDRPC,IRQ_Address2023/2/4171對異常的響應(yīng)(續(xù))ARM處理器對異常的響應(yīng)過程用偽碼描述為SPSR_<Exception_Mode>=CPSRCPSR[4:0]=ExceptionModeNumberCPSR[5]=0 ;切換到ARM工作狀態(tài)If<Exception_Mode>==ResetorFIQthen
CPSR[6]=1 ;禁止新的FIQ異常
CPSR[7]=1 ;禁止新的IRQ異常R14_<Exception_Mode>=ReturnLinkPC=ExceptionVectorAddress
CPU自動完成2023/2/418程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組程序在系統(tǒng)模式下運行用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進入ARM狀態(tài))設(shè)置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存入PC,實現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對該位不關(guān)心2023/2/4192從異常返回異常處理完畢之后,ARM微處理器會執(zhí)行以下幾步操作從異常返回1、將SPSR復(fù)制回CPSR中2、將鏈接寄存器LR的值送到PC中注意復(fù)位異常處理程序不需要返回編程(指令)完成2023/2/420在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對該位不關(guān)心2023/2/4213各類異常的具體描述復(fù)位的響應(yīng)過程SPSR_svc=CPSR(無意義)CPSR[4:0]=0b10011;管理模式CPSR[5]=0 ;切換到ARM工作狀態(tài)CPSR[6]=1 ;禁止新的FIQ異常
CPSR[7]=1 ;禁止新的IRQ異常R14_svc=ReturnLink(無意義)PC=0x00000000
LDRPC,HandleReset2023/2/4223各類異常的具體描述(續(xù))UndefinedInstruction(未定義指令)當(dāng)ARM處理器遇到不能處理的指令時,會產(chǎn)生未定義指令異常采用這種機制,可以通過軟件仿真擴展ARM或Thumb指令集(程序跑飛)在未定義指令處理程序中執(zhí)行以下指令返回MOVSPC,R14_und恢復(fù)PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令指令加后綴“S”且目的寄存器為PC,則自動復(fù)制。
2023/2/4233各類異常的具體描述(續(xù))未定義指令異常的響應(yīng)過程SPSR_und=CPSRCPSR[4:0]=0b11011CPSR[5]=0 ;切換到ARM工作狀態(tài)//
CPSR[6]保持不變
CPSR[7]=1 ;禁止新的IRQ異常R14_und=ReturnLinkPC=0x00000004LDRPC,Undef_Address2023/2/4243各類異常的具體描述(續(xù))SoftwareInterrupt(軟件中斷)軟件中斷指令(SWI)用于進入管理模式,常用于請求執(zhí)行特定的管理功能使用SWI來為編程者提供各種例程在軟件中斷處理程序中執(zhí)行以下指令返回MOVS
PC,R14_svc恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc)的值,并返回到SWI的下一條指令2023/2/4253各類異常的具體描述(續(xù))SWI的響應(yīng)過程SPSR_svc=CPSRCPSR[4:0]=0b10011CPSR[5]=0 ;切換到ARM工作狀態(tài)//
CPSR[6]保持不變
CPSR[7]=1 ;禁止新的IRQ異常R14_svc=ReturnLinkPC=0x00000008
LDRPC,SWI_Address2023/2/4263各類異常的具體描述(續(xù))ABORT(中止)產(chǎn)生中止異常意味著對存儲器的訪問失敗中止異常包括兩種類型:指令預(yù)取中止:發(fā)生在指令預(yù)取時數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問時當(dāng)確定中止原因后,Abort處理程序執(zhí)行以下指令返回SUBSPC,R14_abt,#4 ;指令預(yù)取中止SUBSPC,R14_abt,#8 ;數(shù)據(jù)中止恢復(fù)PC(從R14_abt)和CPSR(從SPSR_abt)的值,并重新執(zhí)行產(chǎn)生中止的指令(返回當(dāng)前指令)2023/2/4273各類異常的具體描述(續(xù))中止異常的響應(yīng)過程SPSR_abt=CPSRCPSR[4:0]=0b10111CPSR[5]=0 ;切換到ARM工作狀態(tài)//
CPSR[6]保持不變
CPSR[7]=1 ;禁止新的IRQ異常R14_abt=ReturnLinkPC=0x0000000c/0x00000010
LDRPC,PAbt_Address
LDRPC,DAbt_Address2023/2/4283各類異常的具體描述(續(xù))IRQ(InterruptRequest)IRQ異常屬于正常的中斷請求,IRQ優(yōu)先級低于FIQ若CPSR的I位置1,則禁止IRQ中斷,若CPSR的I位清零,處理器會在指令執(zhí)行完之前檢查IRQ的輸入注意只有在特權(quán)模式下才能改變I位的狀態(tài)IRQ處理程序執(zhí)行以下指令返回SUBSPC,R14_irq,#4該指令將寄存器R14_irq的值減去4后,復(fù)制到程序計數(shù)器PC中,同時將SPSR_irq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令2023/2/4293各類異常的具體描述(續(xù))IRQ的響應(yīng)過程SPSR_irq=CPSRCPSR[4:0]=0b10010CPSR[5]=0 ;切換到ARM工作狀態(tài)//
CPSR[6]保持不變
CPSR[7]=1 ;禁止新的IRQ異常R14_irq=ReturnLinkPC=0x00000018LDRPC,IRQ_Address2023/2/4303各類異常的具體描述FIQ(FastInterruptRequest)FIQ異常是為了支持數(shù)據(jù)傳輸或者通道處理而設(shè)計的若將CPSR的F位置1,則禁止FIQ中斷,若將CPSR的F位清零,處理器會在指令執(zhí)行時檢查FIQ的輸入注意只有在特權(quán)模式下才能改變F位的狀態(tài)FIQ處理程序執(zhí)行以下指令返回SUBSPC,R14_fiq,#4該指令將寄存器R14_fiq的值減去4后,復(fù)制到程序計數(shù)器PC中,同時將SPSR_fiq寄存器的內(nèi)容復(fù)制到CPSR中,并返回到引起中斷的下一條指令2023/2/4313各類異常的具體描述(續(xù))FIQ的響應(yīng)過程SPSR_fiq=CPSRCPSR[4:0]=0b10001CPSR[5]=0 ;切換到ARM工作狀態(tài)CPSR[6]=1 ;禁止新的FIQ異常
CPSR[7]=1 ;禁止新的IRQ異常R14_fiq=ReturnLinkPC=0x0000001cLDRPC,FIQ_Address2023/2/4323各類異常的具體描述(續(xù))返回指令R14_x先前的值BLMOVPC,R14下一條指令地址未定義指令MOVSPC,R14_und下一條指令地址SWIMOVSPC,R14_svc下一條指令地址指令預(yù)取SUBSPC,R14_abt,#4下一條指令地址數(shù)據(jù)預(yù)取SUBSPC,R14_abt,#8下一條指令地址+4IRQSUBSPC,R14_irq,#4下一條指令地址+4FIQSUBSPC,R14_fiq,#4下一條指令地址+4復(fù)位N/A-2023/2/4334異常向量(ExceptionVectors)地址異常進入模式0x0000,0000復(fù)位管理模式0x0000,0004未定義指令未定義模式0x0000,0008軟件中斷管理模式0x0000,000C中止(預(yù)取指令)中止模式0x0000,0010中止(數(shù)據(jù))中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQ2023/2/4344異常向量(續(xù));ExceptionVectors;MappedtoAddress0.VectorsLDRPC,Reset_Address
LDRPC,Undef_Address
LDRPC,SWI_Address
LDRPC,PAbt_Address
LDRPC,DAbt_Address
NOP
;ReservedVector
LDRPC,IRQ_Address
LDRPC,FIQ_Address2023/2/4355異常優(yōu)先級(ExceptionPriorities)優(yōu)先級異常1(最高)復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取指令中止6(最低)未定義指令、SWI2023/2/4366應(yīng)用程序中的異常處理應(yīng)用程序首先要進行異常處理當(dāng)系統(tǒng)運行時,異??赡軙S時發(fā)生,因此要保證在發(fā)生異常時ARM處理器不至于處于未知狀態(tài)采用的方式是在異常向量表中的特定位置放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序異常處理過程當(dāng)發(fā)生異常時,程序計數(shù)器PC會被強制(自動)設(shè)置為對應(yīng)的異常向量,從而(自動)跳轉(zhuǎn)到異常處理程序,當(dāng)異常處理完成以后,返回到主程序繼續(xù)執(zhí)行2023/2/437/***********************************************程序段說明:以下函數(shù)為各異常模式服務(wù)子程序。設(shè)成死循環(huán)是為調(diào)試用,一旦發(fā)生此類異常,程序便跳入異常模式服務(wù)子程序,終止程序運行。*************************************************/voidHaltUndef(void) //未定義——程序跑飛{Uart_Printf(0,"theprogrammishaltUndefed");
while(1);}voidHaltSwi(void
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級上冊數(shù)學(xué)教案-角的初步認識 (6)-西師大版
- 2025年寵物領(lǐng)養(yǎng)合同模板電子版
- 三年級下冊數(shù)學(xué)教案-1.1 兩位數(shù)乘整十?dāng)?shù)的口算-蘇教版
- 薪酬培訓(xùn)服務(wù)協(xié)議書(2篇)
- 2023年生麻生產(chǎn)投資申請報告
- 2024年局域網(wǎng)安全系統(tǒng)項目資金申請報告
- 2025年惠州城市職業(yè)學(xué)院單招職業(yè)傾向性測試題庫學(xué)生專用
- 2025年廣東省安全員B證考試題庫及答案
- 2025年湖北省咸寧市單招職業(yè)傾向性測試題庫一套
- 二零二五年度煤炭開采居間合同與智能化礦山建設(shè)協(xié)議
- 牙周牙髓聯(lián)合病變治療
- 機場食品配送應(yīng)急處理方案
- 醫(yī)院培訓(xùn)課件:《黃帝內(nèi)針臨床運用》
- 語文新課標(biāo)“整本書閱讀”深度解讀及案例
- 地質(zhì)隊安全培訓(xùn)
- 2024至2030年中國毛絨玩具數(shù)據(jù)監(jiān)測研究報告
- 建筑復(fù)工復(fù)產(chǎn)安全培訓(xùn)
- GB 21258-2024燃煤發(fā)電機組單位產(chǎn)品能源消耗限額
- 八年級上學(xué)期語文12月月考試卷
- 醛固酮增多癥與原發(fā)性醛固酮增多癥概述
- 廣東省2024年普通高中學(xué)業(yè)水平合格性考試語文仿真模擬卷01(解析版)
評論
0/150
提交評論