版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2.2ARM微處理器體系結(jié)構(gòu)
2.2.1數(shù)據(jù)類型
2.2.2ARM微處理器的工作狀態(tài)
2.2.3ARM體系結(jié)構(gòu)的存儲器格式
2.2.4理器模式
2.2.5寄存器組織
1.ARM狀態(tài)下的寄存器組織
2.Thumb狀態(tài)下的寄存器組織
2.2.6異常2.2ARM微處理器體系結(jié)構(gòu)2.2.1數(shù)據(jù)類型ARM處理器支持以下數(shù)據(jù)類型:字(Word):字的長度為32位,而在8位/16位處理器體系結(jié)構(gòu)中,字的長度一般為16位,請注意區(qū)分。半字(Half-Word):半字的長度為16位,與8位/16位處理器體系結(jié)構(gòu)中字的長度一致。字節(jié)(Byte):各種處理器體系結(jié)構(gòu)中,字節(jié)的長度均為8位。
2.2.2ARM微處理器的工作狀態(tài)
從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:ARM狀態(tài),此時處理器執(zhí)行32位的字對齊的ARM指令;Thumb狀態(tài),此時處理器執(zhí)行16位的、半字對齊的Thumb指令。ARM處理器在兩種工作狀態(tài)之間可以切換:進(jìn)入Thumb狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為1時,執(zhí)行BX指令進(jìn)入Thumb狀態(tài)。如果處理器在Thumb狀態(tài)進(jìn)入異常,則當(dāng)異常處理(IRQ、FIQ、Undef、Abort和SWI)返回時,自動轉(zhuǎn)換到Thumb狀態(tài)。進(jìn)入ARM狀態(tài)。當(dāng)操作數(shù)寄存器的狀態(tài)位(位[0])為0時,執(zhí)行BX指令進(jìn)入ARM狀態(tài)。處理器進(jìn)行異常處理(IRQ、FIQ、Reset、Undef、Abort和SWIARM狀態(tài)執(zhí)行)。在此情況下,把PC放人異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。2.2.3ARM體系結(jié)構(gòu)的存儲器格式ARM體系結(jié)構(gòu)將存儲器看作是從零地址開始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個存儲的字?jǐn)?shù)據(jù),從第四個字節(jié)到第七個字節(jié)放置第二個存儲的字?jǐn)?shù)據(jù),依次排列。作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB。ARM體系結(jié)構(gòu)可以用兩種方法存儲字?jǐn)?shù)據(jù),稱為大端格式和小端格式,具體說明如下?!舸蠖烁袷剑鹤?jǐn)?shù)據(jù)的高字節(jié)存儲在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中。891011456701233124231615870字地址高地址低地址以大端格式存儲字?jǐn)?shù)據(jù) ◆小端格式:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。11109876543210以小端格式存儲字?jǐn)?shù)據(jù)高地址低地址3124231615870字地址8402.2.4理器模式 ARM微處理器支持7種運(yùn)行模式,分別為:用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理。外部中斷模式(irq):用于通用的中斷處理。管理模式(svc):操作系統(tǒng)使用的保護(hù)模式,系統(tǒng)復(fù)位后的缺省模式。1.指令終止模式(abt):指令預(yù)取終止時進(jìn)入該模式。2.數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)訪問終止時進(jìn)入該 模式,可用于虛擬存儲及存儲保護(hù)。指令未定義模式(und):支持硬件協(xié)處理器指令的軟件 仿真系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。ARM微處理器的運(yùn)行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時,某些被保護(hù)的系統(tǒng)資源是不能被訪問的。除用戶模式以外,其余的所有6種模式稱為非用戶模式或特權(quán)模式(PrivilegedModes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(ExceptionModes),常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。處理器啟動時的模式轉(zhuǎn)換圖超級模式(Supervisor)多種特權(quán)模式變化用戶程序的運(yùn)行模式復(fù)位后的缺省模式主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式一般為用戶模式User處理器模式寄寄存器組織織如圖2-4所示,ARM微處處理器共有37個32位位寄存器,其其中31個為為通用寄存器器,6個為狀狀態(tài)寄存器。。但是這些寄寄存器不能被被同時訪問,,具體哪些寄寄存器是可編編程訪問的,,取決于微處處理器的工作作狀態(tài)及具體體的運(yùn)行模式式。但在任何何時候,通用用寄存器R0~R14、、程序計(jì)數(shù)器器PC、一個個或兩個狀態(tài)態(tài)寄存器都是是可訪問的。。1.ARM狀態(tài)下的寄寄存器組織(1)通用用寄存器.(2)寄存存器R16(1)通用用寄存器.通用寄存器包包括R0~R15,可以以分為3類::未分組寄存器器R0~R7分組寄存器R8~R14程序計(jì)數(shù)器PC(R15)①未分組寄寄存器R0~R7在所有的運(yùn)行行模式下,未未分組寄存器器都指向同一一個物理寄存存器,它們未未被系統(tǒng)用作作特殊的用途途,因此,在在中斷或異常常處理進(jìn)行運(yùn)運(yùn)行模式轉(zhuǎn)換換時,由于不不同的處理器器運(yùn)行模式均均使用相同的的物理寄存器器,可能會造造成寄存器中中數(shù)據(jù)的破壞壞,這一點(diǎn)在在進(jìn)行程序設(shè)設(shè)計(jì)時應(yīng)引起起注意。②分組寄存存器R8~R14對于分組寄存存器,它們每每一次所訪問問的物理寄存存器與處理器器當(dāng)前的運(yùn)行行模式有關(guān)。。對于R8~R12,每個個寄存器對應(yīng)應(yīng)兩個不同的的物理寄存器器,當(dāng)使用fiq模式時時,訪問寄存存器R8_fiq~R12_fiq;當(dāng)使用除除fiq模式式以外的其他他模式時,訪訪問寄存器R8_usr~R12_usr。對于R13、、R14,每每個寄存器對對應(yīng)6個不同同的物理寄存存器,其中一一個是用戶模模式與系統(tǒng)模模式共用,另另外5個物理理寄存器對應(yīng)應(yīng)于其他5種種不同的運(yùn)行行模式。采用以下記號號來區(qū)分不同的物理寄寄存器:R13_<mode>R14_<mode>其中,mode為以下幾幾種模式之一一:usr、、fiq、irq、svc、abt、und。。寄存器R13在ARM指指令中常用作作堆棧指針,,但這只是一一種習(xí)慣用法法,用戶也可可使用其他的的寄存器作為為堆棧指針。。而在Thumb指令集集中,某些指指令強(qiáng)制性的的要求使用R13作為堆堆棧指針。由于處理器的的每種運(yùn)行模模式均有自己己獨(dú)立的物理理寄存器R13,在用戶戶應(yīng)用程序的的初始化部分分,一般都要要初始化每種種模式下的R13,使其其指向該運(yùn)行行模式的??湛臻g.這樣,當(dāng)程序序的運(yùn)行進(jìn)入入異常模式時時,可以將需需要保護(hù)的寄寄存器放入R13所指向向的堆棧,而而當(dāng)程序從異異常模式返回回時,則從對對應(yīng)的堆棧中中恢復(fù),采用用這種方式可可以保證異常常發(fā)生后程序序的正常執(zhí)行行。R14也稱稱做子程序序連接寄存存器(SubroutineLinkRegister)或或連接寄存存器LR。。當(dāng)執(zhí)行BL子程序調(diào)調(diào)用指令時時,R14中得到R15(程程序計(jì)數(shù)器器PC)的的備份。其其他情況下下,R14用作通用用寄存器。。與之類似,,當(dāng)發(fā)生中中斷或異常常時,對應(yīng)應(yīng)的分組寄寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保保存R15的返回值值。寄存器R14常用于于如下的情情況:在每一種運(yùn)運(yùn)行模式下下,都可用用R14保保存子程序序的返回地地址,當(dāng)用用BL或BLX指令令調(diào)用子程程序時,將將PC的當(dāng)當(dāng)前值復(fù)制制給R14,執(zhí)行完完子程序后后,又將R14的值值復(fù)制回PC,即可可完成子程程序的調(diào)用用返回。以上的描述述可用指令令完成:執(zhí)行以下任任意一條指指令:MOVPC,LR或BXLR在子程序入入口處使用用以下指令令將R14存入入堆棧:STMFDSP!,{<Regs>,LR}對應(yīng)的,使使用以下指指令可以完完成子程序序返回:LDMFDSP!,{<Regs>,PC}R14也可可作為通用用寄存器。。③程序計(jì)計(jì)數(shù)器PC(R15)寄存器R15用作程程序計(jì)數(shù)器器(PC)。在ARM狀態(tài)下下,位[1:0]為為0,位[31:2]用于保保存PC;;在Thumb狀態(tài)態(tài)下,位[0]為0,位[31:1]用于保存存PC。雖然可以用用作通用寄寄存器,但但是有一些些指令在使使用R15時有一些些特殊限制制,若不注注意,執(zhí)行行的結(jié)果將將是不可預(yù)預(yù)料的。在ARM狀狀態(tài)下,PC的0和和1位是0,在Thumb狀狀態(tài)下,PC的0位位是0。R15雖然也也可用作通用用寄存器,但但一般不這么么使用,因?yàn)闉閷15的的使用有一些些特殊的限制制,當(dāng)違反了了這些限制時時,程序的執(zhí)執(zhí)行結(jié)果是未未知的。由于ARM體體系結(jié)構(gòu)采用用多級流水線線技術(shù),對于于ARM指令令集而言,PC總是指向向當(dāng)前指令的的下兩條指令令的地址,即即PC的值為為當(dāng)前指令的的地址值加八八個字節(jié)。在ARM狀態(tài)態(tài)下,任一時時刻可以訪問問以上所討論論的16個通通用寄存器和和1~2個狀狀態(tài)寄存器。。在非用戶模模式(特權(quán)模模式)下,,則可訪問到到特定模式分分組寄存器,,圖2-4說說明在每一種種運(yùn)行模式下下,哪一些寄寄存器是可以以訪問的。(2)寄存存器R16寄存器R16用作CPSR(CurrentProgramStatusRegister,當(dāng)當(dāng)前程序狀態(tài)態(tài)寄存器),,CPSR可可在任何運(yùn)行行模式下被訪訪問,它包括括條件標(biāo)志位位、中斷禁止止位、當(dāng)前處處理器模式標(biāo)標(biāo)志位,以及及其他一些相相關(guān)的控制和和狀態(tài)位。每一種運(yùn)行模模式下又都有有一個專用的的物理狀態(tài)寄寄存器,稱為為SPSR(SavedProgramStatusRegister,備份的程程序狀態(tài)寄存存器),當(dāng)異異常發(fā)生時,SPSR用用于保存CPSR的當(dāng)前前值,從異常常退出時則可可由SPSR來恢復(fù)CPSR。由于用戶模式式和系統(tǒng)模式式不屬于異常常模式,它們們沒有SPSR,當(dāng)在這這兩種模式下下訪問SPSR時,結(jié)果果是未知的。。程序狀態(tài)字參參見后面說明明。2.Thumb狀態(tài)下下的寄存器組組織Thumb狀狀態(tài)下的寄存存器集是ARM狀態(tài)下寄寄存器集的一一個子集,程程序可以直接接訪問8個通通用寄存器(R7~R0)、程序計(jì)計(jì)數(shù)器(PC)、堆棧指指針(SP)、連接寄存存器(LR)和CPSR。同時,在每一一種特權(quán)模式式下都有一組組SP、LR和SPSR。圖2-4表明Thumb狀態(tài)下的的寄存器組織織。(1)Thumb狀態(tài)態(tài)下的寄存器器組織與ARM狀態(tài)下的的寄存器組織織的關(guān)系Thumb狀狀態(tài)下和ARM狀態(tài)下的的R0~R7是相同的Thumb狀狀態(tài)下和ARM狀態(tài)下的的CPSR和和所有的SPSR是相同同的Thumb狀狀態(tài)下的SP對應(yīng)于ARM狀態(tài)下的的R13Thumb狀狀態(tài)下的LR對應(yīng)于ARM狀態(tài)下的的R14Thumb狀狀態(tài)下的程序序計(jì)數(shù)器對應(yīng)應(yīng)于ARM狀狀態(tài)下的R15以上的對應(yīng)關(guān)關(guān)系如圖2-5所示。(2)訪問問THUMB狀態(tài)下的高高位寄存器(Hi-registers)在Thumb狀態(tài)下,高高位寄存器R8~R15并不是標(biāo)準(zhǔn)準(zhǔn)寄存器集的的一部分,但但可使用匯編編語言程序有有限制地訪問問這些寄存器器,將其用作作快速的暫存存器.使用帶特殊變變量的MOV指令,數(shù)數(shù)據(jù)可以在低低位寄存器和和高位寄存器器之間進(jìn)行傳傳送,高位寄寄存器的值可可以使用CMP和ADD指令進(jìn)行比比較或加上低低位寄存器中中的值。(3)程序序狀態(tài)寄存器器ARM體系結(jié)結(jié)構(gòu)包含一個個當(dāng)前程序狀狀態(tài)寄存器(CPSR)和5個備份份的程序狀態(tài)態(tài)寄存器(SPSRs)。備份的程序狀狀態(tài)寄存器用用來進(jìn)行異常常處理,其功功能包括:保存ALU中中的當(dāng)前操作作信息??刂圃试S和禁禁止中斷。設(shè)置處理器的的運(yùn)行模式。。程序狀態(tài)寄存存器每一位的的安排如圖2-6所所示.①條件碼標(biāo)標(biāo)志(ConditionCodeFlags)N、Z、C、、V均為條件件碼標(biāo)志位。。它們的內(nèi)容容可被算術(shù)或或邏輯運(yùn)算的的結(jié)果所改變變,并且可以以決定某條指指令是否被執(zhí)執(zhí)行。在ARM狀態(tài)態(tài)下,絕大多多數(shù)的指令都都是有條件執(zhí)執(zhí)行的。在Thumb狀狀態(tài)下.僅有有分支指令是是有條件執(zhí)行行的。條件碼碼標(biāo)志各位的的具體含義如表2-1所所示。②控制位PSR的低8位(包括I、F、T和和M[4:0])稱為控控制位,當(dāng)發(fā)發(fā)生異常時這這些位可以被被改變。如果果處理器運(yùn)行行特權(quán)模式,,這些位也可可以由程序修修改。中斷禁止位I、FI=1禁禁止IRQ中中斷F=1禁禁止FIQ中中斷T標(biāo)志位:該該位反映處理理器的運(yùn)行狀狀態(tài)。對于ARM體體系結(jié)構(gòu)v5及以上版本本的T系列處處理器,當(dāng)該該位為1時,,程序運(yùn)行于于Thumb狀態(tài),否則則運(yùn)行于ARM狀態(tài)。對于ARM體體系結(jié)構(gòu)v5及以上版本本的非T系列列處理器,當(dāng)當(dāng)該位為1時時,執(zhí)行下一一條指令以引引起未定義的的指令異常;;當(dāng)該位為0時,表示運(yùn)運(yùn)行于ARM狀態(tài)。運(yùn)行模式位M[4:0]:M0、M1、M2、M3、、M4是模式式位。這些位位決定了處理理器的運(yùn)行模模式。具體含含義如表2-2所所示。由表2-2可可知,并不是是所有的運(yùn)行行模式位的組組合都是有效效的,其他的的組合結(jié)果會會導(dǎo)致處理器器進(jìn)入一個不不可恢復(fù)的狀狀態(tài)。③保留位PSR中的其其余位為保留留位,當(dāng)改變變PSR中的的條件碼標(biāo)志志位或者控制制位時,保留留位不要改變變,在程序中中也不要使用用保留位來存存儲數(shù)據(jù)。保保留位將用于于ARM版本本的擴(kuò)展。異異常異常(exception)由內(nèi)部或外外部源產(chǎn)生以以引起處理器器處理一個事事件。例如,,外部中斷或或試圖執(zhí)行未未定義指令都都會引起異常常。在處理異異常之前,處處理器狀態(tài)必必須保留,以以便在異常處處理程序完成成后,原來的的程序能夠重重新執(zhí)行。同同一時刻可能能出現(xiàn)多個異異常。ARM支持7種類型的異常。表2-3列出了異常的的類型以及處處理這些異常常的處理器模模式。異常出出現(xiàn)后,強(qiáng)制制從異常類型型對應(yīng)的固定定存儲器地址址開始執(zhí)行程程序。這些固固定的地址稱稱為異常向量量(ExceptionVectors)。。當(dāng)異常出現(xiàn)時時,異常模式式分組的R14和SPSR用于保存存狀態(tài),即R14_<exceptionmode>=returnlinkSPSR_<exception_mode>=CPSRCPSR[4:0]=exceptionmodenumberCPSR[5] =0//*在ARM狀態(tài)執(zhí)行行*/if<exceptionmode>==ResetorFIQthenCPSR[6]=1//*禁止止快速中斷*//*否則CPSR[6]不變*/CPSR[7]=1//*禁止正常常中斷*/PC=exceptionvectoraddress當(dāng)處理異常返返回時,將SPSR傳送送到CPSR,R14傳傳送到PC。。這可用兩種種方法自動完完成,即使用帶S位的的數(shù)據(jù)處理指指令,將PC作為目的寄寄存器;使用帶恢復(fù)CPSR的多多加載指令。。1.復(fù)位位處理器上一旦旦有復(fù)位輸入入,ARM處處理器立刻停停止執(zhí)行當(dāng)前前指令。復(fù)位位完成下列操操作R14_svc=UNPREDICTABLEvalueSPSR_svc=UNPREDICTABLEvalueCPSR[4:0]=0b10011/*進(jìn)進(jìn)入管理模式式*/CPSR[5]=0/*在ARM狀態(tài)下執(zhí)行行*/CPSR[6]=1/*禁止快速速中斷*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0000ElsePC=0x00000000復(fù)位后,ARM處理器在在禁止中斷的的管理模式下下,從地址0x00000000或或OxFFFF0000開始執(zhí)行指指令。2.未定義指指令異常當(dāng)ARM處理理器執(zhí)行協(xié)處處理器指令時時,它必須等等待任一外部部協(xié)處理器應(yīng)應(yīng)答后,才能能真正執(zhí)行這這條指令。若若協(xié)處理器沒沒有響應(yīng),就就會出現(xiàn)未定定義指令異常常。若試圖執(zhí)行未未定義的指令令,也會出現(xiàn)現(xiàn)未定義指令令異常。未定義指令異異??捎糜跊]沒有物理協(xié)處處理器(硬件件)的系統(tǒng)上上,對協(xié)處理理器進(jìn)行軟件件仿真,或在在軟件仿真時時進(jìn)行指令集集擴(kuò)展。當(dāng)未定義指令令異常出現(xiàn)時時,執(zhí)行下列列操作:R14_und=addressofnextinstructionaftertheundefinedinstructionSPSR_und=CPSRCPSR[4:0]=0b11011/*進(jìn)進(jìn)入未定義模模式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0004ElsePC=0x00000004在仿真未定義義指令后,使使用下列指令令返回,即MOVSPC,R14上面的指令恢恢復(fù)PC(從從R14_und)和CPSR(從從SPSR_und),,并返回到未未定義指令后后的下一條指指令。3.軟件中斷斷異常軟件中斷指令令SWI(SoftWareInterruptlnstruction)進(jìn)入管理模模式,以請求求特定的管理理(操作系統(tǒng)統(tǒng))函數(shù)。當(dāng)當(dāng)執(zhí)行SWI時,完成下下列操作:R14_svc=addressofnextinstructionaftertheSWIinstructionSPSR_svc=CPSRCPSR[4:0]=0b10011/*進(jìn)進(jìn)入管理模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0008ElesPC=0x00000008完成SWI操操作后,使用用下列指令恢恢復(fù)PC(從從R14_svc)和CPSR(從從SPSR_svc),,并返回到SWI指令后后的下一條指指令,即MOVSPC,R144.預(yù)取中中止(取指令令存儲器中止止)存儲器系統(tǒng)發(fā)發(fā)出存儲器中中止(abort)信號號。響應(yīng)取指指激活的中止止標(biāo)記所取的的指令無效。。若處理器試圖圖執(zhí)行無效指指令,則產(chǎn)生生預(yù)取中止異異常。若指令未執(zhí)行行(例如,指指令在流水線線中發(fā)生了轉(zhuǎn)轉(zhuǎn)移),則不不發(fā)生預(yù)取中中止。在ARMv5及以以上版本中,,執(zhí)行BKPT指令也會會產(chǎn)生預(yù)取中中止異常。當(dāng)試圖執(zhí)行一一條中止的指指令時,將執(zhí)執(zhí)行下列操作作:R14_abt=addressoftheabortedinstruction+4SPSR_abt=CPSRCPSR[4:0]=0b10111/*進(jìn)進(jìn)入中止模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF000CElsePC=0x0000000C確定中止原因因后,使用下下面指令從中中止模式返回回,即SUBSPC,R14,#4上面的指令恢恢復(fù)PC(從從R14_abt)和CPSR(從從SPSR_abt),,并返回到中中止的指令。。5.?dāng)?shù)據(jù)中止止(數(shù)據(jù)訪問問存儲器中止止)存儲器系統(tǒng)發(fā)發(fā)出存儲器中中止信號。響響應(yīng)數(shù)據(jù)訪問問(加載或存存儲)激活的的中止標(biāo)記數(shù)數(shù)據(jù)為無效。。在下面的任任何指令或異異常改變CPU狀態(tài)之前前,數(shù)據(jù)中止止異常發(fā)生。。執(zhí)行下列操操作:R14_abt=addressoftheabortedinstruction+8SPSR_abt=CPSRCPSR[4:0]=0b10111/*進(jìn)進(jìn)入中止模式式*/CPSR[5]=0/*在ARM狀態(tài)執(zhí)行*//*CPSR[6]不變*/CPSR[7]=1/*禁止正常常中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0010ElsePC=0x00000010確定中止原因因后,使用下下列指令從中中止模式返回回,即SUBSPC,R14,#8上面的指令恢恢復(fù)PC(從從R14_abt)和CPSR(從SPSR_abt),并返回重重新執(zhí)行中止止的指令。若若中止的指令令不需要重新新執(zhí)行,則使使用下面的指指令:SUBSPC,R14,#46.中斷請請求(IRQ)異常通過處理器上上的IRQ輸輸入引腳,由由外部產(chǎn)生IRQ異常。。IRQ異常常的優(yōu)先級比比FIQ異常常的低。當(dāng)進(jìn)進(jìn)入FIQ處處理時,會屏屏蔽掉IRQ異常。若CPSR的的I位置為1,則禁止IRQ中斷。。若I位清零零,則ARM在指令執(zhí)行行完之前檢查查IRQ輸入入。只能在特權(quán)模模式下改變I位,當(dāng)檢測測到IRQ時時,執(zhí)行下列列操作:R14_irq=addressoftheabortedinstruction+4SPSR_irq=CPSRCPSR[4:0]=0b10010/*進(jìn)進(jìn)入IRQ模式*/CPSR[5]=0/*在在ARM狀狀態(tài)執(zhí)行*//*CPSR[6]不變變*/CPSR[7]=1/*禁禁止正常中中斷*/IfhighvectorsconfiguredthenPC=0xFFFF0018ElsePC=0x00000018使用下面的的指令從中中斷服務(wù)返返回,即SUBSPC,,R14,,#4上面的指令令恢復(fù)PC(從R14_irq)和CPSR(從SPSR_irq),并并繼續(xù)執(zhí)行行被中斷的的程序。7.快速中中斷請求(FIQ)異常通過處理器器上的FIQ輸入引引腳,由外外部產(chǎn)生FIQ異常常。FIQ被設(shè)計(jì)成成支持?jǐn)?shù)據(jù)據(jù)傳送和通通道處理,,并有足夠夠的私有(private)寄存器,,從而在這這樣的應(yīng)用用中可避免免對寄存器器保存的需需求,減少少了上下文文切換的總總開銷。當(dāng)CPSR的F位置置1時,禁禁止快速中中斷。若F位清零,,則ARM在執(zhí)行指指令時檢查查FIQ輸輸入。只能能在特權(quán)模模式下改變變F位,當(dāng)當(dāng)檢測到FIQ時,執(zhí)行下列列操作,即即R14_fiq=addressoftheabortedinstruction+4SPSR_fiq=CPSRCPSR[4:0]=0b10001/*進(jìn)進(jìn)入FIQ模式*/CPSR[5]=0/*在在ARM狀狀態(tài)執(zhí)行*/CPSR[6]=1/*禁禁止快速中中斷*/CPSR[7]=1/*禁禁止正常中中斷*/IfhighvectorsconfiguredthenPC=0xFFFF001CElsePC=0x0000001C使用下面的的指令從中中斷服務(wù)返返回,即SUBSPC,,R14,,#4上面的指令令恢復(fù)PC(從R14_fiq)和CPSR(從SPSR_fiq),并并繼續(xù)執(zhí)行行被中斷的的程序。FIQ向量量放在最后后,允許FIQ異常常處理程序序直接放在在地址0x0000001C或0xFFFF001C開開始的位置置,而不需需要由向量量的分支指指令執(zhí)行跳跳轉(zhuǎn)到異常常處理程序序。8.異常常優(yōu)先級異常的優(yōu)先先級如表2-4所列列。優(yōu)先級異常優(yōu)先級異常1(最高)復(fù)位4IRQ2數(shù)據(jù)中止5預(yù)取中止3FIQ6(最低)未定義指信、SWI9.高端端向量一些ARM實(shí)現(xiàn)允許許異常向量量的定位由由32位地地址空間低低端的正常常地址范圍圍Ox00000000~Ox000000lC,移到到接近于地地址空間高高端的另一一地址范圍圍0xFFFF0000~0xFFFF00lC。這些改變后后的地址位位置稱為高高端向量。。由IMPLEMENTATIONDEFINED決決定是否支支持高端向向量。如果果支持,則則在輸入硬硬件配置時時,選擇是是使用正常常向量還是是高端向量量。10.異異常的進(jìn)入入和退出只要正常的的程序流程程被暫時停停止,則異異常發(fā)生,,例如服務(wù)務(wù)外部的中中斷。在異常被處處理之前,,必須保存存當(dāng)前的處處理器狀態(tài)態(tài),以便當(dāng)當(dāng)處理程序序完成后,,原來的程程序能重新新開始。如果幾種異異常同時發(fā)發(fā)生,則對對它們按固固定的次序序處理,可可參考異常常優(yōu)先級(1)進(jìn)進(jìn)入異常的的操作處理一個異異常時,ARM7TDMI用用于:①將下一條條指令的地地址保存在在相應(yīng)的LR寄存器器中。如果異常是是從ARM狀態(tài)進(jìn)入入,則保存存在LR寄寄存器中的的是下一條條指令的地地址(當(dāng)前前PC+4或PC+8,取決決于異常,,見表2-5)。如果異常是是從Thumb狀態(tài)態(tài)進(jìn)入,則則保存在LR寄存器器中的是當(dāng)當(dāng)前PC的的偏移值。。它能使程程序在異常常處理返回回后從正確確的位置重重新開始。。這就意味異異常處不需需要確定異異常是從何何種狀態(tài)進(jìn)進(jìn)入的。例例如在軟件件中斷(SWI)情情況下,““MOVSPC,,R14_svc””,總是返返回到下一一條指令,,而與SWI是在ARM還是是Thumb狀態(tài)下下執(zhí)行的無無關(guān)。②將CPSR復(fù)制到到相應(yīng)的SPSR中中。③迫使CPSR模式式位設(shè)置成成取決于異異常的值。。④迫使PC從相關(guān)的的異常向量量中取下一一條指令。。也可以設(shè)設(shè)置中斷禁禁止位來阻阻止其它無無法處理的的異常嵌套套。如果在異常常發(fā)生時處處理器是在在Thumb狀態(tài)下下,那么當(dāng)當(dāng)用中斷異異常向量地地址加載PC時,自自動切換進(jìn)進(jìn)入ARM狀態(tài)。(2)退退出異常的的操作在完成異常常處理后::將LR寄存存器的值減減去相應(yīng)的的偏移量(偏移量根根據(jù)異常不不同而不同同),送到到PC中;;將SPSR復(fù)制回CPSR中中;清除中斷禁禁止位標(biāo)志志。另外,不需需要顯式切切換回Thumb狀狀態(tài),因?yàn)闉閺腟PSR中將CPSRT位自動動設(shè)置為異異常前的原原值。(3)進(jìn)進(jìn)入和退出出異常小結(jié)結(jié)表2-5中總結(jié)了進(jìn)進(jìn)入異常處處理時保存存在相應(yīng)的的R14寄寄存器中的的PC值,,以及在退退出異常處處理時推薦薦使用的指指令。PC是具有有預(yù)取中止止的BL/SWI/未定義指指令所取的的地址;PC是從FIQ或IRQ取得得優(yōu)先權(quán)后后不能執(zhí)行行的指令的的地址;PC是產(chǎn)生生數(shù)據(jù)中止止的加載或或存儲指令令的地址;;復(fù)位時保存存在R14_svc中的值是是不可預(yù)知知的。R0R0R0R0R0R0R1R1R1R1R1R1R2R2R2R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8◣R8-fiqR8R8R8R8R9◣R9-fiqR9R9R9R9R10◣R10-fiqR10R10R10R10R11◣R11-fiqR11R11R11R11R12◣R12-fiqR12R12R12R12R13◣R13-fiq◣13-svc◣13-adt◣13-itq◣13-undR14◣R14-fiq◣14-svc◣14-adt◣14-itq◣14-undR15(PC)R15(PC)R15(PC)R15(PC)R15(PC)R15(PC)Systerm&UserFIQSupervisterAboutIRGUndefinedARM狀態(tài)下下的積存器組組織CPSRCPSRCPSRCPSRCPSRCPSR
◣SPSR-foq◣SPSR-svc◣SPSR-abt◣SPSR-inq◣SPSR-und返回圖2-5Thumb狀態(tài)下的的寄存器組織織R0R1R2R3R4R5R6R7StackPoint(SP)LinkRegister(LR)ProgramCounter(PC)CPSRSPSRROR1R2R3R4R5R6R7R8R9R10R11R12StackPoint(R13)LinkRegister(R14)ProgramCounter(R15)CPSRSPSRThumb狀狀態(tài)ARM狀態(tài)返回返回標(biāo)志位含義N當(dāng)用兩個補(bǔ)碼表示的帶符號數(shù)進(jìn)行運(yùn)算時,N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零ZZ=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零C可以有4種方法設(shè)置C的值;加法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(無符號數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時產(chǎn)生了借位(無符號數(shù)溢出),C=0,否則C=1;對于包含移位操作的非加/減運(yùn)算指令,C為移出值的最后一位;對于其它的非加/減運(yùn)算指令,C的值通常不改變條件碼的具體體含義N當(dāng)用兩個補(bǔ)碼表示的帶符號數(shù)進(jìn)行運(yùn)算時,N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零ZZ=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零C可以有4種方法設(shè)置C的值;加法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(無符號數(shù)溢出),C=1,否則C=0;減法運(yùn)算(包括比較指令CMP);當(dāng)運(yùn)算時產(chǎn)生了借位(無符號數(shù)溢出),C=0,否則C
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《現(xiàn)代建筑深度研究》課件
- 《房地產(chǎn)廣告》課件
- 小學(xué)一年級10以內(nèi)連加連減口算練習(xí)題1080道
- 一位高中生的懺悔高考語文閱讀理解
- 《汽車知識簡述》課件
- 《初中數(shù)學(xué)打折銷售》課件
- 等離子弧焊類型、原理及其安全特點(diǎn)
- 酒店服務(wù)員的職責(zé)和要求
- 律師行業(yè)安全生產(chǎn)工作總結(jié)
- 財(cái)務(wù)培訓(xùn)與職業(yè)發(fā)展總結(jié)
- 國家開放大學(xué)一網(wǎng)一平臺電大《當(dāng)代中國政治制度》形考任務(wù)1-4網(wǎng)考題庫及答案
- 小企業(yè)會計(jì)準(zhǔn)則財(cái)務(wù)報(bào)表
- 資產(chǎn)損失鑒證報(bào)告(范本)
- 農(nóng)學(xué)技能高考【種植類】復(fù)習(xí)題庫大全-2、《植物生產(chǎn)與環(huán)境》-上(單選多選題)
- 隧道貫通方案貫通計(jì)算
- GB/T 36490-2018風(fēng)力發(fā)電機(jī)組防雷裝置檢測技術(shù)規(guī)范
- GB/T 21010-2017土地利用現(xiàn)狀分類
- GB/T 15532-2008計(jì)算機(jī)軟件測試規(guī)范
- 2023年彌渡縣廣播電視臺(融媒體中心)招聘筆試題庫及答案解析
- 規(guī)范集團(tuán)中層管理人員退休返聘的若干規(guī)定
- 無機(jī)及分析化學(xué)考試題(附答案)
評論
0/150
提交評論