ARM微處理器體系結(jié)構(gòu)_第1頁
ARM微處理器體系結(jié)構(gòu)_第2頁
ARM微處理器體系結(jié)構(gòu)_第3頁
ARM微處理器體系結(jié)構(gòu)_第4頁
ARM微處理器體系結(jié)構(gòu)_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2.2 ARM微處理器體系結(jié)構(gòu)2.2.1 數(shù)據(jù)類型2.2.2 ARM微處理器的工作狀態(tài)2.2.3 ARM體系結(jié)構(gòu)的存儲器格式2.2.4 理器模式2.2.5 寄存器組織 1.ARM狀態(tài)下的寄存器組織 2.Thumb狀態(tài)下的寄存器組織2.2.6 異常2.2 ARM微處理器體系結(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.2 A

2、RM微處理器的工作狀態(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、F

3、IQ、Reset、Undef、Abort 和 SWI ARM狀態(tài)執(zhí)行)。在此情況下,把PC 放人異常模式鏈接寄存器中。從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。2.2.3 ARM體系結(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é)則存放在高地址中。 字地址高地址低地址以

4、大端格式存儲字?jǐn)?shù)據(jù) 小端格式:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。以小端格式存儲字?jǐn)?shù)據(jù)高地址低地址字地址2.2.4 理器模式 ARM微處理器支持7種運(yùn)行模式,分別為: 用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)??焖僦袛嗄J?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ù)。 指令

5、未定義模式(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)模式(Privileged Modes);其中除去用戶模式和系統(tǒng)模式以外的5種又稱為異常模式(Exception Modes),常用于處理中斷或異常,以及需要訪問受保護(hù)的系統(tǒng)資源等情況。處理器啟動時的模式轉(zhuǎn)換圖超級模式(Supervisor)多種特權(quán)模式變化用戶程序的

6、運(yùn)行模式復(fù)位后的缺省模式主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式一般為用戶模式User處理器模式2.2.5 寄存器組織如圖 2-4 所示,ARM微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決于微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時候,通用寄存器R0R14、程序計(jì)數(shù)器PC、一個或兩個狀態(tài)寄存器都是可訪問的。 1. ARM狀態(tài)下的寄存器組織(1) 通用寄存器 (2) 寄存器R16 (1) 通用寄存器通用寄存器包括R0R15,可以分為3類:未分組寄存器R0R7分組寄存器R8R14程序計(jì)數(shù)器PC(

7、R15) 未分組寄存器R0R7在所有的運(yùn)行模式下,未分組寄存器都指向同一個物理寄存器,它們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時,由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞,這一點(diǎn)在進(jìn)行程序設(shè)計(jì)時應(yīng)引起注意。 分組寄存器R8R14對于分組寄存器,它們每一次所訪問的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。對于R8R12,每個寄存器對應(yīng)兩個不同的物理寄存器,當(dāng)使用fiq模式時,訪問寄存器R8_fiqR12_fiq;當(dāng)使用除fiq模式以外的其他模式時,訪問寄存器R8_usrR12_usr。對于R13、R14,每個寄存器對應(yīng)6個不同的物理寄存器

8、,其中一個是用戶模式與系統(tǒng)模式共用,另外5個物理寄存器對應(yīng)于其他5種不同的運(yùn)行模式。采用以下記號來區(qū)分不同的物理寄存器:R13_R14_其中,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

9、所指向的堆棧,而當(dāng)程序從異常模式返回時,則從對應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異常發(fā)生后程序的正常執(zhí)行。R14也稱做子程序連接寄存器(Subroutine Link Register)或連接寄存器LR。當(dāng)執(zhí)行BL子程序調(diào)用指令時,R14中得到R15(程序計(jì)數(shù)器PC)的備份。其他情況下,R14用作通用寄存器。與之類似,當(dāng)發(fā)生中斷或異常時,對應(yīng)的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值。寄存器R14常用于如下的情況:在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用BL或BLX指令調(diào)用子程序時,將PC的當(dāng)前值復(fù)制給R

10、14,執(zhí)行完子程序后,又將R14的值復(fù)制回PC,即可完成子程序的調(diào)用返回。以上的描述可用指令完成:執(zhí)行以下任意一條指令: MOV PC,LR 或 BX LR在子程序入口處使用以下指令將R14存 入堆棧: STMFD SP! ,LR對應(yīng)的,使用以下指令可以完成子程序返回:LDMFD SP! ,PC R14也可作為通用寄存器。 程序計(jì)數(shù)器PC(R15)寄存器R15用作程序計(jì)數(shù)器(PC)。在ARM狀態(tài)下,位1:0為0,位31:2用于保存PC;在Thumb狀態(tài)下,位0為0,位31:1用于保存PC。雖然可以用作通用寄存器,但是有一些指令在使用R15時有一些特殊限制,若不注意,執(zhí)行的結(jié)果將是不可預(yù)料的。在

11、ARM狀態(tài)下,PC的0和1位是0,在Thumb狀態(tài)下,PC的0位是0。 R15雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷15的使用有一些特殊的限制,當(dāng)違反了這些限制時,程序的執(zhí)行結(jié)果是未知的。由于ARM體系結(jié)構(gòu)采用多級流水線技術(shù),對于ARM指令集而言,PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加八個字節(jié)。在ARM狀態(tài)下,任一時刻可以訪問以上所討論的16個通用寄存器和12個狀態(tài)寄存器。在非用戶模式(特權(quán)模式) 下,則可訪問到特定模式分組寄存器,圖2-4說明在每一種運(yùn)行模式下,哪一些寄存器是可以訪問的。 (2) 寄存器R16 寄存器R16用作CPSR(Curren

12、t Program Status Register,當(dāng)前程序狀態(tài)寄存器),CPSR可在任何運(yùn)行模式下被訪問,它包括條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志位,以及其他一些相關(guān)的控制和狀態(tài)位。 每一種運(yùn)行模式下又都有一個專用的物理狀態(tài)寄存器,稱為SPSR (Saved Program Status Register,備份的程序狀態(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)下的寄存器組織Thu

13、mb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的一個子集,程序可以直接訪問8個通用寄存器(R7R0)、程序計(jì)數(shù)器(PC)、堆棧指針(SP)、連接寄存器(LR)和CPSR。同時,在每一種特權(quán)模式下都有一組SP、LR和SPSR。圖2-4表明Thumb狀態(tài)下的寄存器組織。 (1) Thumb狀態(tài)下的寄存器組織與ARM狀態(tài)下的寄存器組織的關(guān)系Thumb狀態(tài)下和ARM狀態(tài)下的R0R7是相同的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)于ARM狀態(tài)下的R15以上的

14、對應(yīng)關(guān)系如圖2-5所示。 (2) 訪問THUMB狀態(tài)下的高位寄存器(Hi-registers) 在Thumb狀態(tài)下,高位寄存器R8R15并不是標(biāo)準(zhǔn)寄存器集的一部分,但可使用匯編語言程序有限制地訪問這些寄存器,將其用作快速的暫存器.使用帶特殊變量的 MOV指令,數(shù)據(jù)可以在低位寄存器和高位寄存器之間進(jìn)行傳送,高位寄存器的值可以使用CMP和ADD指令進(jìn)行比較或加上低位寄存器中的值。 (3) 程序狀態(tài)寄存器 ARM體系結(jié)構(gòu)包含一個當(dāng)前程序狀態(tài)寄存器(CPSR)和5個備份的程序狀態(tài)寄存器 (SPSRs)。備份的程序狀態(tài)寄存器用來進(jìn)行異常處理,其功能包括:保存ALU中的當(dāng)前操作信息??刂圃试S和禁止中斷。設(shè)

15、置處理器的運(yùn)行模式。程序狀態(tài)寄存器每一位的安排如圖2-6所示. 條件碼標(biāo)志(Condition Code Flags)N、Z、C、V均為條件碼標(biāo)志位。它們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所改變,并且可以決定某條指令是否被執(zhí)行。在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的。在Thumb狀態(tài)下僅有分支指令是有條件執(zhí)行的。條件碼標(biāo)志各位的具體含義如表2-1所示。 控制位PSR的低8位(包括I、F、T和M4:0)稱為控制位,當(dāng)發(fā)生異常時這些位可以被改變。如果處理器運(yùn)行特權(quán)模式,這些位也可以由程序修改。中斷禁止位I、FI1 禁止IRQ中斷F1 禁止FIQ中斷T標(biāo)志位:該位反映處理器的運(yùn)行狀態(tài)。 對于AR

16、M體系結(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)該位為1時,執(zhí)行下一條指令以引起未定義的指令異常;當(dāng)該位為0時,表示運(yùn)行于ARM狀態(tài)。運(yùn)行模式位M4: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ù)。保留位將用

17、于ARM版本的擴(kuò)展。 2.2.6 異常異常(exception)由內(nèi)部或外部源產(chǎn)生以引起處理器處理一個事件。例如,外部中斷或試圖執(zhí)行未定義指令都會引起異常。在處理異常之前,處理器狀態(tài)必須保留,以便在異常處理程序完成后,原來的程序能夠重新執(zhí)行。同一時刻可能出現(xiàn)多個異常。 ARM支持7種類型的異常。表2-3列出了異常的類型以及處理這些異常的處理器模式。異常出現(xiàn)后,強(qiáng)制從異常類型對應(yīng)的固定存儲器地址開始執(zhí)行程序。這些固定的地址稱為異常向量(Exception Vectors)。 當(dāng)異常出現(xiàn)時,異常模式分組的R14和SPSR用于保存狀態(tài),即R14_ = return linkSPSR_ = CPSRC

18、PSR4:0 = exception mode numberCPSR5= 0 *在ARM狀態(tài)執(zhí)行*if = Reset or FIQ then CPSR6 = 1 *禁止快速中斷* *否則CPSR6不變*CPSR7 = 1 *禁止正常中斷*/PC = exception vector address當(dāng)處理異常返回時,將SPSR傳送到CPSR,R14傳送到PC。這可用兩種方法自動完成,即使用帶S位的數(shù)據(jù)處理指令,將PC作為目的寄存器;使用帶恢復(fù)CPSR的多加載指令。 復(fù) 位 處理器上一旦有復(fù)位輸入,ARM處理器立刻停止執(zhí)行當(dāng)前指令。復(fù)位完成下列操作R14_svc=UNPREDICTABLE va

19、lueSPSR_svc=UNPREDICTABLE valueCPSR4:0=0b10011 /*進(jìn)入管理模式*/CPSR50 /*在ARM狀態(tài)下執(zhí)行*/CPSR61 /*禁止快速中斷*/CPSR71 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0000ElsePC=0 x00000000復(fù)位后,ARM處理器在禁止中斷的管理模式下,從地址0 x00000000或OxFFFF0000開始執(zhí)行指令。 未定義指令異常 當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時,它必須等待任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有響應(yīng),就會出現(xiàn)未定義指

20、令異常。若試圖執(zhí)行未定義的指令,也會出現(xiàn)未定義指令異常。未定義指令異??捎糜跊]有物理協(xié)處理器(硬件)的系統(tǒng)上,對協(xié)處理器進(jìn)行軟件仿真,或在軟件仿真時進(jìn)行指令集擴(kuò)展。當(dāng)未定義指令異常出現(xiàn)時,執(zhí)行下列操作: R14_und=address of next instruction after the undefined instructionSPSR_und=CPSRCPSR4:0=0b11011 /*進(jìn)入未定義模式*/CPSR5=0 /*在ARM狀態(tài)執(zhí)行*/*CPSR6不變*/CPSR7=1 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF00

21、04ElsePC=0 x00000004在仿真未定義指令后,使用下列指令返回,即MOVS PC,R14上面的指令恢復(fù)PC(從R14_und)和CPSR(從SPSR_und),并返回到未定義指令后的下一條指令。3軟件中斷異常軟件中斷指令SWI(SoftWare Interrupt lnstruction)進(jìn)入管理模式,以請求特定的管理(操作系統(tǒng))函數(shù)。當(dāng)執(zhí)行SWI時,完成下列操作:R14_svc=address of next instruction after the SWI instructionSPSR_svc=CPSRCPSR4:0=0b10011 /*進(jìn)入管理模式*/CPSR5=0 /

22、*在ARM狀態(tài)執(zhí)行*/*CPSR6不變*/CPSR7=1 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0008ElesPC=0 x00000008完成SWI操作后,使用下列指令恢復(fù)PC(從R14_svc)和CPSR(從SPSR_svc),并返回到SWI指令后的下一條指令,即MOVS PC,R144. 預(yù)取中止(取指令存儲器中止) 存儲器系統(tǒng)發(fā)出存儲器中止(abort)信號。響應(yīng)取指激活的中止標(biāo)記所取的指令無效。若處理器試圖執(zhí)行無效指令,則產(chǎn)生預(yù)取中止異常。若指令未執(zhí)行(例如,指令在流水線中發(fā)生了轉(zhuǎn)移),則不發(fā)生預(yù)取中止。在ARMv5及以

23、上版本中,執(zhí)行BKPT指令也會產(chǎn)生預(yù)取中止異常。當(dāng)試圖執(zhí)行一條中止的指令時,將執(zhí)行下列操作:R14_abt=address of the aborted instruction + 4SPSR_abt=CPSRCPSR4:0=0b10111 /*進(jìn)入中止模式*/CPSR5=0 /*在ARM狀態(tài)執(zhí)行*/* CPSR 6不變*/CPSR7=1 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF000CElse PC=0 x0000000C確定中止原因后,使用下面指令從中止模式返回,即SUBS PC,R14,#4上面的指令恢復(fù)PC(從R14_abt

24、)和CPSR(從SPSR_abt),并返回到中止的指令。數(shù)據(jù)中止(數(shù)據(jù)訪問存儲器中止)存儲器系統(tǒng)發(fā)出存儲器中止信號。響應(yīng)數(shù)據(jù)訪問(加載或存儲)激活的中止標(biāo)記數(shù)據(jù)為無效。在下面的任何指令或異常改變CPU狀態(tài)之前,數(shù)據(jù)中止異常發(fā)生。執(zhí)行下列操作:R14_abt=address of the aborted instruction + 8SPSR_abt=CPSRCPSR4:0=0b10111 /*進(jìn)入中止模式*/CPSR5=0 /*在ARM狀態(tài)執(zhí)行*/* CPSR 6不變*/CPSR7=1 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF001

25、0Else PC=0 x00000010確定中止原因后,使用下列指令從中止模式返回,即SUBS PC,R14,#8上面的指令恢復(fù)PC(從R14_abt)和CPSR (從SPSR_abt),并返回重新執(zhí)行中止的指令。若中止的指令不需要重新執(zhí)行,則使用下面的指令:SUBS PC,R14,#4. 中斷請求(IRQ)異常通過處理器上的IRQ輸入引腳,由外部產(chǎn)生IRQ異常。IRQ異常的優(yōu)先級比FIQ異常的低。當(dāng)進(jìn)入FIQ處理時,會屏蔽掉IRQ異常。若CPSR的I位置為1,則禁止IRQ中斷。若I位清零,則ARM在指令執(zhí)行完之前檢查IRQ輸入。只能在特權(quán)模式下改變I位,當(dāng)檢測到IRQ時,執(zhí)行下列操作:R14

26、_irq=address of the aborted instruction + 4SPSR_irq=CPSRCPSR4:0=0b10010 /*進(jìn)入IRQ模式*/CPSR5=0 /*在ARM狀態(tài)執(zhí)行*/* CPSR 6不變*/CPSR7=1 /*禁止正常中斷*/If high vectors configured thenPC=0 xFFFF0018Else PC=0 x00000018使用下面的指令從中斷服務(wù)返回,即SUBS PC,R14,#4上面的指令恢復(fù)PC(從R14_irq)和CPSR(從SPSR_irq),并繼續(xù)執(zhí)行被中斷的程序。快速中斷請求(FIQ)異常通過處理器上的FIQ輸入

27、引腳,由外部產(chǎn)生FIQ異常。FIQ被設(shè)計(jì)成支持?jǐn)?shù)據(jù)傳送和通道處理,并有足夠的私有(private)寄存器,從而在這樣的應(yīng)用中可避免對寄存器保存的需求,減少了上下文切換的總開銷。當(dāng)CPSR的F位置1時,禁止快速中斷。若F位清零,則ARM在執(zhí)行指令時檢查FIQ輸入。只能在特權(quán)模式下改變F位,當(dāng)檢測到FIQ時,執(zhí)行下列操作,即R14_fiq=address of the aborted instruction + 4SPSR_fiq=CPSRCPSR4:0=0b10001 /*進(jìn)入FIQ模式*/CPSR5=0 /*在ARM狀態(tài)執(zhí)行*/CPSR6=1 /*禁止快速中斷*/CPSR7=1 /*禁止正常中

28、斷*/If high vectors configured thenPC=0 xFFFF001CElsePC=0 x0000001C 使用下面的指令從中斷服務(wù)返回,即SUBS PC,R14,#4上面的指令恢復(fù)PC(從R14_fiq)和CPSR(從SPSR_fiq),并繼續(xù)執(zhí)行被中斷的程序。FIQ向量放在最后,允許FIQ異常處理程序直接放在地址0 x0000001C或0 xFFFF001C開始的位置,而不需要由向量的分支指令執(zhí)行跳轉(zhuǎn)到異常處理程序。8. 異常優(yōu)先級異常的優(yōu)先級如表2-4所列。 優(yōu)先級異常優(yōu)先級異常1(最高)復(fù)位4IRQ2數(shù)據(jù)中止5預(yù)取中止3FIQ6(最低)未定義指信、SWI9.

29、高端向量一些ARM實(shí)現(xiàn)允許異常向量的定位由32位地址空間低端的正常地址范圍Ox00000000Ox000000lC,移到接近于地址空間高端的另一地址范圍0 xFFFF00000 xFFFF00lC。這些改變后的地址位置稱為高端向量。由IMPLEMENTATION DEFINED決定是否支持高端向量。如果支持,則在輸入硬件配置時,選擇是使用正常向量還是高端向量。10. 異常的進(jìn)入和退出只要正常的程序流程被暫時停止,則異常發(fā)生,例如服務(wù)外部的中斷。在異常被處理之前,必須保存當(dāng)前的處理器狀態(tài),以便當(dāng)處理程序完成后,原來的程序能重新開始。如果幾種異常同時發(fā)生,則對它們按固定的次序處理,可參考異常優(yōu)先級

30、(1) 進(jìn)入異常的操作處理一個異常時,ARM7TDMI用于:將下一條指令的地址保存在相應(yīng)的LR寄存器中。如果異常是從ARM狀態(tài)進(jìn)入,則保存在LR寄存器中的是下一條指令的地址(當(dāng)前PC+4或PC+8,取決于異常,見表2-5)。 如果異常是從Thumb狀態(tài)進(jìn)入,則保存在LR寄存器中的是當(dāng)前PC的偏移值。它能使程序在異常處理返回后從正確的位置重新開始。這就意味異常處不需要確定異常是從何種狀態(tài)進(jìn)入的。例如在軟件中斷(SWI)情況下,“MOVS PC,R14_svc”,總是返回到下一條指令,而與SWI是在ARM還是Thumb狀態(tài)下執(zhí)行的無關(guān)。將CPSR復(fù)制到相應(yīng)的SPSR中。迫使CPSR模式位設(shè)置成取決

31、于異常的值。迫使PC從相關(guān)的異常向量中取下一條指令。也可以設(shè)置中斷禁止位來阻止其它無法處理的異常嵌套。如果在異常發(fā)生時處理器是在Thumb狀態(tài)下,那么當(dāng)用中斷異常向量地址加載PC時,自動切換進(jìn)入ARM狀態(tài)。(2) 退出異常的操作在完成異常處理后:將LR寄存器的值減去相應(yīng)的偏移量(偏移量根據(jù)異常不同而不同),送到PC中;將SPSR復(fù)制回CPSR中;清除中斷禁止位標(biāo)志。另外,不需要顯式切換回Thumb狀態(tài),因?yàn)閺腟PSR中將CPSR T位自動設(shè)置為異常前的原值。(3) 進(jìn)入和退出異常小結(jié)表2-5中總結(jié)了進(jìn)入異常處理時保存在相應(yīng)的R14寄存器中的PC值,以及在退出異常處理時推薦使用的指令。PC是具有

32、預(yù)取中止的BL/SWI/未定義指令所取的地址;PC是從FIQ或IRQ取得優(yōu)先權(quán)后不能執(zhí)行的指令的地址;PC是產(chǎn)生數(shù)據(jù)中止的加載或存儲指令的地址;復(fù)位時保存在R14_svc中的值是不可預(yù)知的。R0R0R0R0R0R0R1R1R1R1R1R1R2R2R2R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8R8-fiqR8R8R8R8R9R9-fiqR9R9R9R9R10R10-fiqR10R10R10R10R11R11-fiqR11R11R11R11R12R12-fiqR12R12R12R12R13R13-fiq1

33、3-svc13-adt13-itq13-undR14R14-fiq14-svc14-adt14-itq14-undR15(PC)R15(PC)R15(PC)R15(PC)R15(PC)R15(PC)Systerm&User FIQ Supervister About IRG UndefinedARM狀態(tài)下的積存器組織CPSRCPSRCPSRCPSRCPSRCPSRSPSR-foqSPSR-svcSPSR-abtSPSR-inqSPSR-und返回圖 2-5 Thumb 狀態(tài)下的寄存器組織 R0 R1 R2 R3 R4 R5 R6 R7Stack Point (SP)Link Register

34、(LR)Program Counter (PC) CPSR SPSR RO R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12Stack Point (R13)Link Register (R14)Program Counter (R15) CPSR SPSRThumb狀態(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;

35、減法運(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;對于包含移位操作的非加/減運(yùn)算指令,C為移出值的最后一位;對于其它的非加/減運(yùn)算指令,C的值通常不改變返回M4:0處理器模式可訪問的寄存器0b10000用戶模式PC,CPSR,R0R140b10001FIQ模式PC,CPSR,SPSR_fiq,R14_fiqR8

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論