




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、12arm應(yīng)用系統(tǒng)開(kāi)發(fā)詳解基于s3c4510b的系統(tǒng)設(shè)計(jì)第2章 arm微處理器的編程模型本章簡(jiǎn)介arm微處理器編程模型的一些基本概念,包括工作狀態(tài)切換、數(shù)據(jù)的存儲(chǔ)格式、處理器異常等,通過(guò)對(duì)本章的閱讀,希望讀者能了解arm微處理器的基本工作原理和一些與程序設(shè)計(jì)相關(guān)的基本技術(shù)細(xì)節(jié),為以后的程序設(shè)計(jì)打下基礎(chǔ)。本章的主要內(nèi)容:arm微處理器的工作狀態(tài)arm體系結(jié)構(gòu)的存儲(chǔ)器格式arm微處理器的工作模式arm體系結(jié)構(gòu)的寄存器組織arm微處理器的異常狀態(tài)在開(kāi)始本章之前,首先對(duì)字(word)、半字(half-word)、字節(jié)(byte)的概念作一個(gè)說(shuō)明:字(word):在arm體系結(jié)構(gòu)中,字的長(zhǎng)度為32位,而
2、在8位/16位處理器體系結(jié)構(gòu)中,字的長(zhǎng)度一般為16位,請(qǐng)讀者在閱讀時(shí)注意區(qū)分。半字(half-word):在arm體系結(jié)構(gòu)中,半字的長(zhǎng)度為16位,與8位/16位處理器體系結(jié)構(gòu)中字的長(zhǎng)度一致。字節(jié)(byte):在arm體系結(jié)構(gòu)和8位/16位處理器體系結(jié)構(gòu)中,字節(jié)的長(zhǎng)度均為8位。2.1 arm微處理器的工作狀態(tài)從編程的角度看,arm微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為arm狀態(tài),此時(shí)處理器執(zhí)行32位的字對(duì)齊的arm指令;第二種為thumb狀態(tài),此時(shí)處理器執(zhí)行16位的、半字對(duì)齊的thumb指令。當(dāng)arm微處理器執(zhí)行32位的arm指令集時(shí),工作在arm狀態(tài);當(dāng)arm微處理器執(zhí)
3、行16位的thumb指令集時(shí),工作在thumb狀態(tài)。在程序的執(zhí)行過(guò)程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。狀態(tài)切換方法:arm指令集和thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,但arm微處理器在開(kāi)始執(zhí)行代碼時(shí),應(yīng)該處于arm狀態(tài)。進(jìn)入thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),可以采用執(zhí)行bx指令的方法,使微處理器從arm狀態(tài)切換到thumb狀態(tài)。此外,當(dāng)處理器處于thumb狀態(tài)時(shí)發(fā)生異常(如irq、fiq、undef、abort、swi等),則異常處理返回時(shí),自動(dòng)切換到thum
4、b狀態(tài)。進(jìn)入arm狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位為0時(shí),執(zhí)行bx指令時(shí)可以使微處理器從thumb狀態(tài)切換到arm狀態(tài)。此外,在處理器進(jìn)行異常處理時(shí),把pc指針?lè)湃氘惓DJ芥溄蛹拇嫫髦?,并從異常向量地址開(kāi)始執(zhí)行程序,也可以使處理器切換到arm狀態(tài)。2.2 arm體系結(jié)構(gòu)的存儲(chǔ)器格式arm體系結(jié)構(gòu)將存儲(chǔ)器看作是從零地址開(kāi)始的字節(jié)的線性組合。從零字節(jié)到三字節(jié)放置第一個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),從第四個(gè)字節(jié)到第七個(gè)字節(jié)放置第二個(gè)存儲(chǔ)的字?jǐn)?shù)據(jù),依次排列。作為32位的微處理器,arm體系結(jié)構(gòu)所支持的最大尋址空間為4gb(232字節(jié))。arm體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱(chēng)之為大端格式和小端格式,具體說(shuō)明如下:大端格
5、式:在這種格式中,字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放在高地址中,如圖2.1所示: 圖2.1 以大端格式存儲(chǔ)字?jǐn)?shù)據(jù)小端格式:與大端存儲(chǔ)格式相反,在小端存儲(chǔ)格式中,低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。如圖2.2所示:圖2. 2 以小端格式存儲(chǔ)字?jǐn)?shù)據(jù)2.3 指令長(zhǎng)度及數(shù)據(jù)類(lèi)型arm微處理器的指令長(zhǎng)度可以是32位(在arm狀態(tài)下),也可以為16位(在thumb狀態(tài)下)。arm微處理器中支持字節(jié)(8位)、半字(16位)、字(32位)三種數(shù)據(jù)類(lèi)型,其中,字需要4字節(jié)對(duì)齊(地址的低兩位為0)、半字需要2字節(jié)對(duì)齊(地址的最低位為0)。2.4 處理器模式arm微處理器
6、支持7種運(yùn)行模式,分別為: 用戶(hù)模式(usr):arm處理器正常的程序執(zhí)行狀態(tài) 快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道處理 外部中斷模式(irq):用于通用的中斷處理 管理模式(svc):操作系統(tǒng)使用的保護(hù)模式 數(shù)據(jù)訪問(wèn)終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。 系統(tǒng)模式(sys):運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。 未定義指令中止模式(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。arm微處理器的運(yùn)行模式可以通過(guò)軟件改變,也可以通過(guò)外部中斷或異常處理改變。大多數(shù)的應(yīng)用程序運(yùn)行在用戶(hù)模式下,當(dāng)處理器運(yùn)行在用戶(hù)模式下時(shí),某些被
7、保護(hù)的系統(tǒng)資源是不能被訪問(wèn)的。除用戶(hù)模式以外,其余的所有6種模式稱(chēng)之為非用戶(hù)模式,或特權(quán)模式(privileged modes);其中除去用戶(hù)模式和系統(tǒng)模式以外的5種又稱(chēng)為異常模式(exception modes),常用于處理中斷或異常,以及需要訪問(wèn)受保護(hù)的系統(tǒng)資源等情況。2.5 寄存器組織arm微處理器共有37個(gè)32位寄存器,其中31個(gè)為通用寄存器,6個(gè)為狀態(tài)寄存器。但是這些寄存器不能被同時(shí)訪問(wèn),具體哪些寄存器是可編程訪問(wèn)的,取決微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時(shí)候,通用寄存器r14r0、程序計(jì)數(shù)器pc、一個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問(wèn)的。2.5.1 arm狀態(tài)下的寄存器組織通用寄
8、存器:通用寄存器包括r0r15,可以分為三類(lèi):未分組寄存器r0r7; 分組寄存器r8r14程序計(jì)數(shù)器pc(r15)未分組寄存器r0r7:在所有的運(yùn)行模式下,未分組寄存器都指向同一個(gè)物理寄存器,他們未被系統(tǒng)用作特殊的用途,因此,在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時(shí),由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,可能會(huì)造成寄存器中數(shù)據(jù)的破壞,這一點(diǎn)在進(jìn)行程序設(shè)計(jì)時(shí)應(yīng)引起注意。分組寄存器r8r14對(duì)于分組寄存器,他們每一次所訪問(wèn)的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)。對(duì)于r8r12來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器,當(dāng)使用fiq模式時(shí),訪問(wèn)寄存器r8_fiqr12_fiq;當(dāng)使用除fiq模式以
9、外的其他模式時(shí),訪問(wèn)寄存器r8_usrr12_usr。對(duì)于r13、r14來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶(hù)模式與系統(tǒng)模式共用,另外5個(gè)物理寄存器對(duì)應(yīng)于其他5種不同的運(yùn)行模式。采用以下的記號(hào)來(lái)區(qū)分不同的物理寄存器:r13_r14_其中,mode為以下幾種模式之一:usr、fiq、irq、svc、abt、und。寄存器r13在arm指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶(hù)也可使用其他的寄存器作為堆棧指針。而在thumb指令集中,某些指令強(qiáng)制性的要求使用r13作為堆棧指針。由于處理器的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器r13,在用戶(hù)應(yīng)用程序的初始化部分,一般都要初始
10、化每種模式下的r13,使其指向該運(yùn)行模式的??臻g,這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),可以將需要保護(hù)的寄存器放入r13所指向的堆棧,而當(dāng)程序從異常模式返回時(shí),則從對(duì)應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異常發(fā)生后程序的正常執(zhí)行。r14也稱(chēng)作子程序連接寄存器(subroutine link register)或連接寄存器lr。當(dāng)執(zhí)行bl子程序調(diào)用指令時(shí),r14中得到r15(程序計(jì)數(shù)器pc)的備份。其他情況下,r14用作通用寄存器。與之類(lèi)似,當(dāng)發(fā)生中斷或異常時(shí),對(duì)應(yīng)的分組寄存器r14_svc、r14_irq、r14_fiq、r14_abt和r14_und用來(lái)保存r15的返回值。寄存器r14常用在如下的
11、情況:在每一種運(yùn)行模式下,都可用r14保存子程序的返回地址,當(dāng)用bl或blx指令調(diào)用子程序時(shí),將pc的當(dāng)前值拷貝給r14,執(zhí)行完子程序后,又將r14的值拷貝回pc,即可完成子程序的調(diào)用返回。以上的描述可用指令完成:1、執(zhí)行以下任意一條指令:movpc,lrbxlr2、在子程序入口處使用以下指令將r14存入堆棧:stmfdsp!,lr對(duì)應(yīng)的,使用以下指令可以完成子程序返回:ldmfdsp!,pcr14也可作為通用寄存器。程序計(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;雖然可以用
12、作通用寄存器,但是有一些指令在使用r15時(shí)有一些特殊限制,若不注意,執(zhí)行的結(jié)果將是不可預(yù)料的。在arm狀態(tài)下,pc的0和1位是0,在thumb狀態(tài)下,pc的0位是0。r15雖然也可用作通用寄存器,但一般不這么使用,因?yàn)閷?duì)r15的使用有一些特殊的限制,當(dāng)違反了這些限制時(shí),程序的執(zhí)行結(jié)果是未知的。由于arm體系結(jié)構(gòu)采用了多級(jí)流水線技術(shù),對(duì)于arm指令集而言,pc總是指向當(dāng)前指令的下兩條指令的地址,即pc的值為當(dāng)前指令的地址值加8個(gè)字節(jié)。圖2.3 arm狀態(tài)下的寄存器組織在arm狀態(tài)下,任一時(shí)刻可以訪問(wèn)以上所討論的16個(gè)通用寄存器和一到兩個(gè)狀態(tài)寄存器。在非用戶(hù)模式(特權(quán)模式)下,則可訪問(wèn)到特定模式分
13、組寄存器,圖2.3說(shuō)明在每一種運(yùn)行模式下,哪一些寄存器是可以訪問(wèn)的。寄存器r16:寄存器r16用作cpsr(current program status register,當(dāng)前程序狀態(tài)寄存器),cpsr可在任何運(yùn)行模式下被訪問(wèn),它包括條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志位,以及其他一些相關(guān)的控制和狀態(tài)位。每一種運(yùn)行模式下又都有一個(gè)專(zhuān)用的物理狀態(tài)寄存器,稱(chēng)為spsr(saved program status register,備份的程序狀態(tài)寄存器),當(dāng)異常發(fā)生時(shí),spsr用于保存cpsr的當(dāng)前值,從異常退出時(shí)則可由spsr來(lái)恢復(fù)cpsr。由于用戶(hù)模式和系統(tǒng)模式不屬于異常模式,他們沒(méi)有sps
14、r,當(dāng)在這兩種模式下訪問(wèn)spsr,結(jié)果是未知的。2.5.2 thumb狀態(tài)下的寄存器組織thumb狀態(tài)下的寄存器集是arm狀態(tài)下寄存器集的一個(gè)子集,程序可以直接訪問(wèn)8個(gè)通用寄存器(r7r0)、程序計(jì)數(shù)器(pc)、堆棧指針(sp)、連接寄存器(lr)和cpsr。同時(shí),在每一種特權(quán)模式下都有一組sp、lr和spsr。圖2.4表明thumb狀態(tài)下的寄存器組織。圖2.4 thumb狀態(tài)下的寄存器組織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對(duì)應(yīng)于
15、arm狀態(tài)下的r13。thumb狀態(tài)下的lr對(duì)應(yīng)于arm狀態(tài)下的r14。 thumb狀態(tài)下的程序計(jì)數(shù)器對(duì)應(yīng)于arm狀態(tài)下r15以上的對(duì)應(yīng)關(guān)系如圖2.5所示:圖2.5 thumb狀態(tài)下的寄存器組織訪問(wèn)thumb狀態(tài)下的高位寄存器(hi-registers):在thumb狀態(tài)下,高位寄存器r8r15并不是標(biāo)準(zhǔn)寄存器集的一部分,但可使用匯編語(yǔ)言程序受限制的訪問(wèn)這些寄存器,將其用作快速的暫存器。使用帶特殊變量的mov指令,數(shù)據(jù)可以在低位寄存器和高位寄存器之間進(jìn)行傳送;高位寄存器的值可以使用cmp和add指令進(jìn)行比較或加上低位寄存器中的值。2.5.3 程序狀態(tài)寄存器arm體系結(jié)構(gòu)包含一個(gè)當(dāng)前程序狀態(tài)寄存
16、器(cpsr)和五個(gè)備份的程序狀態(tài)寄存器(spsrs)。備份的程序狀態(tài)寄存器用來(lái)進(jìn)行異常處理,其功能包括:保存alu中的當(dāng)前操作信息控制允許和禁止中斷設(shè)置處理器的運(yùn)行模式程序狀態(tài)寄存器的每一位的安排如圖2.6所示:圖2.6 程序狀態(tài)寄存器格式條件碼標(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所示:表2-1條件碼標(biāo)志的具體含義標(biāo)志位含 義n當(dāng)用兩個(gè)補(bǔ)碼表示的帶
17、符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),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)算(包括比較指令cmn):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無(wú)符號(hào)數(shù)溢出),c=1,否則c=0。 減法運(yùn)算(包括比較指令cmp):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無(wú)符號(hào)數(shù)溢出),c=0,否則c=1。 對(duì)于包含移位操作的非加/減運(yùn)算指令,c為移出值的最后一位。 對(duì)于其他的非加/減運(yùn)算指令,c的值通常不改變。v可以有2種方法設(shè)置v的值: 對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),v=1表示符號(hào)位溢出。 對(duì)于其他的非加
18、/減運(yùn)算指令,v的值通常不改變。q在arm v5及以上版本的e系列處理器中,用q標(biāo)志位指示增強(qiáng)的dsp運(yùn)算指令是否發(fā)生了溢出。在其他版本的處理器中,q標(biāo)志位無(wú)定義。控制位psr的低8位(包括i、f、t和m4:0)稱(chēng)為控制位,當(dāng)發(fā)生異常時(shí)這些位可以被改變。如果處理器運(yùn)行特權(quán)模式,這些位也可以由程序修改。中斷禁止位i、f:i=1 禁止irq中斷;f=1 禁止fiq中斷。t標(biāo)志位:該位反映處理器的運(yùn)行狀態(tài)。對(duì)于arm體系結(jié)構(gòu)v5及以上的版本的t系列處理器,當(dāng)該位為1時(shí),程序運(yùn)行于thumb狀態(tài),否則運(yùn)行于arm狀態(tài)。對(duì)于arm體系結(jié)構(gòu)v5及以上的版本的非t系列處理器,當(dāng)該位為1時(shí),執(zhí)行下一條指令以引
19、起為定義的指令異常;當(dāng)該位為0時(shí),表示運(yùn)行于arm狀態(tài)。運(yùn)行模式位m4:0:m0、m1、m2、m3、m4是模式位。這些位決定了處理器的運(yùn)行模式。具體含義如表2-2所示:表2-2運(yùn)行模式位m4:0的具體含義m4:0處理器模式可訪問(wèn)的寄存器0b10000用戶(hù)模式pc,cpsr,r0-r140b10001fiq模式pc,cpsr, spsr_fiq,r14_fiq-r8_fiq, r7r00b10010irq模式pc,cpsr, spsr_irq,r14_irq,r13_irq,r12r00b10011管理模式pc,cpsr, spsr_svc,r14_svc,r13_svc,r12r0,0b101
20、11中止模式pc,cpsr, spsr_abt,r14_abt,r13_abt, r12r0,0b11011未定義模式pc,cpsr, spsr_und,r14_und,r13_und, r12r0,0b11111系統(tǒng)模式pc,cpsr(arm v4及以上版本), r14r0由表2-2可知,并不是所有的運(yùn)行模式位的組合都是有效地,其他的組合結(jié)果會(huì)導(dǎo)致處理器進(jìn)入一個(gè)不可恢復(fù)的狀態(tài)。保留位psr中的其余位為保留位,當(dāng)改變psr中的條件碼標(biāo)志位或者控制位時(shí),保留位不要被改變,在程序中也不要使用保留位來(lái)存儲(chǔ)數(shù)據(jù)。保留位將用于arm版本的擴(kuò)展。2.6 異常(exceptions)當(dāng)正常的程序執(zhí)行流程發(fā)生
21、暫時(shí)的停止時(shí),稱(chēng)之為異常,例如處理一個(gè)外部的中斷請(qǐng)求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保留,這樣當(dāng)異常處理完成之后,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器允許多個(gè)異常同時(shí)發(fā)生,它們將會(huì)按固定的優(yōu)先級(jí)進(jìn)行處理。arm體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。2.6.1 arm體系結(jié)構(gòu)所支持的異常類(lèi)型arm體系結(jié)構(gòu)所支持的異常及具體含義如表2-3所示。表2-3 arm體系結(jié)構(gòu)所支持的異常異常類(lèi)型具體含義復(fù)位當(dāng)處理器的復(fù)位電平有效時(shí),產(chǎn)生復(fù)位異常,程序跳轉(zhuǎn)到復(fù)位異常處理程序處執(zhí)行。未定義指令當(dāng)arm處理器或協(xié)處理器遇到不能處理的指令時(shí),產(chǎn)生未定義指令異
22、常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真。軟件中斷該異常由執(zhí)行swi指令產(chǎn)生,可用于用戶(hù)模式下的程序調(diào)用特權(quán)操作指令??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用。指令預(yù)取中止若處理器預(yù)取指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn),存儲(chǔ)器會(huì)向處理器發(fā)出中止信號(hào),但當(dāng)預(yù)取的指令被執(zhí)行時(shí),才會(huì)產(chǎn)生指令預(yù)取中止異常。數(shù)據(jù)中止若處理器數(shù)據(jù)訪問(wèn)指令的地址不存在,或該地址不允許當(dāng)前指令訪問(wèn)時(shí),產(chǎn)生數(shù)據(jù)中止異常。irq(外部中斷請(qǐng)求)當(dāng)處理器的外部中斷請(qǐng)求引腳有效,且cpsr中的i位為0時(shí),產(chǎn)生irq異常。系統(tǒng)的外設(shè)可通過(guò)該異常請(qǐng)求中斷服務(wù)。fiq(快速中斷請(qǐng)求)當(dāng)處理器的快速中斷請(qǐng)求引腳有效,且cpsr中的f位為0時(shí),產(chǎn)生
23、fiq異常。2.6.2 對(duì)異常的響應(yīng)當(dāng)一個(gè)異常出現(xiàn)以后,arm微處理器會(huì)執(zhí)行以下幾步操作:1、將下一條指令的地址存入相應(yīng)連接寄存器lr,以便程序在處理異常返回時(shí)能從正確的位置重新開(kāi)始執(zhí)行。若異常是從arm狀態(tài)進(jìn)入,lr寄存器中保存的是下一條指令的地址(當(dāng)前pc4或pc8,與異常的類(lèi)型有關(guān));若異常是從thumb狀態(tài)進(jìn)入,則在lr寄存器中保存當(dāng)前pc的偏移量,這樣,異常處理程序就不需要確定異常是從何種狀態(tài)進(jìn)入的。例如:在軟件中斷異常swi,指令 mov pc,r14_svc總是返回到下一條指令,不管swi是在arm狀態(tài)執(zhí)行,還是在thumb狀態(tài)執(zhí)行。2、將cpsr復(fù)制到相應(yīng)的spsr中。3、根據(jù)
24、異常類(lèi)型,強(qiáng)制設(shè)置cpsr的運(yùn)行模式位。4、強(qiáng)制pc從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。還可以設(shè)置中斷禁止位,以禁止中斷發(fā)生。如果異常發(fā)生時(shí),處理器處于thumb狀態(tài),則當(dāng)異常向量地址加載入pc時(shí),處理器自動(dòng)切換到arm狀態(tài)。arm微處理器對(duì)異常的響應(yīng)過(guò)程用偽碼可以描述為:r14_ = return linkspsr_ = cpsrcpsr4:0 = exception mode numbercpsr5 = 0;當(dāng)運(yùn)行于arm工作狀態(tài)時(shí)if = reset or fiq then;當(dāng)響應(yīng)fiq異常時(shí),禁止新的fiq異常cpsr6 = 1cpsr7 = 1pc
25、= exception vector address 2.6.3 從異常返回異常處理完畢之后,arm微處理器會(huì)執(zhí)行以下幾步操作從異常返回: 1、將連接寄存器lr的值減去相應(yīng)的偏移量后送到pc中。2、將spsr復(fù)制回cpsr中。3、若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除??梢哉J(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開(kāi)始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。2.6.4 各類(lèi)異常的具體描述fiq(fast interrupt request)fiq異常是為了支持?jǐn)?shù)據(jù)傳輸或者通道處理而設(shè)計(jì)的。在arm狀態(tài)下,系統(tǒng)有足夠的私有寄存器,從而可以避免對(duì)寄存器保存的需求,并減小了系統(tǒng)上下文切換的開(kāi)銷(xiāo)。若將
26、cpsr的f位置為1,則會(huì)禁止fiq中斷,若將cpsr的f位清零,處理器會(huì)在指令執(zhí)行時(shí)檢查fiq的輸入。注意只有在特權(quán)模式下才能改變f位的狀態(tài)??捎赏獠客ㄟ^(guò)對(duì)處理器上的nfiq引腳輸入低電平產(chǎn)生fiq。不管是在arm狀態(tài)還是在thumb狀態(tài)下進(jìn)入fiq模式,fiq處理程序均會(huì)執(zhí)行以下指令從fiq模式返回:subs pc,r14_fiq ,#4該指令將寄存器r14_fiq的值減去4后,復(fù)制到程序計(jì)數(shù)器pc中,從而實(shí)現(xiàn)從異常處理程序中的返回,同時(shí)將spsr_mode寄存器的內(nèi)容復(fù)制到當(dāng)前程序狀態(tài)寄存器cpsr中。irq(interrupt request)irq異常屬于正常的中斷請(qǐng)求,可通過(guò)對(duì)處理
27、器的nirq引腳輸入低電平產(chǎn)生,irq的優(yōu)先級(jí)低于fiq,當(dāng)程序執(zhí)行進(jìn)入fiq異常時(shí),irq可能被屏蔽。若將cpsr的i位置為1,則會(huì)禁止irq中斷,若將cpsr的i位清零,處理器會(huì)在指令執(zhí)行完之前檢查irq的輸入。注意只有在特權(quán)模式下才能改變i位的狀態(tài)。不管是在arm狀態(tài)還是在thumb狀態(tài)下進(jìn)入irq模式,irq處理程序均會(huì)執(zhí)行以下指令從irq模式返回:subs pc , r14_irq , #4該指令將寄存器r14_irq的值減去4后,復(fù)制到程序計(jì)數(shù)器pc中,從而實(shí)現(xiàn)從異常處理程序中的返回,同時(shí)將spsr_mode寄存器的內(nèi)容復(fù)制到當(dāng)前程序狀態(tài)寄存器cpsr中。abort(中止)產(chǎn)生中止
28、異常意味著對(duì)存儲(chǔ)器的訪問(wèn)失敗。arm微處理器在存儲(chǔ)器訪問(wèn)周期內(nèi)檢查是否發(fā)生中止異常。中止異常包括兩種類(lèi)型:指令預(yù)取中止:發(fā)生在指令預(yù)取時(shí)。數(shù)據(jù)中止:發(fā)生在數(shù)據(jù)訪問(wèn)時(shí)。當(dāng)指令預(yù)取訪問(wèn)存儲(chǔ)器失敗時(shí),存儲(chǔ)器系統(tǒng)向arm處理器發(fā)出存儲(chǔ)器中止(abort)信號(hào),預(yù)取的指令被記為無(wú)效,但只有當(dāng)處理器試圖執(zhí)行無(wú)效指令時(shí),指令預(yù)取中止異常才會(huì)發(fā)生,如果指令未被執(zhí)行,例如在指令流水線中發(fā)生了跳轉(zhuǎn),則預(yù)取指令中止不會(huì)發(fā)生。若數(shù)據(jù)中止發(fā)生,系統(tǒng)的響應(yīng)與指令的類(lèi)型有關(guān)。當(dāng)確定了中止的原因后,abort處理程序均會(huì)執(zhí)行以下指令從中止模式返回,無(wú)論是在arm狀態(tài)還是thumb狀態(tài):subs pc, r14_abt, #4
29、;指令預(yù)取中止subs pc, r14_abt, #8;數(shù)據(jù)中止以上指令恢復(fù)pc(從r14_abt)和cpsr(從spsr_abt)的值,并重新執(zhí)行中止的指令。software interruupt(軟件中斷)軟件中斷指令(swi)用于進(jìn)入管理模式,常用于請(qǐng)求執(zhí)行特定的管理功能。軟件中斷處理程序執(zhí)行以下指令從swi模式返回,無(wú)論是在arm狀態(tài)還是thumb狀態(tài):mov pc , r14_svc以上指令恢復(fù)pc(從r14_svc)和cpsr(從spsr_svc)的值,并返回到swi的下一條指令。undefined instruction(未定義指令)當(dāng)arm處理器遇到不能處理的指令時(shí),會(huì)產(chǎn)生未定義指令異常。采用這種機(jī)制,可以通過(guò)軟件仿真擴(kuò)展arm或thumb指令集。在仿真未定義指令后,處理器執(zhí)行以下程序返回,無(wú)論是在arm狀態(tài)還是thumb狀態(tài):movs pc, r14_und以上指令恢復(fù)pc(從r14_und)和cpsr(從spsr_und)的值,并返回到未定義指令后的下一條指令。2.6.5 異常進(jìn)入/退出小節(jié)表2-4總結(jié)了進(jìn)入異常處理時(shí)保存在相應(yīng)r14中的pc值,及在退出異常
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 渝中區(qū)危險(xiǎn)化品運(yùn)輸合同6篇
- 2024屆高考語(yǔ)文專(zhuān)題復(fù)習(xí)彈琴三境界 寫(xiě)作指導(dǎo)
- 餐廳窗口承包合同
- 2025年青海道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 公司和個(gè)人勞務(wù)合同
- 學(xué)校食堂檔口承包合同
- 會(huì)議邀請(qǐng)函模板表
- 公司財(cái)務(wù)管理規(guī)章制度的修訂與完善建議
- 企業(yè)高管聘用合同
- 農(nóng)田租地合同協(xié)議書(shū)
- 2024關(guān)于進(jìn)一步提升基層應(yīng)急管理能力的意見(jiàn)詳細(xì)解讀課件
- 2024版合同范本之711便利店加盟合同
- 2022電力監(jiān)控系統(tǒng)網(wǎng)絡(luò)安全監(jiān)測(cè)裝置說(shuō)明書(shū)
- 公路工程標(biāo)準(zhǔn)施工招標(biāo)文件(2018年版)
- 近三年投標(biāo)沒(méi)有發(fā)生過(guò)重大質(zhì)量安全事故的書(shū)面聲明范文
- 《工程熱力學(xué)》(第四版)全冊(cè)配套完整課件
- 2024時(shí)事政治考試題庫(kù)(100題)
- 2024年司法考試真題及答案
- 膽總管切開(kāi)取石T管引流術(shù)護(hù)理查房參考課件
- YYT 1814-2022 外科植入物 合成不可吸收補(bǔ)片 疝修補(bǔ)補(bǔ)片
- 工程機(jī)械設(shè)備綜合保險(xiǎn)
評(píng)論
0/150
提交評(píng)論