ARM教程專業(yè)知識講座_第1頁
ARM教程專業(yè)知識講座_第2頁
ARM教程專業(yè)知識講座_第3頁
ARM教程專業(yè)知識講座_第4頁
ARM教程專業(yè)知識講座_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ARMLinuxTraining(2)

ARM體系構造與編程模型第1頁ARM介紹ARM是AdvancedRISCMachines縮寫,它是一家微處理器行業(yè)著名公司,該公司設計了大量高性能、便宜、耗能低RISC(精簡指令集)處理器。ARM公司特點是只設計芯片,而不生產(chǎn)。它將技術授權給世界上許多著名半導體、軟件和OEM廠商,并提供服務。第2頁ARM授權模型將技術授權給其他芯片廠商形成各具特色ARM芯片...第3頁ARM體系構造

ARM處理器為RISC芯片,其簡單構造使ARM內(nèi)核非常小,這使得器件功耗也非常低。它具有典型RISC特點:大、統(tǒng)一寄存器文獻裝載/保存構造,數(shù)據(jù)處理操作只針對寄存器內(nèi)容,而不直接對存放器進行操作簡單尋址模式統(tǒng)一和固定長度指令域,簡化了指令譯碼第4頁ARM體系構造版本ARM體系構造從最初開發(fā)到目前有了巨大改善,并仍在完善和發(fā)展。為了清楚體現(xiàn)每個ARM應用實例所使用指令集,ARM公司定義了7種主要ARM指令集體系構造版本,以版本號v1~v7表達。第5頁ARM-v1

該版本ARM體系構造,只有26位尋址空間,沒有商業(yè)化,其特點為:基本數(shù)據(jù)處理指令(不包括乘法);字節(jié)、字和半字加載/存放指令;具有分支指令,包括在子程序調(diào)用中使用分支和鏈接指令;在操作系統(tǒng)調(diào)用中使用軟件中斷指令。第6頁ARM-v2同樣為26位尋址空間,目前已經(jīng)廢棄不再使用,它相對v1版本有下列改善:具有乘法和乘加指令;支持協(xié)處理器;迅速中斷模式中兩個以上分組寄存器;具有原子性加載/存放指令SWP和SWPB。第7頁ARM-v3尋址范圍擴展到32位(也基本廢棄),具有獨立程序:具有乘法和乘加指令;支持協(xié)處理器;迅速中斷模式中具有兩個以上分組寄存器;具有原子性加載/存放指令SWP和SWPB。第8頁ARM-v4不再為了與此前版本兼容而支持26位體系構造,并明確了哪些指令會引發(fā)未定義指令異常發(fā)生,它相對v3版本作了下列改善:半字加載/存放指令;字節(jié)和半字加載和符號擴展指令;具有能夠轉換到Thumb狀態(tài)指令;顧客模式寄存器新特權處理器模式。第9頁ARM-v5在v4版本基礎上,對指令定義進行了必要修正,對v4版本體系構造進行了擴展并增加了指令,如下:改善了ARM/Thumb狀態(tài)之間切換效率;允許非T變量和T變量同樣,使用相同代碼生成技術;增加計數(shù)前導零指令和軟件斷點指令;對乘法指令如何設置標志作了嚴格定義。第10頁ARM-v6ARMArchitectureVersion6contains81newinstructionsSeveraladditionalclassesofinstructionPackeddataSIMD(SingleInstructionMultipleData)“SumofAbsoluteDifference”operationMoresaturatedarithmeticSupportformixedendiannessExceptionentryandreturninstructionsUnlikesomepreviousextensionstotheinstructionset(e.g.BLXoffset),theV6extensioninstructionsaremainlyconditionalAllareconditionalexceptwhereindicatedinthefollowingtext第11頁ARM-v7新基于ARMv7架構處理器將為系統(tǒng)設計者提供更多選擇,能夠為應用目標選擇更合適CPU。同步提供性能、功耗控制、代碼大小以及芯片成本方面優(yōu)化。采取了Thumb-2技術,比32位代碼減少使用31%內(nèi)存,減小系統(tǒng)開銷,比Thumb技術增加38%性能減少了對文字池訪問頻度,這更使得設計者在只實現(xiàn)一種TCMRAM時,性能惡化降到最低第12頁4THalfwordandsignedhalfword/bytesupportSystemmodeThumbinstructionsetImprovedARM/ThumbInterworkingCLZSaturatedarithmeticDSPmultiply-accumulateinstructionsExtensions:Jazelle(5TEJ)5TE6SIMDInstructionsMulti-processingV6MemoryarchitectureUnaligneddatasupportExtensions:Thumb-2(6T2)TrustZone(6Z)7Thumb-2CoreSight7A(Applications)NEON7R(Real-time)Hardwaredivide7M(Microcontroller)Thumb-2ONLYARM體系發(fā)展第13頁ARM處理器和體系構造 Processorcore ArchitectureARM7TDMIfamily v4TARM720T,ARM740TARM9TDMIfamily v4TARM920T,ARM922T,ARM940TARM9Efamily v5TE,v5TEJARM946E-S,ARM966E-S,ARM926EJ-SARM10Efamily v5TE,v5TEJARM1020E,ARM1022E,ARM1026EJ-SARM11family v6ARM1136J(F)-S ARM1156T2(F)-S v6T2ARM1176JZ(F)-S v6ZCortexfamilyARMCortex-A8 v7AARMCortex-R4 v7RARMCortex-M3 v7M第14頁ARM處理器核介紹ARM公司開發(fā)了很多系列ARM處理器核,目前最新系列是ARM11。目前應用比較廣泛系列是:ARM7ARM9ARM9EARM10SecurCoreXscaleCortex第15頁ARM7系列支持高密度16位Thumb指令集;支持片上調(diào)試;支持64位乘法;支持EmbededICE觀測硬件;ARM7TDMI可綜合(synthesizable)版本(軟核),對應用工程師來說其編程模型與ARM7TDMI一致;ARM7TDMI-S第16頁處理器執(zhí)行指令典型步驟從存放器讀取指令(fetch)譯碼以鑒別它是屬于哪一條指令(dec)從指令中提取指令操作數(shù)(這些操作數(shù)往往存在于寄存器中)(reg)將操作數(shù)進行組合以得到成果或存放器地址(ALU)假如需要,則訪問存放器以存放數(shù)據(jù)(mem)將成果寫回到寄存器堆(res)第17頁3級流水線指令執(zhí)行過程取指:從存放器裝載指令;譯碼:對剛裝載指令進行識別;執(zhí)行:處理指令并把成果寫回對應寄存器取指譯碼執(zhí)行指令從存放器中取出對指令使用寄存器進行譯碼從寄存器組中讀出寄存器,執(zhí)行移位和ALU操作,寄存器被寫回到寄存器組中第18頁3級流水線ARM組織第19頁流水線使用實例ADDr1r2SUBr3r2CMPr1r3在第一種周期,內(nèi)核從存放器取出指令ADD;在第二個周期,內(nèi)核取出指令SUB,同步對ADD譯碼;在第三個周期,ADD被執(zhí)行,而SUB被譯碼,同步又取出CMP指令。第20頁ARM9/E系列第21頁5級流水線ARM組織第22頁ARM95級流水線InstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumb

InstDecodeRegSelectRegReadShiftALURegWriteThumb?ARM

decompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI第23頁ARM10E系列第24頁ARM106級流水線InstructionFetchShift+ALU

+MultiplyRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARMorThumb

InstDecodeARM10Shift+ALUMemoryAccessRegWriteFETCHDECODEEXECUTEMEMORYWRITERegReadMultiplyMultiplyAddBranchPredictionInstructionFetchISSUEMemoryAccessARMorThumbInstructionDecode第25頁ARM11系列第26頁ARM體系構造支持數(shù)據(jù)類型ARM處理器支持下列數(shù)據(jù)類型字節(jié)8位半字16位(必須分派為占用2個字節(jié))字32位(必須分派為占用4個字節(jié))Byteaccess

(bytealigned)Halfwordaccess(halfwordaligned)Wordaccess(wordaligned)3210765402468ace089abcdef48c第27頁數(shù)據(jù)類型注意事項第28頁浮點數(shù)據(jù)類型浮點運算使用在ARM硬件指令集中未定義數(shù)據(jù)類型ARM公司在協(xié)處理器指令空間定義了一系列浮點指令。一般這些指令所有通過未定義指令異常在軟件中實現(xiàn)ARM公司還提供了用C語言編寫浮點庫作為ARM浮點指令集替代辦法第29頁存放器大/小端從軟件角度看,內(nèi)存相對于一種大字節(jié)數(shù)組,其中每個數(shù)組元素(字節(jié))都是可尋址。ARM支持兩種內(nèi)存模式:大端模式(big-endian)/小端模式(little-endian)第30頁大小端實例大端模式小端模式第31頁處理器狀態(tài)ARM7TDMI處理器有兩種操作狀態(tài):ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行是字方式ARM指令;Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式Thumb指令。第32頁處理器狀態(tài)轉換使用BX指令將ARM7TDMI內(nèi)核操作狀態(tài)在ARM狀態(tài)和Thumb狀態(tài)之間進行切換,程序如下:;從Arm狀態(tài)切換到Thumb狀態(tài)LDRR0,=Lable+1BXR0;從Thumb狀態(tài)切換到ARM狀態(tài)LDRR0,=LableBXR0地址最低位為1,表達切換到Thumb狀態(tài)地址最低位為0,表達切換到ARM狀態(tài)跳轉地址標號第33頁ARM處理器模式ARM體系構造支持7種處理器模式,分別為:顧客模式、快中斷模式、中斷模式、管理模式、中斷模式、未定義模式和系統(tǒng)模式這樣好處是能夠更加好支持操作系統(tǒng)并提升工作效率。第34頁ARM處理器模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權任務等與顧客模式類似,但具有能夠直接切換到其他模式等特權快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應時進入此模式第35頁處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權任務等與顧客模式類似,但具有能夠直接切換到其他模式等特權快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應時進入此模式特權模式

除顧客模式外,其他模式均為特權模式。ARM內(nèi)部寄存器和某些片內(nèi)外設在硬件設計上只允許(或者可選為只允許)特權模式下訪問。另外,特權模式能夠自由切換處理器模式,而顧客模式不能直接切換到別模式。未定義(und)中斷(abt)管理(svc)中斷(irq)快中斷(fiq)系統(tǒng)(sys)第36頁異常模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權任務等與顧客模式類似,但具有能夠直接切換到其他模式等特權快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應時進入此模式未定義(und)中斷(abt)管理(svc)中斷(irq)快中斷(fiq)

這五種模式稱為異常模式。它們除了能夠通過程序切換進入外,也能夠由特定異常進入。當特定異常出現(xiàn)時,處理器進入對應模式。每種異常模式都有某些獨立寄存器,以避免異常退出時顧客模式狀態(tài)不可靠。第37頁顧客和系統(tǒng)模式處理器模式說明備注顧客(usr)正常程序工作模式不能直接切換到其他模式系統(tǒng)(sys)用于支持操作系統(tǒng)特權任務等與顧客模式類似,但具有能夠直接切換到其他模式等特權快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統(tǒng)保護代碼系統(tǒng)復位和軟件中斷響應時進入此模式中斷(abt)用于支持虛擬內(nèi)存和/或存放器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協(xié)處理器軟件仿真未定義指令異常響應時進入此模式這兩種模式都不能由異常進入,并且它們使用完全相同寄存器組。系統(tǒng)模式是特權模式,不受顧客模式限制。操作系統(tǒng)在該模式下訪問顧客模式寄存器就比較方便,并且操作系統(tǒng)某些特權任務能夠使用這個模式訪問某些受控資源。系統(tǒng)(sys)顧客(usr)第38頁ARM內(nèi)部寄存器ARM有37個32位長寄存器:1個用作PC(programcounter)1個用作CPSR(currentprogramstatusregister)5個用作SPSR(savedprogramstatusregisters)30個通用寄存器第39頁ARM狀態(tài)各模式下寄存器第40頁ARM狀態(tài)各模式下寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有37個寄存器,提成兩類:31個通用32位寄存器;6個狀態(tài)寄存器。第41頁無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0顧客無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷ARM狀態(tài)各模式下能夠訪問寄存器第42頁一般通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值通用寄存器。它們是完全通用寄存器,不會被體系構造作為特殊用途,并且可用于任何使用通用寄存器指令。第43頁一般通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組寄存器,也就是說對于任何處理器模式,這些寄存器都對應于相同32位物理寄存器。第44頁一般通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14為分組寄存器。它們所對應物理寄存器取決于目前處理器模式,幾乎所有允許使用通用寄存器指令都允許使用分組寄存器第45頁一般通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個分組物理寄存器。一種用于除FIQ模式之外所有寄存器模式,另一種用于FIQ模式。這樣在發(fā)生FIQ中斷后,能夠加速FIQ處理速度。第46頁一般通用寄存器寄存器R13、R14分別有6個分組物理寄存器。一種用于顧客和系統(tǒng)模式,其他5個分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13第47頁堆棧指針寄存器R13(SP)寄存器R13常作為堆棧指針(SP)。在ARM指令集當中,沒有以特殊方式使用R13指令或其他功能,只是習慣上都這樣使用。在Thumb指令集中存在使用R13指令。第48頁鏈接寄存器R14(LR)R14為鏈接寄存器(LR),在構造上有兩個特殊功能:在每種模式下,模式本身R14版本用于保存子程序返回地址;當發(fā)生異常時,將R14對應異常模式版本設置為異常返回地址(有些異常有一種小固定偏移量)。第49頁R14寄存器與子程序調(diào)用Lable程序A程序BR14BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執(zhí)行過程中調(diào)用程序B;2.程序跳轉至標號Lable,執(zhí)行程序B。同步硬件將“BLLable”指令下一條指令所在地址存入R14;3.程序B執(zhí)行最后,將R14寄存器內(nèi)容放入PC,返回程序A;第50頁R14寄存器與異常發(fā)生異常發(fā)生時,程序要跳轉至異常服務程序,對返回地址處理與子程序調(diào)用類似,都是由硬件完成。區(qū)分在于有些異常有一種小常量偏移。第51頁R14寄存器注意重點R14R14_irq顧客模式下程序IRQ模式下程序AareturnB...XA地址A地址A1.執(zhí)行顧客模式下程序;2.發(fā)生IRQ中斷,硬件將某個地址存入IRQ模式下R14_irq寄存器,顧客模式下R14沒有被破壞;3.IRQ服務程序A執(zhí)行完成,將R14_irq寄存器內(nèi)容減去某個常量后存入PC,返回之前被中斷程序;未被破壞第52頁R14寄存器注意重點R14R14_irq顧客模式下程序IRQ模式下程序AaB...XA地址A地址A1.執(zhí)行顧客模式下程序;2.發(fā)生IRQ中斷,硬件將某個地址存入IRQ模式下R14_irq寄存器,顧客模式下R14沒有被破壞;3.IRQ服務程序A執(zhí)行完成,將R14_irq寄存器內(nèi)容減去某個常量后存入PC,返回之前被中斷程序;未被破壞IRQ模式下程序BareturnB...XA地址B地址B4.假如在IRQ處理程序中打開IRQ中斷,并且再次發(fā)生IRQ中斷,或者調(diào)用子程序;5.硬件將返回地址保存在R14_irq寄存器中,本來保存返回地址將被覆蓋,造成錯誤;被破壞6.在程序B返回到程序A,然后在返回到顧客模式下被中斷程序時,發(fā)生錯誤,將不能正確返回;returnreturn處理措施是確保R14對應版本在發(fā)生中斷嵌套時不再保存任何故意義值(將R14入棧),或者切換到其他處理器模式下。第53頁程序計數(shù)器R15(PC)寄存器R15為程序計數(shù)器(PC),它指向正在取指地址。能夠以為它是一種通用寄存器,不過對于它使用有許多與指令有關限制或特殊情況。假如R15使用方式超出了這些限制,那么成果將是不可預測。第54頁讀R15限制正常操作時,從R15讀取值是處理器正在取指地址,即目前正在執(zhí)行指令地址加上8個字節(jié)(兩條ARM指令長度)。由于ARM指令總是以字為單位,因此R15寄存器最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼第55頁程序狀態(tài)寄存器CPSR寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一種寄存器“程序狀態(tài)保存寄存器(SPSR)”能夠被訪問。每種異常都有自己SPSR,在由于異常事件而進入異常時它保存CPSR目前值,異常退出時可通過它恢復CPSR。第56頁CPSR寄存器CPSR反應了目前處理器狀態(tài),其包括:4個條件代碼標志(負(N)、零(Z)、進位(C)和溢出(V));2個中斷嚴禁位,分別控制一種類型中斷;5個對目前處理器模式進行編碼位;1個用于批示目前執(zhí)行指令(ARM還是Thumb)位。第57頁CPSR寄存器格式NZCV——IM0M1M2M3M4TF—...313029282726876543210條件代碼標志保存控制位溢出標志進位或借位擴展零負或不大于IRQ嚴禁FIQ嚴禁狀態(tài)位模式位NZCVIM0M1M2M3M4TF第58頁CPSR模式位設置表第59頁備份程序狀態(tài)寄存器每一種處理器模式下都有一種專用物理寄存器,成為備份程序狀態(tài)寄存器SPSR(SavedProgramStatusRegister)。當特定異常中斷發(fā)生時,這個物理寄存器負責寄存目前程序狀態(tài)寄存器內(nèi)容。當異常處理程序返回時,再將其內(nèi)容恢復到目前程序狀態(tài)寄存器由于顧客模式和系統(tǒng)模式不屬于異常中斷模式,因此它們沒有SPSR。第60頁異常只要正常程序流被臨時中斷,處理器就進入異常模式。例如響應一種來自外設中斷。在處理異常之前,ARM內(nèi)核保存目前處理器狀態(tài),這樣當處理程序結束時能夠恢復執(zhí)行本來程序。假如同步發(fā)生兩個或更多異常,那么將按照固定次序來處理異常第61頁ARM異常類型ARM一共有7種類型異常,按優(yōu)先級從高到低排列如下:復位異常(Reset)數(shù)據(jù)異常(DataAbort)迅速中斷異常(FIQ)外部中斷異常(IRQ)預取異常(PrefetchAbort)軟件中斷(SWI)未定義指令異常(Undefinedinstruction)第62頁復位異常當處理器復位引腳有效時,系統(tǒng)產(chǎn)生復位異常中斷,程序跳轉到復位異常中斷處理程序處執(zhí)行。復位異常中斷一般用在下面兩種情況下:系統(tǒng)上電系統(tǒng)復位第63頁數(shù)據(jù)訪問中斷異常數(shù)據(jù)訪問中斷異常是由存放器發(fā)出數(shù)據(jù)中斷信號,它由存放器訪問指令(Load/Store)產(chǎn)生。當數(shù)據(jù)訪問指令目標地址不存在,或者該地址不允許目前指令訪問,處理器產(chǎn)生該異常。包括兩種類型:數(shù)據(jù)中斷發(fā)生在對數(shù)據(jù)訪問時預取中斷發(fā)生在指令預取過程中第64頁數(shù)據(jù)訪問中斷異常數(shù)據(jù)訪問中斷異常是由存放器發(fā)出數(shù)據(jù)中斷信號,它由存放器訪問指令(Load/Store)產(chǎn)生。當數(shù)據(jù)訪問指令目標地址不存在,或者該地址不允許目前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問中斷異常。在修復產(chǎn)生中斷原因后,不論處于哪種處理器操作狀態(tài),處理程序都執(zhí)行下面返回指令:SUBSPC,R14_abt,#8第65頁預取指令異常當處理器試圖去取一條被標識為預取無效指令時,發(fā)生預取異常。假如系統(tǒng)中不包括MMU時,指令預取異常中斷處理程序只是簡單地報告錯誤并退出。若包括MMU,引發(fā)異常指令物理地址被存放到內(nèi)存中。在處理中斷原因之后,不論處于哪種處理器操作狀態(tài),處理程序都會執(zhí)行下面指令恢復PC和CPSR并重試被中斷指令:SUBSPC,R14_abt,#4第66頁迅速中斷FIQ當處理器外部迅速中斷祈求引腳有效,且CPSR寄存器F控制位被清除時,處理器產(chǎn)生外部中斷祈求FIQ異常。不論異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面指令從中斷返回: SUBSPC,R14_fiq,#4在一種特權模式中,能夠通過置位CPSR中F位來嚴禁FIQ異常。第67頁外部中斷IRQ當處理器外部中斷祈求引腳有效,并且CPSR寄存器I控制位被清除時,處理器產(chǎn)生外部中斷IRQ異常。不論異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面指令從中斷返回: SUBSPC,R14_fiq,#4第68頁軟中斷SWI使用軟件中斷(SWI)指令能夠進入管理模式,一般用于祈求一種特定管理函數(shù)。SWI處理程序通過執(zhí)行下面指令返回:MOVSPC,R14_svc這個動作恢復了PC和CPSR并返回到SWI之后指令。SWI處理程序讀取操作碼以提取SWI函數(shù)編號。第69頁未定義指令異常當處理器遇到一條自己和系統(tǒng)內(nèi)任何協(xié)處理器都無法處理指令時,ARM內(nèi)核執(zhí)行未定義指令陷阱。軟件可使用這一機制通過模擬未定義協(xié)處理器指令來擴展ARM指令集。在模擬處理了失敗指令后,陷阱程序執(zhí)行下面指令:

MOVSPC,R14_svc這個動作恢復了PC和CPSR并返回到未定義指令之后指令。第70頁異常入口/出口異?;蛉肟诜祷刂噶钪盃顟B(tài)備注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2此處PC為BL,SWI,為定義指令取指或預取指中斷指令地址SWIMOVSPC,R14_svcPC+4PC+2未定義指令MOVSPC,R14_undPC+4PC+2預取指中斷SUBSPC,R14_abt,#4PC+4PC+4快中斷SUBSPC,R14_fiq,#4PC+4PC+4此處PC為由于FIQ或IRQ占先而沒有被執(zhí)行指令地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中斷SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中斷裝載或保存指令地址。復位無——復位時保存在R14_svc中值不可預知。第71頁異常入口和出口處理假如異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么能夠使用一條多寄存器傳送指令來恢復顧客寄存器并實現(xiàn)返回中斷處理代碼開始部分和退出部分:SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令寄存器列表(其中必須包括PC)后“^”符號表達這是一條特殊形式指令。這條指令在從存放器中裝載P

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論