ARM32位單片機(jī)的結(jié)構(gòu)編程和開發(fā)工具_(dá)第1頁
ARM32位單片機(jī)的結(jié)構(gòu)編程和開發(fā)工具_(dá)第2頁
ARM32位單片機(jī)的結(jié)構(gòu)編程和開發(fā)工具_(dá)第3頁
ARM32位單片機(jī)的結(jié)構(gòu)編程和開發(fā)工具_(dá)第4頁
ARM32位單片機(jī)的結(jié)構(gòu)編程和開發(fā)工具_(dá)第5頁
已閱讀5頁,還剩117頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第12章 ARM32位單片機(jī)的結(jié)構(gòu)、編程和開發(fā)工具112.1ARM內(nèi)核體系系結(jié)構(gòu)12.2ARM編程模型型12.3ARM匯編指令令12.4ARM匯編程序序設(shè)計(jì)12.5ARM程序開發(fā)發(fā)工具ADS本章內(nèi)容容12.1ARM內(nèi)內(nèi)核體系系結(jié)構(gòu)ARM是是一類微微處理器器,同時時也是一一個公司司的名字字。ARM公司司于1990年年11月月在英國國劍橋成成立(原原名Advanced RISCMachine),專門從從事基于于RISC技術(shù)術(shù)的芯片片設(shè)計(jì)、開發(fā)和和授權(quán)。目前,ARM處理器器(即采采用ARMIP核的的處理器器)已遍遍及工業(yè)業(yè)控制、通信系系統(tǒng)、無無線通訊訊、網(wǎng)絡(luò)絡(luò)系統(tǒng)、消費(fèi)類類電子產(chǎn)產(chǎn)品、成成像和安安全

2、產(chǎn)品品等各類類產(chǎn)品市市場。截截止到2012年,基基于ARM技術(shù)術(shù)設(shè)計(jì)的的處理器器已經(jīng)占占據(jù)32位RISC微微處理器器約80%以上上的市場場份額,ARM技術(shù)正正在逐步步滲入到到我們生生活的各各方面。ARM處理器是是第一個個為商業(yè)業(yè)用途開開發(fā)的RISC微處理器器。ARM所采用的的體系結(jié)結(jié)構(gòu)對于于傳統(tǒng)的的RISC體系結(jié)構(gòu)構(gòu)既有繼繼承,又又有舍棄棄和發(fā)展展,即完完全根據(jù)據(jù)實(shí)際設(shè)設(shè)計(jì)的需需要仔細(xì)細(xì)研究,沒有機(jī)機(jī)械照搬搬。最初初的ARM設(shè)計(jì)最關(guān)關(guān)心的是是必須保保持設(shè)計(jì)計(jì)的簡單單性。ARM的簡單性性在ARM的硬件組組織和實(shí)實(shí)現(xiàn)方面面比指令令集的結(jié)結(jié)構(gòu)方面面體現(xiàn)的的更明顯顯。但是是ARM仍保留一一些CISC的

3、特征,并且因因此達(dá)到到比純粹粹的RISC更高的代代碼密度度,使得得ARM在開始時時就獲得得了其功功率效率率和較小小的核面面積的優(yōu)優(yōu)勢。12.1.1ARM體系結(jié)結(jié)構(gòu)版本本ARM微微處理器器內(nèi)核中中普遍采采用了流流水線結(jié)結(jié)構(gòu),隨隨著ARM內(nèi)核核的發(fā)展展,其流流水線結(jié)結(jié)構(gòu)越來來越復(fù)雜雜。常見見的ARM處理理器內(nèi)核核流水線線如圖12-1所示。圖12-1ARM處理理器內(nèi)核核流水線線工作示示意圖12.1.1ARM體系結(jié)結(jié)構(gòu)版本本迄今為止止,ARM體系系結(jié)構(gòu)共共定義了了8個版版本,版版本號分分別為v1v8,從從版本v1到v8,ARM體體系的指指令集功功能不斷斷擴(kuò)大。同時,各版本本中還有有一些變變種,這這些變

4、種種定義該該版本指指令集中中不同的的功能。ARM處理器器系列中中的各種種處理器器,實(shí)現(xiàn)現(xiàn)技術(shù)各各不相同同,性能能差別很很大,應(yīng)應(yīng)用場合合也不同同,但只只要它們們支持同同一ARM體系系版本,基于它它們的應(yīng)應(yīng)用軟件件將是兼兼容的。需要注意意,ARM的體體系結(jié)構(gòu)構(gòu)版本號號并不是是ARM核的版版本號。12.1.1ARM體系結(jié)結(jié)構(gòu)版本本常見的ARM體體系架構(gòu)構(gòu)與ARM核的的版本對對應(yīng)關(guān)系系見表12-1。 ARM核 體系結(jié)構(gòu)ARM1ARMv1ARM2ARMv2ARM6, ARM600, ARM610, ARM7, ARM700, ARM710ARMv3StrongARM, ARM8, ARM810, AR

5、M810 ARMv4ARM9E-S, ARM10TDM1, ARM1020EARMv5ARM1136J(F)-S, ARM1176JZ(F)-S, ARM11MPCoreARMv6ARMCortex-M, ARMCortex-R, ARMCortex-AARMv7表12-1常見見的ARM體系系架構(gòu)與與ARM核的版版本對應(yīng)應(yīng)關(guān)系12.1.1ARM體系結(jié)結(jié)構(gòu)版本本基于ARM的處處理器內(nèi)內(nèi)核簡稱稱ARM內(nèi)核,內(nèi)核并并不是芯芯片,ARM內(nèi)內(nèi)核與其其他部件件組合(如存儲儲器、定定時器和和片內(nèi)外外設(shè)接口口等)在在一起才才構(gòu)成芯芯片。圖12-2ARM芯芯片內(nèi)部部主要模模塊示意意圖12.1.2ARM內(nèi)核ARM

6、芯芯片中只只有處理理器內(nèi)核核由ARM公司司設(shè)計(jì),其他外外圍模塊塊由獲得得ARM公司處處理器IP授權(quán)權(quán)的芯片片廠商自自行設(shè)計(jì)計(jì)。芯片片廠商針針對不同同的應(yīng)用用領(lǐng)域,通過設(shè)設(shè)計(jì)具有有很強(qiáng)針針對性的的專用硬硬件加速速器,根根據(jù)外設(shè)設(shè)搭配不不同的接接口電路路等設(shè)計(jì)計(jì)出適用用于專業(yè)業(yè)領(lǐng)域的的SOC芯片,從而實(shí)實(shí)現(xiàn)基于于相同處處理器內(nèi)內(nèi)核芯片片產(chǎn)品的的差異化化。ARM處處理器內(nèi)內(nèi)核不但但包括CPU,還包括括高速緩緩存、MMU控控制器、嵌入式式跟蹤宏宏單元、TCM接口、總線控控制邏輯輯、AHB接口口、協(xié)處處理器、中斷控控制器等等電路模模塊。整整個ARM處理理器內(nèi)核核的核心心是CPU。雖雖然隨著著ARM處理器

7、器內(nèi)核的的升級,其CPU也不不斷改進(jìn)進(jìn),但其其基本結(jié)結(jié)構(gòu)主要要由32位ALU、31個32位通通用寄存存器及6個狀態(tài)態(tài)寄存器器、32個8位位乘法器器、32個桶形形移位寄寄存器、指令譯譯碼及控控制邏輯輯、指令令流水線線和數(shù)據(jù)據(jù)/地址址寄存器器組成。12.1.2ARM內(nèi)核圖12-3ARMCPU基基本組成成模型12.1.2ARM內(nèi)核ARM處處理器是是32位位處理器器,但兼兼容16位指令令集和數(shù)數(shù)據(jù)類型型。從編編程的角角度看,ARM處理器器有以下下兩種操操作狀態(tài)態(tài):ARM狀狀態(tài)32位,處理器器執(zhí)行的的是字的的ARM指令;Thumb狀態(tài)態(tài)16位,處理器器執(zhí)行的的是半字字的Thumb指令。在程序執(zhí)執(zhí)行過程程

8、中,處處理器可可以隨時時在這兩兩種操作作狀態(tài)之之間切換換。值得得注意的的是,操操作狀態(tài)態(tài)的切換換并不影影響處理理器的工工作模式式或寄存存器的內(nèi)內(nèi)容。ARM處處理器復(fù)復(fù)位后開開始執(zhí)行行代碼時時,應(yīng)該該處于ARM狀狀態(tài)。12.2ARM編編程模型型12.2.1處處理器器狀態(tài)ARM指指令集和和Thumb指指令集均均有切換換處理器器狀態(tài)的的指令,并可在在兩種操操作狀態(tài)態(tài)之間切切換。兩兩個狀態(tài)態(tài)可以按按以下方方法切換換:進(jìn)入Thumb狀態(tài)當(dāng)操作數(shù)數(shù)寄存器器的狀態(tài)態(tài)位(最最低位)為1時時,執(zhí)行行BX指指令就可可以進(jìn)行行Thumb狀狀態(tài)。如如果處理理器在Thumb狀態(tài)態(tài)發(fā)生異異常(所所有異常常處理都都在ARM

9、狀態(tài)態(tài)下執(zhí)行行),則則當(dāng)異常常處理返返回時自自動切換換到Thumb狀態(tài)。進(jìn)入ARM狀態(tài)態(tài)操作數(shù)寄寄存器的的狀態(tài)位位(最低低位)為為0時,執(zhí)行BX指令令就可以以進(jìn)行ARM狀狀態(tài)。處處理器進(jìn)進(jìn)行異常常處理時時,把PC的值值放入異異常模式式鏈接寄寄存器中中,從異異常向量量地址開開始執(zhí)行行程序,系統(tǒng)自自動進(jìn)入入ARM狀態(tài)。處理器狀狀態(tài)的切切換ARM體體系結(jié)構(gòu)構(gòu)支持7種處理理器模式式:用戶戶模式、快中斷斷模式、中斷模模式、管管理模式式、中止止模式、未定義義模式和和系統(tǒng)模模式。具具體參考考表12-2。12.2.2處處理器器模式處理器模式用途備注用戶(usr)正常程序工作模式不能直接切換到其它模式快中斷(f

10、iq)處理高速中斷,用于高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入該模式中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進(jìn)入該模式管理(svc)操作系統(tǒng)使用的保護(hù)模式,系統(tǒng)復(fù)位后的默認(rèn)模式系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進(jìn)入該模式中止(abt)用于支持虛擬內(nèi)存和存儲器保護(hù)數(shù)據(jù)或指令預(yù)取中止時進(jìn)入該模式未定義(und)用于支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進(jìn)行該模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶類似,但具有可以直接切換到其它模式等特權(quán)表12-2處處理器模模式及其其用途除用戶模模式外,其它模模式為特特權(quán)模式式。ARM內(nèi)內(nèi)部寄存存器和一一些片內(nèi)內(nèi)外設(shè)在在硬件設(shè)設(shè)計(jì)上只只允許(或可

11、選選為只允允許)特特權(quán)模式式下訪問問。此處處,特權(quán)權(quán)模式可可以自由由地切換換處理器器模式,而用戶戶模式不不能直接接切換別別的模式式。有5種處處理器模模式稱為為異常模模式,它它們是:快中斷斷模式、中斷模模式、管管理模式式、中止止模式、未定義義模式。它們除了了可以通通過程序序切換進(jìn)進(jìn)入外,也可以以由特定定的異常常進(jìn)入。當(dāng)特定定的異常常出現(xiàn)時時,處理理器進(jìn)入入相應(yīng)的的模式。每種模模式都有有某些附附加的寄寄存器,以避免免異常退退出時用用戶模式式的狀態(tài)態(tài)不可靠靠。系統(tǒng)模式式與用戶戶模式一一樣不能能由異常常進(jìn)入,且使用用與用戶戶模式完完全相同同的寄存存器。然而系統(tǒng)統(tǒng)模式是是特權(quán)模模式,不不受用戶戶模式的的

12、限制。有了系系統(tǒng)模式式,操作作系統(tǒng)要要訪問用用戶模式式的寄存存器就比比較方便便。同時時,操作作系統(tǒng)的的一些特特權(quán)任務(wù)務(wù)可以使使用這個個模式,以訪問問一些受受控的資資源而不不必?fù)?dān)心心異常出出現(xiàn)時的的任務(wù)狀狀態(tài)變得得不可靠靠。ARM處處理器共共有37個32位寄存存器:31個通通用寄存存器R0R15、R13_svc、R14_svc、R13_abt、R14_abt、R13_unt、R14_unt、R13_irq、R14_irt和R8_frqR14_frq;6個狀態(tài)態(tài)寄存器器CPSR、SPSR_svc、SPSR_abt、SPSR_unt、SPSR_irq和SPSR_fiq。這些寄存存器并不不是在同同一時

13、間間全都可可以被訪訪問,具具體哪些些寄存器器可編程程訪問,取決于于處理器器狀態(tài)和和具體的的操作模模式。12.2.3寄寄存器器集(1)通通用寄存存器(2)程程序計(jì)數(shù)數(shù)器(PC)(3)程程序狀態(tài)態(tài)寄存器器(PSR)(4)條條件碼標(biāo)標(biāo)志位(5)控控制位(6)ARM狀狀態(tài)寄存存器與Thumb狀態(tài)態(tài)寄存器器之間的的關(guān)系12.2.3寄寄存器器集12.2.3寄寄存器器集通用寄存存器包括括R0R15,可以以分為兩兩類:不不分組寄寄存器(R0R7)和分組組寄存器器(R8R14)。1)不分分組寄存存器(R0R7)。在處理器器的所有有模式下下,不分分組寄存存器中的的每個都都指向一一個物理理寄存器器,且未未被系統(tǒng)統(tǒng)用

14、于特特殊用途途。因此此,在中中斷或異異常處理理中進(jìn)行行模式切切換時,由于不不同的處處理器模模式均使使用相同同的物理理寄存器器,可能能會破壞壞寄存器器中的數(shù)數(shù)據(jù),進(jìn)進(jìn)行程序序設(shè)計(jì)時時應(yīng)引起起注意。(1)通通用寄存存器2)分組寄存存器(R8R14)。分組寄存存器中的的每一次次所訪問問的物理理寄存器器都與處處理器當(dāng)當(dāng)前的模模式有關(guān)關(guān)。若要要訪問特特定的物物理寄存存器,則則要使用用規(guī)定的的物理寄寄存器名名字后綴綴。物理寄存存器名字字形式如如下:R13_R14_其中,是寄存存器后綴綴,分別別使用usr、svc、fiq、irq、abt和und表示示6種模模式。對于寄存存器R8R12,每個寄寄存器對對應(yīng)2個

15、個不同的的物理寄寄存器,當(dāng)使用用fiq模式時時訪問寄寄存器R8_fiqR12_fiq;當(dāng)當(dāng)使用除除fiq模式外外的其他他模式時時訪問寄寄存器R8R12。對于寄存存器R13和R14,每個寄寄存器對對應(yīng)6個個不同的的物理寄寄存器。其中的的一個物物理寄存存器是用用戶模式式和系統(tǒng)統(tǒng)模式公公用的,其余5個分別別用于5種異常常模式。寄存器R13通常作為為堆棧指指針(SP),用于保保存當(dāng)前前處理器器工作模模式下堆堆棧的棧棧頂?shù)刂分贰<拇嫫鱎14作為鏈接接寄存器器(LR),用用于保存存子程序序的返回回地址。當(dāng)子程程序折返返回地址址保存在在堆棧中中,R14也可可作為通通用寄存存器。處理器在在不同模模式時,允許每

16、每種模式式都有自自已的棧棧頂和鏈鏈接寄存存器。(2)程程序計(jì)數(shù)數(shù)器(PC)PC作為為程序計(jì)計(jì)數(shù)器,用于保保存處理理器要取取的下一一條指令令的地址址。R15作作為程序序計(jì)數(shù)器器,用于于保存處處理器要要取的下下一條指指令的地地址。ARM狀狀態(tài)下,所有的的ARM指令都都是32位長度度的,指指令以字字對準(zhǔn)保保存;Thumb狀態(tài)態(tài)下,所所有的Thumb指令令都是16位長長度的,指令以以半字對對準(zhǔn)保存存。由于ARM體系系采用多多級流水水線技術(shù)術(shù),對于于ARM指令集集而言,PC總總是指向向當(dāng)前指指令之后后兩條指指令的地地址,即即PC的的值為當(dāng)當(dāng)前指令令的地址址加8。(3)程程序狀態(tài)態(tài)寄存器器(PSR)程序狀

17、態(tài)態(tài)寄存包包括當(dāng)前前程序狀狀態(tài)寄存存器(CPSR)和備備份程序序狀態(tài)寄寄存器(SPSR)。所有處理理器模式式下都可可以訪問問當(dāng)前程程序狀態(tài)態(tài)寄存器器。CPSR包包括條件件標(biāo)志位位、中斷斷禁止位位、當(dāng)前前處理器器模式標(biāo)標(biāo)志,以以及其他他一些相相關(guān)的控控制和狀狀態(tài)位。在每一種種異常工工作模式式下,都都有一個個備份狀狀態(tài)寄存存器。當(dāng)當(dāng)異常發(fā)發(fā)生時,SPSR用于于保存CPSR的當(dāng)前前值,當(dāng)當(dāng)從異常常退出時時,可用用SPSR來恢恢復(fù)CPSR。用戶模模式和系系統(tǒng)模式式不屬于于異常模模式,因因此這兩兩種模式式?jīng)]有SPSR,當(dāng)在在這兩種種情況下下訪問SPSR時,結(jié)結(jié)果是未未知的。CPSR和SPSR的格式式如圖

18、12-4所示。圖 12-4CPSR/SPSR格式式(4)條條件碼標(biāo)標(biāo)志位N、Z、C和V均為條條件碼標(biāo)標(biāo)志位。其內(nèi)容容可被算算術(shù)或邏邏輯運(yùn)算算指令的的結(jié)果所所改變,并全由由條件碼碼標(biāo)志位位狀態(tài)可可以決定定某條指指令是否否執(zhí)行。標(biāo)志N。當(dāng)兩個用用補(bǔ)碼表表示的帶帶符號數(shù)數(shù)進(jìn)行運(yùn)運(yùn)算時,N=1表示結(jié)結(jié)果為負(fù)負(fù)數(shù);N=0表表示運(yùn)算算結(jié)果為為正數(shù)或或零。標(biāo)志Z。Z=1表表示指令令運(yùn)算結(jié)結(jié)果為0;Z=0表示示指令運(yùn)運(yùn)算結(jié)果果為非零零。標(biāo)志C。對于加法法運(yùn)算(包括比比較指令令CMN),C=1表表示加法法運(yùn)算產(chǎn)產(chǎn)生進(jìn)位位(即無無符號數(shù)數(shù)溢出),C=0表示示加法運(yùn)運(yùn)算未產(chǎn)產(chǎn)生進(jìn)位位;對于于減法運(yùn)運(yùn)算(包包括比較較

19、指令CMP),C=0表示示減法運(yùn)運(yùn)算產(chǎn)生生借位(即無符符號數(shù)溢溢出),C=1表示減減法運(yùn)算算未產(chǎn)生生借位;對于包包含移位位操作的的非加/減運(yùn)算算指令,C為移移出值的的最后一一位;對對于其他他非加/減運(yùn)算算指令,C的值值通常不不改變。標(biāo)志V。對于加法法/減法法指令,當(dāng)操作作數(shù)和運(yùn)運(yùn)算結(jié)果果為二進(jìn)進(jìn)制的補(bǔ)補(bǔ)碼表示示的帶符符號數(shù)時時,V=1表示示符號位位溢出,V=0表示符符號位未未溢出;對于其其他的非非加/減減運(yùn)算指指令,V的值通通常不改改變。(5)控控制位位CPSR的低8位,即I、F、T和M0M4稱為控制制位。當(dāng)當(dāng)發(fā)生異異常時這這些位可可以被改改變。當(dāng)當(dāng)處理器器運(yùn)行在在特權(quán)模模式時,這些位位也可以

20、以由程序序修改。中斷禁止止位I和F。I=1表示禁止止IRQ中斷,F(xiàn)=1表示禁止止FIQ中斷。T標(biāo)志位。對于ARM體系結(jié)構(gòu)構(gòu)v4及以上版版本的T系列處理理器,T=0表示程序序運(yùn)行于于ARM狀態(tài),T=1表示程序序運(yùn)行于于Thumb狀態(tài);對對于ARM體系結(jié)構(gòu)構(gòu)v4及以上版版本的非非T系列處理理器,T=0表示程序序運(yùn)行于于ARM狀態(tài),T=1表示執(zhí)行行下一條條指令以以引起未未定義的的指令異異常。注意:絕絕對不要要強(qiáng)制改改變CPSR寄存器中中的T位。如果果這樣做做,處理理器則會會進(jìn)入一一個無法法預(yù)知的的狀態(tài)。運(yùn)行模式式位M0M4。這些模式式位決定定處理器器的模式式。見表表12-4。不不是所有有模式位位的組

21、合合都定義義了有效效的處理理器模式式,因此此,請注注意不要要使用表表中沒有有列出的的組合。保留位。CPSR中的其其他位為為保留位位,當(dāng)改改變CPSR中中的條件件碼標(biāo)專專位或控控制位時時,不要要改變保保留位,在程序序中也不不要使用用保留位位來存儲儲數(shù)據(jù)。保留位位將用于于ARM版本的的擴(kuò)展。M4:0處理器模式可訪問的Thumb狀態(tài)寄存器可訪問的ARM狀態(tài)寄存器10000用戶R0R7,SP,LR,PC,CPSRR0R14, PC,CPSR10001快中斷R0R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0R7,R8_fiqR14_fiq,PC,CPSR,SPSR_fiq1001

22、0中斷R0R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0R12,R13_fiq,R14_fiq,PC,CPSR,SPSR_fiq10011管理R0R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定義R0R7,SP_und,LR_und,PC,CPSR,SPSR_undR0R12,R13_und,R14_und

23、,PC,CPSR,SPSR_und11111系統(tǒng)R0R7,SP,LR,PC,CPSR,SPSRR0R14, PC,CPSR表12-4模模式位的的含義(6)ARM狀狀態(tài)寄存存器與Thumb狀態(tài)態(tài)寄存器器之間的的關(guān)系Thumb狀態(tài)態(tài)下的寄寄存器集集是ARM狀態(tài)態(tài)下的寄寄存器集集的子集集。用戶戶可以訪訪問8個個通用寄寄存器(R0R7)、PC、SP、LR、SPSR和和CPSR。每每種特權(quán)權(quán)模式都都有一組組SP、LR、SPSR。Thumb狀態(tài)態(tài)寄存器器與ARM狀態(tài)態(tài)寄存器器集有如如下的關(guān)關(guān)系:Thumb狀態(tài)態(tài)R0R7與與ARM狀態(tài)R0R7相同同。Thumb狀態(tài)態(tài)CPSR和SPSR與ARM狀態(tài)態(tài)CPSR和

24、SPSR相同。Thumb狀態(tài)態(tài)SP映映射到ARM狀狀態(tài)R13。Thumb狀態(tài)態(tài)LR映映射到ARM狀狀態(tài)R14。Thumb狀態(tài)態(tài)PC映映射到ARM狀狀態(tài)PC(R15)。具體關(guān)系系如圖12-5所示。圖12-5Thumb寄存存器在ARM狀狀態(tài)寄存存器上的的映射Thumb狀態(tài)態(tài)下,寄寄存器R8R15并并不是標(biāo)標(biāo)準(zhǔn)寄存存器集的的一部分分,但用用戶可以以使用匯匯編語言言程序有有限制地地訪問這這些寄存存器,將將其用作作快速的的寄存器器。使用用帶特殊殊變量的的MOV指令,數(shù)據(jù)可可以在低低寄存器器(R0R7)和高高寄存器器(R8R15)之之間進(jìn)行行傳送;高寄存存器的值值可以使使用CMP指令令進(jìn)行比比較或使使用A

25、DD指令令加上低低寄存器器的值。ARM處處理器支支持的數(shù)數(shù)據(jù)類型型有字節(jié)節(jié) 、半半字和字字。字節(jié)字節(jié)的長長度為8位(bit);半字半字的長長度為16位(bit),半半字必須須以2字字節(jié)為邊邊界對齊齊;字字的長度度為32位(bit)。字必必須以4字節(jié)為為邊界對對齊。這三種數(shù)數(shù)據(jù)類型型都支持持無符號號數(shù)和帶帶符號數(shù)數(shù),當(dāng)任任意一種種類型描描述為unsigned時,N位數(shù)數(shù)值使用用正常的的二進(jìn)制制格式表表示范圍圍為的的非負(fù)整整數(shù);當(dāng)當(dāng)任意一一種類型型描述為為signed時,N位數(shù)值值使用2的補(bǔ)碼碼格式表表示范圍圍為的的整數(shù)。ARM指令的的長度剛剛好是1個字(分配為為占用4個字節(jié)節(jié))。Thumb指令令

26、的長度度剛好一一個半字字(占用用2個字字節(jié))。所有數(shù)數(shù)據(jù)操作作都以字字為單位位。加載載和存儲儲指令可可以以字字節(jié)、半半字和字字進(jìn)行操操作,當(dāng)當(dāng)加載字字節(jié)或半半字時自自動實(shí)現(xiàn)現(xiàn)零擴(kuò)展展或符號號擴(kuò)展。12.2.4體體系系結(jié)構(gòu)直直接支持持的數(shù)據(jù)據(jù)類型12.2.5存存儲器器及存儲儲器映射射I/OARM處處理器采采用馮諾依曼曼結(jié)構(gòu),指令和和數(shù)據(jù)共共用一條條32位位數(shù)據(jù)總總線,只只有加載載、存儲儲和交換換指令可可訪問存存儲器中中的數(shù)據(jù)據(jù)。ARM公司司的規(guī)范范僅定義義了內(nèi)核核與存儲儲系統(tǒng)之之間的信信號及時時序(局局部總線線),而而現(xiàn)實(shí)的的芯片一一般在外外部總線線與內(nèi)核核的局部部總線之之間有一一個存儲儲器管理

27、理部件將將局部總總線的信信號和時時序轉(zhuǎn)換換為現(xiàn)實(shí)實(shí)的外部部總線信信號和時時序。因因此,外外部總信信的信號號和時序序與具體體的芯片片有關(guān),不是ARM的的標(biāo)準(zhǔn)。具體到到某個芯芯片的外外部存儲儲系統(tǒng)的的設(shè)計(jì),需要參參考其芯芯片的數(shù)數(shù)據(jù)手冊冊或使用用手冊等等資料。1.地址址空間2.存儲儲器格式式3.指令令的預(yù)取取和自修修改代碼碼4.存儲儲器映射射的I/O1.地址址空間ARM體體系結(jié)構(gòu)構(gòu)使用單單個平面面的232個8位字節(jié)地址址空間,對存儲儲器能支支持的最最大尋址址空間為為4G(232)。ARM體系系統(tǒng)結(jié)構(gòu)構(gòu)將存儲儲器看成成從0 x00000000地地址開始始的以字字節(jié)為單單位的線線性組合合。每個個字?jǐn)?shù)據(jù)

28、據(jù)占4個個字節(jié)單單位,每每個半字字?jǐn)?shù)據(jù)占占2個字字節(jié)單位位。字節(jié)節(jié)地址按按照無符符號數(shù)排排列,從從0到232-1。地址空間間可以看看作是包包含230個32位位字,地地址以字字為單位位進(jìn)行分分配,也也就是將將地址除除以4。地址為為A的字字包含4個字節(jié)節(jié),地址址分別為為A、A+1、A+2和A+3。在ARM體系結(jié)結(jié)構(gòu)v4及以上上版本中中,地址址空間還還可被看看包含231個16位位半字。地址按按照半字字進(jìn)行分分配。地地址為A的半字字包含2個字節(jié)節(jié),地址址分別為為A和A+1。2.存儲儲器格式式地址空間間的規(guī)則則要求地地址A:位于地址址A的字字包含的字字節(jié)位于于地址A、A+1、A+2和和A+3。位于地址址

29、A的半半字包含的字字節(jié)位于于地址A、A+1。位于地址址A+2的半字包包含的字字節(jié)位于于地址A+2和和A+3。位于地址址A的字包含含的字節(jié)節(jié)位于地地址A和和A+3。小端格式式(little-ednian)在小端格格式中,一個字字當(dāng)中最最低地址址的字節(jié)節(jié)被看作作是最低低位字節(jié)節(jié),最高高地址的的字節(jié)被被看作是是最高位位字節(jié)。因此,存儲器器系統(tǒng)字字節(jié)0連連接到數(shù)數(shù)據(jù)線,如圖12-6所示。圖12-6字字內(nèi)字節(jié)節(jié)的小端端地址大端格式式(big-endian)在大端格格式中,ARM處理器器將最高高位字節(jié)節(jié)保存在在最低地地址字節(jié)節(jié),將最最低位字字節(jié)保存存在最高高地址字字節(jié)。因因此,存存儲器系系統(tǒng)字節(jié)節(jié)0連接接

30、到數(shù)據(jù)據(jù)線3124,如圖圖12-7所示示。圖12-7字字內(nèi)字節(jié)節(jié)的大端端地址一個具體體的的基基于ARM的芯芯片可能能只支持持小端存存儲器系系統(tǒng),也也可能只只支持大大端存儲儲器系統(tǒng)統(tǒng),還可可能兩者者都支持持,但默默認(rèn)格式式通常為為小端格格式。ARM指指令集不不包含任任何直接接選擇大大、小端端的指令令。但是是,一個個同時支支持大、小端的的基于ARM的的芯片,可以在在硬件上上配置(一般使使用芯片片的引腳腳來配置置)來匹匹配存儲儲器系統(tǒng)統(tǒng)所使用用的規(guī)則則。如果果芯片有有一個標(biāo)標(biāo)準(zhǔn)系統(tǒng)統(tǒng)控制協(xié)協(xié)處理器器,則系系統(tǒng)控制制協(xié)處理理器的寄寄存器1的Bit7可可用于改改變配置置輸入。如果一個個基于ARM的的芯片

31、將將存儲系系統(tǒng)配置置為其中中一種存存儲器格格式(如如小端),而實(shí)實(shí)際連接接的存儲儲器系統(tǒng)統(tǒng)配置為為相反的的格式(如大端端),那那么只有有以字為為單位的的指令取取指、數(shù)數(shù)據(jù)加載載和數(shù)據(jù)據(jù)存儲能能夠可靠靠實(shí)現(xiàn)。勘察的的存儲器器訪問將將出現(xiàn)不不可預(yù)測測的結(jié)果果。當(dāng)標(biāo)準(zhǔn)系系統(tǒng)控制制協(xié)處理理器連接接到支持持大、小小端的ARM處處理器時時,協(xié)處處理器寄寄存器1的Bit7在在復(fù)位時時清零。這表示示ARM處理器器在復(fù)位位后立即即配置為為小端存存儲器系系統(tǒng)。如如果它連連接到一一個大端端存儲器器系統(tǒng),那么復(fù)復(fù)位處理理程序要要盡早做做的事情情之一就就是切換換到大端端存儲器器系統(tǒng),并必須須在任何何可能的的字節(jié)或或半字

32、數(shù)數(shù)據(jù)訪問問發(fā)生或或Thumb指指令執(zhí)行行之前執(zhí)執(zhí)行。3.指令令的預(yù)取取和自修修改代碼碼許多ARM處理理器實(shí)現(xiàn)現(xiàn)在前一一條指令令的執(zhí)行行尚未完完成時將將指令從從存儲器器取出。這個動動作稱為為指令的的預(yù)取。指令的預(yù)預(yù)取并不不是實(shí)際際執(zhí)行指指令。如有下面面兩種典典型的情情況時,指令就就可不被被執(zhí)行:當(dāng)異常發(fā)發(fā)生時,當(dāng)前指指令執(zhí)行行完畢,所有預(yù)預(yù)取的指指令都被被丟棄,指令的的執(zhí)行從從異常向向量開始始。當(dāng)發(fā)生跳跳轉(zhuǎn)時,預(yù)取的的在分支支指令后后的指令令將被丟丟棄。ARM處處理器可可以自由由選擇預(yù)預(yù)取的指指令比當(dāng)當(dāng)前執(zhí)行行點(diǎn)提前前多少(即半導(dǎo)導(dǎo)體廠商商在設(shè)計(jì)計(jì)具體的的芯片時時可以自自由選擇擇預(yù)取的的指令比

33、比當(dāng)前執(zhí)執(zhí)行點(diǎn)提提前多少少),甚甚至可以以動態(tài)改改變預(yù)取取指令的的數(shù)目。最初的的ARM處理器器實(shí)現(xiàn)在在當(dāng)前執(zhí)執(zhí)行的指指令之前前預(yù)取兩兩條指令令,不過過現(xiàn)在可可以選擇擇多于或或少于兩兩條指令令。注意:當(dāng)指令讀讀取PC時,它它得到的的指令地地址比它它自身地地址落后后了兩條條地址:對于ARM指指令,得得到的地地址是它它自身地地址+8;對于于Thumb指指令,得得到的地地址是它它自身地地址+4。最初的ARM處處理器實(shí)實(shí)現(xiàn)在PC讀取取的兩指指令偏移移量和兩兩指令預(yù)預(yù)取之間間存在關(guān)關(guān)聯(lián)。但但這一關(guān)關(guān)聯(lián)不是是結(jié)構(gòu)上上的。一一個預(yù)取取不同數(shù)數(shù)目指令令的ARM處理理器實(shí)現(xiàn)現(xiàn)仍能保保證讀取取PC所所得的地地址比它

34、它自身地地址落后后兩條指指令。同自由選選擇多少少條預(yù)取取指令一一樣,ARM處處理器實(shí)實(shí)現(xiàn)可選選擇沿著著哪條可可能的執(zhí)執(zhí)行路徑徑進(jìn)行預(yù)預(yù)取指。例如,在一條條分支指指令之后后,它可可選擇預(yù)預(yù)取分支支指令之之后的指指令或者者是轉(zhuǎn)移移目標(biāo)地地址的指指令。這這稱為“轉(zhuǎn)移預(yù)預(yù)測”。自修改代代碼所有形式式的指令令預(yù)取都都有一個個潛在的的問題,即存儲儲器中的的指令可可能在它它被預(yù)取取之后,被執(zhí)行行之前發(fā)發(fā)生改變變。如果果發(fā)生這這種情況況,對存存儲器中中的指令令進(jìn)行修修改通常常并不妨妨礙已取取指的指指令備份份執(zhí)行完完畢。例如:在在下面的的代碼序序列中,STR指令使使用ADD指令令的備份份取代了了它后面面的SUB

35、指令令:LDRr0,AddInstrSTRr0,NextInstrNextInstrSUBr1,r1, #1AddInstrADDr1,r1, #1當(dāng)代碼第第一次執(zhí)執(zhí)行時,STR指令之之后執(zhí)行行的指令令通常是是SUB指令,因?yàn)镾UB指指令在存存儲器中中的指令令發(fā)生改改變之前前已經(jīng)被被預(yù)取了了,ADD指令令不會被被執(zhí)行,除非第第二次執(zhí)執(zhí)行該代代碼序列列。ARM處理器不不能保證證上面所所述的方方式執(zhí)行行,因此此:當(dāng)代碼第第一次執(zhí)執(zhí)行時,在STR指令令之后有有可能立立即產(chǎn)生生一個中中斷。如如果這樣樣,已經(jīng)經(jīng)預(yù)取的的SUB指令將將被丟棄棄。當(dāng)中中斷處理理程序返返回時,位于NextInstr處處的指令令

36、被再次次預(yù)取,而這次次則執(zhí)行行ADD指令。因此,雖然SUB指指令通常常最有可可能被執(zhí)執(zhí)行,但但也有可可能執(zhí)行行ADD指令。如果指令令被再次次執(zhí)行,ARM處理器器或存儲儲器系統(tǒng)統(tǒng)允許預(yù)預(yù)取指令令的備份份,并使使用這些些備份而而不是重重新預(yù)取取。如果果發(fā)生這這種情況況,在代代碼序列列按照第第二及以以下可能能執(zhí)行時時,SUB指令令可能被被執(zhí)行。發(fā)生這這種情況況的主要要原因是是存儲器器系統(tǒng)包包含獨(dú)立立的指令令和數(shù)據(jù)據(jù)緩存。但是,也存在在其它可可能性。例如,一些分分支預(yù)測測的硬件件保存了了分支后后的指令令??傊?,應(yīng)應(yīng)當(dāng)盡可可能避免免使用涉涉及自修修改代碼碼的編程程技術(shù)。然而在在許多系系統(tǒng)中,幾乎不不可能

37、完完全避免免自修改改代碼的的使用。例如,任何一一個允許許將程序序裝入存存儲器然然后執(zhí)行行的系統(tǒng)統(tǒng)都使用用自修改改代碼。指令存儲儲器屏障障(IMB)每個ARM處理理器實(shí)現(xiàn)現(xiàn)都定義義了一系系列的操操作,使使自修改改代碼序序列可以以可靠地地執(zhí)行。這一串串代碼稱稱為指令存儲儲器屏障障(IMB),它通常常同時取取決于ARM處處理器的的實(shí)現(xiàn)和和存儲器器系統(tǒng)的的實(shí)現(xiàn)。IMB序序列必須須在新的的指令已已經(jīng)保存存到存儲儲器之后后而尚未未執(zhí)行時時執(zhí)行。例如,在程序序被加載載之后并并且在轉(zhuǎn)轉(zhuǎn)移到它它的入口口之前。任何不不以這種種方式使使用IMB的自自修改代代碼序列列都可能能會執(zhí)行行不確定定的動作作。根據(jù)IMB所執(zhí)執(zhí)

38、行的確確定的操操作順序序取決于于ARM處理器器和存儲儲器的實(shí)實(shí)現(xiàn),建建議在軟軟件設(shè)計(jì)計(jì)時使IMB序序列作為為一個調(diào)調(diào)用程序序來替換換與系統(tǒng)統(tǒng)相關(guān)的的模塊,而不是是直接插插入到需需要的地地方。這這樣易于于移植到到其它ARM處處理器和和存儲器器系統(tǒng)。另外,在在許多實(shí)實(shí)現(xiàn)當(dāng)中中,IMB序列列包含了了只能在在特權(quán)模模式下使使用的操操作,例例如,標(biāo)標(biāo)準(zhǔn)系統(tǒng)統(tǒng)控制協(xié)協(xié)處理器器提供的的緩存清清零和無無效操作作。為了了允許用用戶模式式程序使使用IMB序列列,推薦薦將其作作為一個個操作系系統(tǒng)調(diào)用用程序,由SWI指令令調(diào)用。在SWI指令令使用24位立立即數(shù)的的系統(tǒng)中中指定所所要求的的系統(tǒng)服服務(wù),通通過下面面的指令

39、令即可請請求IMB序列列:SWI0 xF00000這是一個個無參數(shù)數(shù)調(diào)用,不返回回結(jié)果,應(yīng)當(dāng)使使用與帶帶原型的的C函數(shù)數(shù)調(diào)用相相同的調(diào)調(diào)用約定定:voidIMB(void);區(qū)別在于于使用SWI指指令而不不是BL指令調(diào)調(diào)用。有些實(shí)現(xiàn)現(xiàn)可對已已保存的的新指令令使用地地址范圍圍的知識識來減少少IMB執(zhí)行的的時間。因此,還可執(zhí)執(zhí)行另外外一個操操作系統(tǒng)統(tǒng)調(diào)用程程序。該該調(diào)用程程序只根根據(jù)指定定的地址址范圍執(zhí)執(zhí)行IMB。在在SWI指令使使用24位立即即數(shù)的系系統(tǒng)中指指定所要要求的系系統(tǒng)服務(wù)務(wù),通過過下面的的指令來來請求:SWI0 xF00001應(yīng)當(dāng)使用用與帶原原型的C函數(shù)調(diào)調(diào)用相似似的調(diào)用用約定:voi

40、dIMBRange(unsigned longstart_addr,unsignedlongend_addr);此處地址址范圍從從start_addr(包包含)到到end_addr(不包含含)。注意:當(dāng)使用標(biāo)標(biāo)準(zhǔn)的ARM過過程調(diào)用用標(biāo)準(zhǔn)時時,start_addr在在R0中中傳遞,而edd_addr則在R1中傳傳遞。對于某些些ARM處理器器實(shí)現(xiàn)來來說,即即使使用用小地址址范圍,IMB執(zhí)行的的時間也也可能非非常長(數(shù)千個個時鐘周周期)。對于自自修改代代碼的小小規(guī)模使使用,這這樣很可可能受到到較大損損失。因因此,建建議自修修改代碼碼只用于于不可避避免或有有足夠的的執(zhí)行時時間的情情況。4.存儲儲器映射

41、射的I/O執(zhí)行ARM體系系統(tǒng)結(jié)構(gòu)構(gòu)I/O功能的的標(biāo)準(zhǔn)是是使用存存儲器映映射的I/O。加載或或存儲I/O值值時,使使用提供供給I/O功能能的特殊殊存儲器器地址。通常,從存儲儲器映射射的I/O地址址加載用用于輸入入,而存存儲到存存儲器映映射的I/O地地址則用用于輸出出。加載載和存儲儲都可用用于執(zhí)行行控制功功能,用用于取代代它們正正常的輸輸入或輸輸出功能能。存儲器映映射的I/O位位置的動動作通常常不同于于正常的的存儲器器位置的的動作。例如,正常存存儲器位位置的兩兩次連續(xù)續(xù)加載,每次都都會返回回相同的的值,除除非中間間插入了了保存的的操作。對于存存儲器映映射的I/O位位置,第第二次加加載返回回的值可可

42、以不同同于第一一次返回回的值。因?yàn)榈诘谝淮渭蛹虞d的副副作用(例如從從緩沖區(qū)區(qū)移走已已加載的的值)或或是因?yàn)闉椴迦肓砹硪粋€存存儲器映映射I/O位置置的加載載和存儲儲的副作作用。(1)從從存儲器器映射的的I/O取指在前面章章節(jié)中講講到,不不同ARM處理理器的實(shí)實(shí)現(xiàn)(可可以理解解為不同同的芯片片)在存存儲器取取指時會會有相當(dāng)當(dāng)大的區(qū)區(qū)別。因因此,建建議存儲儲器映射射的I/O位置置只用于于數(shù)據(jù)的的加載和和存儲,而不用用于取指指。任何何依賴于于從存儲儲器映射射I/O位置取取指的系系統(tǒng)設(shè)計(jì)計(jì)都可能能難于移移植到將將來的ARM實(shí)實(shí)現(xiàn)。(2)對對存儲器器映射I/O的的數(shù)據(jù)訪訪問一個指令令序列在在執(zhí)行時時,會在

43、在不同的的點(diǎn)訪問問數(shù)據(jù)存存儲器,產(chǎn)生加加載和存存儲訪問問的時序序。如果果這些加加載和存存儲訪問問的是正正常的存存儲器位位置,那那么它們們在訪問問相同的的存儲器器位置時時只是執(zhí)執(zhí)行交互互操作。結(jié)果,對不同同存儲器器位置的的加載和和存儲可可以按照照不同于于指令的的順序執(zhí)執(zhí)行,但但不會改改變最終終的結(jié)果果。這種種改變存存儲器訪訪問順序序的自由由可被存存儲器系系統(tǒng)用來來提高性性能(例例如,通通過使用用高速緩緩存和寫寫緩沖器器)。對同一存存儲器位位置的訪訪問還擁擁有其它它可用于于提升性性能的特特性從相同的的位置連連續(xù)加載載(沒有產(chǎn)生生存儲)產(chǎn)生相同同的結(jié)果果。從一個位位置執(zhí)行行多加載載操作,將返回回最后

44、保保存到該該位置的的值。對某個數(shù)數(shù)據(jù)規(guī)格格的多次次訪問,有時可可合并成成單個的的更大規(guī)規(guī)模的訪訪問。例例如,分分別存儲儲一個字字所包含含的兩個個半字可可合并成成存儲單單個字。訪問存儲儲器映射射的I/O位置置時不能能進(jìn)行優(yōu)優(yōu)化,它它們的時時間順序序絕對不不能改變變?nèi)绻鎯ζ髯?、半字或或字?jié)訪訪問的對對象是存存儲器映映射的I/O位位置,那那么一次次訪問會會產(chǎn)生副副作用,使后續(xù)續(xù)訪問改改變成一一個不同同的地址址。如果果是這樣樣,那么么不同時時間順序序的訪問問將會使使代碼序序列產(chǎn)生生不同的的最終結(jié)結(jié)果。因因此,當(dāng)當(dāng)訪問存存儲器映映射的I/O位位置時不不能進(jìn)行行優(yōu)化,它們的的時間順順序絕對對不能改改變

45、。存儲器訪訪問的數(shù)數(shù)據(jù)規(guī)格格都不會會改變對于存儲儲器映射射的I/O,另另外還有有很重要要的一點(diǎn)點(diǎn),那就就是每次次存儲器器訪問的的數(shù)據(jù)規(guī)規(guī)格都不不會改變變。例如如,在訪訪問存儲儲器映射射的I/O時,一個指指定從4個連續(xù)續(xù)字節(jié)地地址讀出出數(shù)據(jù)的的代碼序序列決不不能合并并成單個個字的讀讀取,否否則會使使代碼序序列的最最終執(zhí)行行結(jié)果不不同于期期望的結(jié)結(jié)果。相相似地,將字的的訪問分分解成多多個字節(jié)節(jié)的訪問問可能會會導(dǎo)致存存儲器映映射I/O設(shè)備備無法按按照預(yù)期期進(jìn)行操操作。訪問存儲儲器映射射的I/O時的的要求限制存儲儲器映射射I/O位置的存存儲器屬屬性。例例如,在在標(biāo)準(zhǔn)存存儲器系系統(tǒng)結(jié)構(gòu)構(gòu)中,存存儲器位位

46、置必須須是無高高速緩存存和無緩緩沖區(qū)的的。限制訪問問存儲器器映射I/O位置的規(guī)規(guī)格或?qū)R方式式。例如如,如果果一個ARM實(shí)現(xiàn)帶有有16位外部數(shù)數(shù)據(jù)總線線,它可可以禁止止對存儲儲器映射射I/O使用32位訪問,因?yàn)?2位訪問無無法在單單個總線線周期內(nèi)內(nèi)執(zhí)行。要求額外外的外部部硬件。例如,帶16位外部數(shù)數(shù)據(jù)總線線的ARM實(shí)現(xiàn)可以以允許對對存儲器器映射的的I/O使用32位訪問,但要求求外部硬硬件將兩兩個16位總線訪訪問合并并成對I/O設(shè)備的單單個32位訪問。如果數(shù)據(jù)據(jù)存儲器器訪問序序列包含含一些符符合要求求的訪問問和一些些不符合合要求的的訪問,那么:對于符合合要求的的訪問,其數(shù)據(jù)據(jù)規(guī)格和和數(shù)目都都被

47、保護(hù)護(hù),沒有有互相合合并或沒沒有與不不符合要要示的訪訪問以任任何方式式合并。不符合合要求的的訪問可可以互相相合并。符合要求求的訪問問彼此的的時間的的順序被被保護(hù),但它們們相以于于那些不不符合要要求的訪訪問的時時間順序序不能保保證。12.2.6異異常只要正常常的程序序流被暫暫時中止止,處理理器就進(jìn)進(jìn)入異常常模式。當(dāng)發(fā)生生異常時時,處理理器在處處理異常常之前,必須先先保存當(dāng)當(dāng)前的狀狀態(tài)。當(dāng)當(dāng)異常處處理完成成后,需需要將處處理器的的狀態(tài)恢恢復(fù)到處處理異常常之前,之后當(dāng)當(dāng)前程序序方可繼繼續(xù)執(zhí)行行。ARM處理理器允許許多個異異常同時時發(fā)生,它們將將會按固固定的優(yōu)優(yōu)先級進(jìn)進(jìn)行處理理。本小小節(jié)內(nèi)容容:1.A

48、RM支持的異異常類型型2.異常優(yōu)化化級與異異常嵌套套3.異常向量量4.異常響應(yīng)應(yīng)和返回回過程5.中斷延遲遲6.復(fù)位1.ARM支持持的異常常類型ARM體體系結(jié)構(gòu)構(gòu)支持的的異常類類型有7種,如如表12-5所所示,分分為如如下3類類:指令執(zhí)行行引起的的直接異異常軟件中斷斷、未定定義指令令和指令令預(yù)取中中止止都屬于于這一類類;指令執(zhí)行行引起的的間接中中斷數(shù)據(jù)中止止屬于這這一類;外部產(chǎn)生生的與指指令流無無關(guān)的異異常復(fù)位、IRQ和和FIQ屬于這這一類。表12-5ARM體體系結(jié)構(gòu)構(gòu)支持的的異常類類型異常類型具體功能復(fù)位(Reset)復(fù)位電平有效時,產(chǎn)生復(fù)位異常,ARM處理器立刻停止執(zhí)行當(dāng)前指令,程序跳轉(zhuǎn)到復(fù)

49、位異常處理程序處執(zhí)行指令未定義指令(Undefined)當(dāng)ARM處理器或協(xié)處理器遇到不能處理的指令時,產(chǎn)生未定義指令異常??墒褂迷摦惓C(jī)制進(jìn)行軟件仿真擴(kuò)展ARM或Thumb指令集軟件中斷(SWI)該異常由執(zhí)行SWI指令產(chǎn)生,可用于用戶模式下的程序調(diào)用特權(quán)操作??墒褂迷摦惓C(jī)制實(shí)現(xiàn)系統(tǒng)功能調(diào)用,用于請求特定的管理功能指令預(yù)取中止(Prefetch Abort)當(dāng)處理器預(yù)取指令的地址不存在或該地址不允許當(dāng)前指令訪問時,存儲器會向處理器發(fā)出中止信號,但當(dāng)預(yù)取的指令被執(zhí)行時,才會產(chǎn)生指令預(yù)取中止異常。當(dāng)預(yù)取指令未被執(zhí)行,如指令流水線中發(fā)生了跳轉(zhuǎn),則預(yù)取指令異常不會發(fā)生數(shù)據(jù)中止(Data Abort)當(dāng)

50、處理器數(shù)據(jù)訪問指令的地址不存在或該地址不當(dāng)前指令訪問,則會產(chǎn)生數(shù)據(jù)中止異常。發(fā)生數(shù)據(jù)中止時,系統(tǒng)的響應(yīng)與指令的類型有關(guān)外部中斷請求(IRQ)當(dāng)處理器的外部中斷請求引腳nIRQ有效時,且CPSR中的1位為0時,產(chǎn)生IRQ異常。系統(tǒng)的外設(shè)可通過該異常請求中斷服務(wù)快速中斷請求(FIQ)當(dāng)處理器的快速中斷請求引腳nFIQ有效時,且CPSR中的F位為0時,產(chǎn)生FIQ異常。FIQ異常是為了支持?jǐn)?shù)據(jù)傳輸或者通道處理而設(shè)計(jì)的當(dāng)多個異異常同時時發(fā)生時時,系統(tǒng)統(tǒng)根據(jù)固固定的優(yōu)優(yōu)化級處處理異常常的處理理次序。異常優(yōu)優(yōu)先級按按下列順順序排列列了優(yōu)先先權(quán),復(fù)復(fù)位優(yōu)先先級最高高,未定定義指令令和SWI優(yōu)先先級最低低。2.

51、異異常優(yōu)化化級與異異常嵌套套(1)復(fù)復(fù)位從確確定的狀狀態(tài)啟動動處理器器,使得得所有其其他未解解決的異異常都和和當(dāng)前處處理器運(yùn)運(yùn)行的狀狀態(tài)不再再有關(guān),因此具具有最高高優(yōu)先級級。(2)未未定義指指令和SWI都都依靠指指令的特特殊譯碼碼產(chǎn)生,由于兩兩者是互互斥的指指令編碼碼,因此此不能同同時發(fā)生生。(3)中中斷優(yōu)先先級判決決最復(fù)雜雜的情況況是FIQ、IRQ和和第三個個非復(fù)位位的異常常同時發(fā)發(fā)生時:由于FIQ比IRQ優(yōu)先級高高并將IRQ屏蔽,所所以IRQ被忽略,直到FIQ處理程序序明確地地將IRQ使用或返返回到用用戶代碼碼為止;如果第三三個異常常是數(shù)據(jù)據(jù)中止,那是因?yàn)檫M(jìn)入入數(shù)據(jù)中中止異常常并未將將FI

52、Q屏蔽,所所以處理理器將在在進(jìn)入數(shù)數(shù)據(jù)中止止處理程程序后立立即進(jìn)入入FIQ處理程序序。數(shù)據(jù)據(jù)中止將將在FIQ處理程序序返回時時對其進(jìn)進(jìn)行處理理;如果第三三個異常常不是數(shù)數(shù)據(jù)中止止,將立立即進(jìn)入入FIQ處理程序序。當(dāng)FIQ和IRQ兩者都完完成時,程序?qū)⒎祷氐降疆a(chǎn)生第第三個異異常的指指令,在在余下所所有的情情況下異異常將重重現(xiàn)并進(jìn)進(jìn)行相應(yīng)應(yīng)的處理理。3.異常常向量異常向量異常類型進(jìn)入模式0 x00000000復(fù)位管理模式0 x00000004未定義指令未定義模式0 x00000008軟件中斷管理模式0 x0000000C指令預(yù)取中止中止模式0 x00000010數(shù)據(jù)中止中止模式0 x000000

53、14保留保留0 x00000018IRQIRQ0 x0000001CFIQFIQ表12-6ARM異異常向量量一般來說說,在異異常向量量處將包包含一條條跳轉(zhuǎn)指指令,跳跳轉(zhuǎn)到異異常處理理程序。但由于于FIQ占據(jù)最高高向量地地址,它它可以立立即執(zhí)行行。當(dāng)ARM處理器發(fā)發(fā)生異常常時,程程序計(jì)數(shù)數(shù)器PC被強(qiáng)制設(shè)設(shè)置為對對應(yīng)的異異常向量量,從而而轉(zhuǎn)到異異常處理理程序,當(dāng)異常常處理程程序完成成后,返返回到主主程序繼繼續(xù)執(zhí)行行。異常發(fā)生生后,除除了復(fù)位位異常立立即中止止當(dāng)前指指令之外外,其余余異常都都是在處處理器完完成當(dāng)前前指令后后再執(zhí)行行異常處處理程序序。ARM處理理器對異異常中斷斷的響應(yīng)應(yīng)過程如如下所述述

54、:1)保保存處理理器當(dāng)前前狀態(tài)、中斷屏屏蔽位以以及條件件標(biāo)志位位。這是是通過將將當(dāng)前程程序狀態(tài)態(tài)寄存器器CPSR的內(nèi)內(nèi)容保存存到將要要執(zhí)行的的異常中中斷對應(yīng)應(yīng)的SPSR寄寄存器中中實(shí)現(xiàn)的的;2)設(shè)設(shè)置當(dāng)前前程序狀狀態(tài)寄存存器CPSR中中相應(yīng)的的位。包包括:設(shè)設(shè)置CPSR中中的位,使處理理器進(jìn)入入相應(yīng)的的模式;設(shè)置CPSR中的位位,禁止止IRQ中斷,當(dāng)進(jìn)入入FIQ模式時時,禁止止FIQ中斷;3)將將寄存器器LR_mode設(shè)置置成返回回地址;4.異常常響應(yīng)和和返回過過程4)將將程序計(jì)計(jì)數(shù)器值值(PC)設(shè)置置成該異異常中斷斷的異常常向量地地址,從從而跳轉(zhuǎn)轉(zhuǎn)到相應(yīng)應(yīng)的異常常中斷處處理程序序處執(zhí)行行。異

55、常處理理完成后后必須返返回到原原來程序序處繼續(xù)續(xù)執(zhí)行,為達(dá)到到這一目目的,需需要執(zhí)行行四個基基本操作作:恢復(fù)原來來被保護(hù)護(hù)的用戶戶寄存器器;恢復(fù)被中中斷的程程序的處處理器狀狀態(tài),即即將SPSR_mode寄存存器內(nèi)容容復(fù)制到到CPSR中;返回到發(fā)發(fā)生異常常中斷的的指令的的下一條條指令處處執(zhí)行,即將LR_mode寄存器器的內(nèi)容容復(fù)制到到程序計(jì)計(jì)數(shù)器PC中;清除CPSR中中的中斷斷禁止標(biāo)標(biāo)志I和和F,開開放外部部中斷和和快速中中斷。(1)最最大中斷斷延遲當(dāng)當(dāng)FIQ使能能時,最最壞情況況下FIQ的延延遲時間間包含:1)Tsynemax(請求通通過同步步器的最最長時間間)。Tsynemax為4個處處理器

56、周周期(由由內(nèi)核決決定);2)Tldm(最長指指令的完完成時間間)。最最長的指指令是加加載包括括PC在在內(nèi)所有有寄存器器的LDM指令令。Tldm在零等待待狀態(tài)系系統(tǒng)中的的執(zhí)行時時間為20個處處理器周周期;3)Texc(數(shù)據(jù)中中止異常常進(jìn)入時時間)。Texc為3個處處理器周周期;4)Tfiq(FIQ進(jìn)入時時間)。Tfiq為2個處處理器周周期(由由內(nèi)核決決定)。5.中斷斷延遲總的延遲遲時間是是29個個處理器器周期,在系統(tǒng)統(tǒng)使用40MHz處理理器時鐘鐘時,略略微超過過0.7ms。當(dāng)在時時間結(jié)束束后,處處理器執(zhí)執(zhí)行在0 x1C處的指指令。(2)最最小中斷斷延遲FIQ或或IRQ的最小小中斷延延遲是請請求

57、通過過同步器器的時間間加上Tfiq(共6個個處理器器周期)。當(dāng)nRESET信號被被拉低時時(一般般外部復(fù)復(fù)位引腳腳電平的的變化和和芯片的的其它復(fù)復(fù)位源會會改變這這個內(nèi)核核信號),內(nèi)核核中止正正在執(zhí)行行的指令令,并且且地址總總線繼續(xù)續(xù)增加。當(dāng)nRESET信號再再次變?yōu)闉楦唠娖狡綍r,ARM處處理器執(zhí)執(zhí)行下列列操作:1)強(qiáng)強(qiáng)制M4:0變?yōu)闉閎10011(管理理模式);2)置置位CPSR中中的I和和F位;3)清清零CPSR中中的T位位;4)強(qiáng)強(qiáng)制PC從地址址0 x00開始始對下一一條指令令進(jìn)行取取指;5)返返回到ARM狀狀態(tài)并恢恢復(fù)執(zhí)行行。在復(fù)位后后,除PC和CPSR之外的的所有寄寄存器的的值都不不確

58、定。6.復(fù)位位ARM處處理器是是基于精精簡指令令集計(jì)算算機(jī)(RISC)原理理設(shè)計(jì)的的,指令令集和相相關(guān)譯碼碼機(jī)制較較為簡單單。ARM體系系結(jié)構(gòu)具具有32位ARM指令令集和16位Thumb指令令集,ARM指指令集效效率高,但是代代碼密度度低;而而Thumb指指令集具具有較高高的代碼碼密度,卻仍然然保持ARM的的大多數(shù)數(shù)性能上上的優(yōu)勢勢,它是是ARM指令集集的子集集。所有有的ARM指令令都是可可以有條條件執(zhí)行行的,而而Thumb指指令僅有有一條指指令具備備條件執(zhí)執(zhí)行功能能。ARM程序序和Thumb程序可可相互調(diào)調(diào)用,相相互之間間狀態(tài)切切換開銷銷幾乎為為零。12.3ARM編編程指令令尋址方式式是根據(jù)

59、據(jù)指令中中給出的的地址碼碼字段來來實(shí)現(xiàn)尋尋找真實(shí)實(shí)操作地地址的方方式。ARM處處理器有有8種基基本尋址址方式。1)寄寄存器器尋址;2)立立即尋尋址;3)寄寄存器器移位尋尋址;4)寄寄存器器間接尋尋址;5)基基址尋尋址;6)多多寄存存器直接接尋址;7)堆堆棧尋尋址;8)相相對尋尋址。12.3.1ARM處理器器尋址方方式1.32位ARM指指令集(1)分分支指令令;(2)數(shù)數(shù)據(jù)處理理指令;(3)加加載和存存儲指令令;(4)協(xié)協(xié)處理指指令;(5)雜雜項(xiàng)指令令12.3.2指指令集集ARM指指令集提提供了兩兩條產(chǎn)生生異常的的指令,通過這這兩條指指令可以以用軟件件的方法法實(shí)現(xiàn)異異常。軟件中斷斷指令(SWI)

60、;斷點(diǎn)中斷斷指令(BKPT)。2.16位位Thumb指指令集(1)分分支指令令分支指令令又稱轉(zhuǎn)轉(zhuǎn)移指令令,用于于實(shí)現(xiàn)程程序流程程的轉(zhuǎn)移移,這類類指令可可用來改改變程序序的執(zhí)行行流程或或調(diào)用子子程序。在ARM程序序中可使使用專門門的分支支指令,也可以以通過直直接向程程序計(jì)數(shù)數(shù)器(PC)寫寫入轉(zhuǎn)移移地址值值的方法法實(shí)現(xiàn)程程序流程程的轉(zhuǎn)移移。通過向程程序計(jì)數(shù)數(shù)器(PC)寫寫入轉(zhuǎn)移移地址值值,便可可以在4GB的的地址空空間中任任意轉(zhuǎn)移移;若在在轉(zhuǎn)移之之前結(jié)合合使用ARM的的MOV LR,PC等指指令,則則可保存存將來的的返回地地址值,從而實(shí)實(shí)現(xiàn)在4GB地地址空間間中的子子程序調(diào)調(diào)用。分支指令令除了允允

溫馨提示

  • 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

提交評論