嵌入式系統 第二章 ARM體系結構-z_第1頁
嵌入式系統 第二章 ARM體系結構-z_第2頁
嵌入式系統 第二章 ARM體系結構-z_第3頁
嵌入式系統 第二章 ARM體系結構-z_第4頁
嵌入式系統 第二章 ARM體系結構-z_第5頁
已閱讀5頁,還剩113頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第二章ARM體系結構1ARM體系結構簡介2ARM微處理器的寄存器結構3ARM微處理器的異常處理45ARM微處理器結構ARM微處理器指令系統6ARM的存儲器結構第二章ARM體系結構1ARM體系結構簡介2ARM微處理器的寄存器結構3ARM微處理器的異常處理45ARM微處理器結構ARM微處理器指令系統6ARM的存儲器結構2.1ARM體系結構簡介什么是ARM?公司名稱微處理器的通稱ARM技術成立于1990年11月前身為Acorn計算機公司AdvanceRISCMachine(ARM)主要設計ARM系列RISC處理器內核授權ARM內核給生產和銷售半導體的合作伙伴ARM公司不生產芯片IP(IntelligenceProperty)另外也提供基于ARM架構的開發設計技術軟件工具,評估板,調試工具,應用軟件,總線架構,外圍設備單元,等等2.1.1什么是ARM5ARM授權費IPARM創造和設計IPPartner產品,例如:芯片Partner把ARMIP和其他IP集成進產品OEMCustomer版權費單價OEM用來自ARMPartner的芯片設計制造最終用戶產品業務拓展/市場格局ARM的業務模型ARMPartnershipModel有多個版本,除了一些Unix圖形工作站之外,大多數ARM核心的處理器都是用在嵌入式領域。ARM既可以認為是一個公司的名字,也可認為是對一類微處理器的通稱,還可以認為是一種技術的名字。2.1.1什么是ARM2.1.2ARM體系結構特點支持Thumb/ARM雙指令集;指令執行采用3級/5級流水線;帶有指令和數據cache,大量使用寄存器,指令執行速度更快;支持大端格式和小端格式兩種方法儲字數據;支持字節、半字和字3種數據類型;支持七種處理器模式;嵌入了在線仿真ICE-RT邏輯;具有片上總線AMBA(AdvancedMicrocontrollerBusArchitecture);采用存儲器映像I/O的方式;具有協處理器接口;采用降低電源電壓;體積小,成本低,性能高。2.1.2ARM體系結構組成32位的ALU37個32位寄存器組織32*8位乘法器32*32位桶形移位寄存器指令譯碼及控制邏輯指令流水線數據/地址寄存器圖2.1.1ARM體系結構方框圖2.1.2ARM體系結構組成第二章ARM體系結構1ARM體系結構簡介2ARM微處理器的寄存器結構3ARM微處理器的異常處理45ARM微處理器結構ARM微處理器指令系統6ARM的存儲器結構2.2ARM微處理器系列

ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Intel

XscaleCortex系列ARM7TDMI4T1支持Halfword和signedhalfword/byte和Systemmode支持Thumb指令集24ARM9TDMIARM720TARM940T改良的ARM/Thumb交互作用以及CLZ指令5TESaturatedmathsDSPmultiply-accumulateinstructionsXScaleARM1020EARM9E-SARM966E-S3早期的ARMsARM9EJ-S5TEJARM7EJ-SARM926EJ-SJazelle支持Java字節碼

6ARM11SIMD2.2.1ARM版本ARM處理器架構進化史ARM處理器核心技術演進路線數據源:ARM,三星,DIGITIMES整理,2009/9ARMv5指令集ARM926EJ-SARM1026EJ-SARMv6指令集ARM1136J(F)-SARM11MPCore(1~4核心)ARMv7-Cortex指令集Cortex-A8Cortex-A9MPCore(1~4核心)400MHz600MHz800MHz200MHz20052006200720082009130nm制程90nm制程65nm制程45nm制程1GHzARM公司開發了很多系列的ARM處理器核,目前最新的系列已經是ARM11。ARM7、ARM9、ARM9E和ARM10為4個通用處理器系列。每個系列提供一套相對獨特的性能來滿足不同應用領域的需求。2.2.2ARM處理器系列17命名的含義標志含義說明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上調試M支持長乘法32位乘32位得到64位,32位的乘加得到64位IEmbeddedICEEDSP指令增加了DSP算法處理器指令:16位乘加指令,飽和的帶符號數的加減法,雙字數據操作,cache預取指令JJava加速器Jazelle提高java代碼的運行速度S可綜合提供VHDL或Verilog語言設計文件ARM7微處理器系列ARM7系列是低功耗的32位RISC處理器,最適合用于對價位和功耗要求較高的消費類應用。ARM7系列有如下特點:具有嵌入式ICE-RT邏輯,調試開發方便;極低的功耗,適合對功耗要求較高的應用,如便攜式產品;能夠提供0.9MIPS/MHz的三級流水線結構;兼容16位的Thumb指令集,代碼密度高;對操作系統的支持廣泛,如WindowsCE、Linux、PalmOS等;指令系統與ARM9系列、ARM9E系列和ARM10E系列兼容,便于用戶的產品升級換代;主頻最高可達130M,高速的運算處理能力能勝任絕大多數的復雜應用。ARM7微處理器系列主要應用領域:工業控制、Internet設備、網絡和調制解調器設備、移動電話等多種多媒體等。ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。TDMI的基本含義為:T:支持16位壓縮指令集Thumb;D:支持片上Debug;M:內嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上斷點和調試點;ARM7微處理器系列主要應用領域:工業控制、Internet設備、網絡和調制解調器設備、移動電話等多種多媒體等。ARM7系列微處理器包括如下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理器,屬低端ARM處理器核。ARM7TDMI-SARM7TDMI的可綜合(synthesizable)版本(軟核),對應用工程師來說其編程模型與ARM7TDMI一致;嵌入式Embedded-ICE,支持片上斷點和調試點;支持64位乘法;支持片上調試Debug;支持高密度16位的壓縮Thumb指令集ARM7的產品線。ARM7TDMI:同時具備四個模塊,當然用戶也可選擇其中的幾個或一個。ARM7TDMI-S:軟件與ARM7TDMI完全兼容,硬件預留功能擴展口。ARM710T:ARM7TDMI+8KCache+MMU,Cache:片內緩存,提高CPU性能,MMU:內存管理單元。ARM740T:ARM7TDMI+8KCache+ProtectionUnit。ARM720T:ARM7TDMI+8KCache+WinCESupport。ARM7微處理器系列ARM9微處理器系列

ARM9系列微處理器在高性能和低功耗特性方面提供最佳的表現。具有以下特點:5級流水線,指令執行效率更高。提供1.1MIPS/MHz的哈佛結構。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統。MPU支持實時操作系統。支持數據Cache和指令Cache。ARM9微處理器系列ARM9系列微處理器主要應用于無線設備、儀器儀表、安全系統、機頂盒、高端打印機、數字照相機和數字攝像機等。ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應用場合。ARM9E微處理器系列ARM9E系列微處理器的主要特點如下:支持DSP指令集,適合于需高速數字信號處理的場合。5級流水線,指令執行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。支持VFP9浮點處理協處理器。全性能的MMU,支持眾多主流嵌入式操作系統。支持數據Cache和指令Cache,具有更高的處理能力。ARM9E微處理器系列ARM9E系列微處理器主要應用于下一代無線設備、數字消費品、成像設備、工業控制、存儲設備和網絡設備等領域。ARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三種類型,以適用于不同的應用場合。ARM10E微處理器系列ARM10E系列微處理器的主要特點如下:支持DSP指令集,適合于需要高速數字信號處理的場合。6級流水線,指令執行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。支持VFP10浮點處理協處理器。全性能的MMU,支持眾多主流嵌入式操作系統。支持數據Cache和指令Cache,具有更高的處理能力主頻最高可達400M。內嵌并行讀/寫操作部件。ARM10E微處理器系列ARM10E系列微處理器主要應用于下一代無線設備、數字消費品、成像設備、工業控制、通信和信息系統等領域。ARM10E系列微處理器包含ARM1020E、ARM1022E和ARM1026EJ-S三種類型,以適用于不同的應用場合。SecurCore微處理器系列SecurCore系列微處理器除了具有ARM體系結構各種主要特點外,還在系統安全方面具有如下的特點:帶有靈活的保護單元,確保操作系統和應用數據的安全。采用軟內核技術,防止外部對其進行掃描探測。可集成用戶自己的安全特性和其他協處理器。SecurCore微處理器系列SecurCore系列微處理器主要應用于一些對安全性要求較高的應用產品及應用系統,如電子商務、電子政務、電子銀行業務、網絡和認證系統等領域。SecurCore系列微處理器

SecurCoreSC100、SecurCoreSC110、SecurCoreSC200和SecurCoreSC210四種類型。StrongARM微處理器系列

IntelStrongARM處理器是便攜式通訊產品和消費類電子產品的理想選擇,已成功應用于多家公司的掌上電腦系列產品。IntelStrongARMSA-1100處理器是采用ARM體系結構高度集成的32位RISC微處理器。它融合了Intel公司的設計和處理技術以及ARM體系結構的電源效率,采用在軟件上兼容ARMv4體系結構、同時采用具有Intel技術優點的體系結構。Xscale處理器

Xscale處理器是基于ARMv5TE體系結構的解決方案,是一款全性能、高性價比、低功耗的處理器。它支持16位的Thumb指令和DSP指令集,已使用在數字移動電話、個人數字助理和網絡產品等場合。Cortex微處理器系列ARMCortex發布于2005年,為各種不同性能需求的應用提供了一整套完整的優化解決方案,該系列的技術劃分完全針對不同的市場應用和性能需求。目前ARMCortex定義了三個系列:“A”系列面向尖端的基于虛擬內存的操作系統和用戶應用;“R”系列針對實時系統;“M”系列對微控制器和低成本應用提供優化。Cortex系列Cortex-M系列:

針對價格敏感應用領域的嵌入式處理器,只支持Thumb-2指令集,強調操作的確定性,以及性能、功耗和價格的平衡。是為對開發費用非常敏感同時對性能要求小斷增加的嵌入式應用(如微控制器、汽車車身控制系統和各種大型家電)所設計的,主要面向單片機領域,可以說是51單品機的完美替代品。Cortex系列Cortex-R系列:

針對實時系統的嵌入式處理器。支持ARM、Thumb和Thumb-2指令集,強調實時性,存儲器管理只支持物理地址。主要面向實時控制領域,如汽車剎車控制等,這一領域要求處理器響應中斷的實時性高,并且要盡可能的節約成本Cortex系列Cortex-A系列:

針對復雜OS和應用程序(如多媒體)的應用處理器。支持ARM、Thumb和Thumb-2指令集,強調高性能與合理的功耗,存儲器管理支持虛擬地址。面向尖端的基于虛擬內存的操作系統和用戶應用,如多媒體,上網本等Cortex處理器技術特點ARMv7架構是在ARMv6架構的基礎上誕生的。該架構采用了Thumb-2技術。Thumb-2技術比純32位代碼少使用31%的內存,減小了系統開銷,同時能夠提供比已有的基于Thumb技術的解決方案高出38%的性能。第二章ARM體系結構1ARM體系結構簡介2ARM微處理器的寄存器結構3ARM微處理器的異常處理45ARM微處理器結構ARM微處理器指令系統6ARM的存儲器結構2.3ARM處理器的寄存器結構處理器的運行模式處理器的工作狀態處理器的寄存器組織處理器模式說明備注

用戶(usr)正常程序執行模式不能直接切換到其它模式

系統(sys)運行操作系統的特權任務與用戶模式類似,但具有可以直接切換到其它模式等特權

快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式

中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式

管理(svc)操作系統保護模式系統復位和軟件中斷響應時進入此模式

中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處

未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式2.3.1處理器的運行模式處理器7種模式特權模式處理器模式說明備注

用戶(usr)正常程序工作模式不能直接切換到其它模式

系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權

快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式

中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式

管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式

中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處

未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式除用戶模式外,其它模式均為特權模式。ARM內部寄存器和一些片內外設在硬件設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。

未定義(und)

中止(abt)

管理(svc)

中斷(irq)

快中斷(fiq)

系統(sys)2.3.1處理器的運行模式異常模式處理器模式說明備注

用戶(usr)正常程序工作模式不能直接切換到其它模式

系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權

快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式

中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式

管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式

中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處

未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式

未定義(und)

中止(abt)

管理(svc)

中斷(irq)

快中斷(fiq)這五種模式稱為異常模式。它們除了可以通過程序切換進入外,也可以由特定的異常進入。當特定的異常出現時,處理器進入相應的模式。每種異常模式都有一些獨立的寄存器,以避免異常退出時用戶模式的狀態不可靠。2.3.1處理器的運行模式用戶和系統模式處理器模式說明備注

用戶(usr)正常程序工作模式不能直接切換到其它模式

系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權

快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式

中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式

管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式

中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處

未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式這兩種模式都不能由異常進入,而且它們使用完全相同的寄存器組。系統模式是特權模式,不受用戶模式的限制。操作系統在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統的一些特權任務可以使用這個模式訪問一些受控的資源。

系統(sys)

用戶(usr)2.3.1處理器的運行模式用戶模式和特權模式除了用戶模式之外的其他6種處理器模式稱為特權模式特權模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式的切換。特權模式中,除系統模式外,其他5種模式又稱為異常模式大多數的用戶程序運行在用戶模式下,此時,應用程序不能夠訪問一些受操作系統保護的系統資源,應用程序也不能直接進行處理器模式的切換。用戶模式下,當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理中進行處理器模式的切換。模式切換處理器模式可以通過軟件進行切換,也可以通過外部中斷或者異常處理過程進行切換。當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式下都有一組寄存器,供相應的異常處理程序使用,這樣就可以保證在進入異常模式時,用戶模式下的寄存器不被破壞。系統模式并不是通過異常進入的,它和用戶模式具有完全一樣的寄存器。但是系統模式屬于特權模式,可以訪問所有的系統資源,也可以直接進行處理器模式切換。主要供操作系統任務使用。通常操作系統的任務需要訪問所有的系統資源,同時該任務仍然使用用戶模式的寄存器組,而不是使用異常模式下相應的寄存器組,這樣可以保證當異常中斷發生時任務狀態不被破壞。從編程的角度看,ARM微處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:

-第一種為ARM狀態,此時處理器執行32位的字對齊的ARM指令;

-第二種為Thumb狀態,此時處理器執行16位的、半字對齊的Thumb指令。2.3.2處理器的工作狀態ARM和Thumb指令簡介ARM處理器是基于精簡指令集計算機(RISC)原理設計的,指令集和相關譯碼機制較為簡單。ARM體系結構在V4版中增加了16位Thumb指令集。ARM指令集效率高,但是代碼密度低;Thumb指令集具有較高的代碼密度,卻仍然保持ARM的大多數性能上的優勢,它是ARM指令集的子集。ARM指令集與Thumb指令集的關系Thumb指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點ARM和Thumb指令進入Thumb狀態當操作數寄存器的狀態位為1時,可以采用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。此外,當處理器處于Thumb狀態時發生異常(如IRQ、FIQ、Undef等),則異常處理返回時,自動切換到Thumb狀態。進入ARM狀態當操作數寄存器的狀態位為0時,執行BX指令時可以使微處理器從Thumb狀態切換到ARM狀態。此外,在處理器進行異常處理時,把PC指針放入異常模式鏈接寄存器中,并從異常向量地址開始執行程序,也可以使處理器切換到ARM狀態。2.3.2處理器的工作狀態2.3.3處理器的寄存器組織簡介在ARM處理器內部有37個用戶可見的寄存器。在不同的工作模式和處理器狀態下,程序員可以訪問的寄存器也不盡相同。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiq*R9(SB,v6)R9R9_fiq*R10(SL,v7)R10R10_fiq*R11(FP,v8)R11R11_fiq*R12(IP)R12R12_fiq*R13(SP)R13R13_svc*R13_abt*R13_und*R13_irq*R13_fiq*R14(LR)R14R14_svc*R14_abt*R14_und*R14_irq*R14_fiq*R15(PC)R15狀態寄存器R16(CPSR)CPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態各模式下的寄存器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個狀態寄存器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統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狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中寄存器R0~R13為保存數據或地址值的通用寄存器。它們是完全通用的寄存器,不會被體系結構作為特殊用途,并且可用于任何使用通用寄存器的指令。ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組的寄存器,也就是說對于任何處理器模式,這些寄存器都對應于相同的32位物理寄存器。ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14為分組寄存器。它們所對應的物理寄存器取決于當前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有兩個分組的物理寄存器。一個用于除FIQ模式之外的所有寄存器模式,另一個用于FIQ模式。這樣在發生FIQ中斷后,可以加速FIQ的處理速度。ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13、R14分別有6個分組的物理寄存器。一個用于用戶和系統模式,其余5個分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13常作為堆棧指針(SP)。在ARM指令集當中,沒有以特殊方式使用R13的指令或其它功能,只是習慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。ARM狀態各模式下的寄存器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqR14為鏈接寄存器(LR),在結構上有兩個特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當發生異常時,將R14對應的異常模式版本設置為異常返回地址(有些異常有一個小的固定偏移量)。ARM狀態各模式下的寄存器Lable程序A程序BR14R14(LR)寄存器與子程序調用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執行過程中調用程序B;操作流程2.程序跳轉至標號Lable,執行程序B。同時硬件將“BLLable”指令的下一條指令所在地址存入R14(LR);3.程序B執行最后,將R14寄存器的內容放入PC,返回程序A;2.3.3處理器的寄存器組織R14寄存器與異常發生異常發生時,程序要跳轉至異常服務程序,對返回地址的處理與子程序調用類似,都是由硬件完成的。區別在于有些異常有一個小常量的偏移。2.3.3處理器的寄存器組織1.執行用戶模式下的程序;2.發生IRQ中斷,硬件將某個地址存入IRQ模式下的R14_irq寄存器,用戶模式下的R14沒有被破壞;R14R14_irq用戶模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A3.IRQ服務程序A執行完畢,將R14_irq寄存器的內容減去某個常量后存入PC,返回之前被中斷的程序;未被破壞R14_irq2.3.3處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序計數器R15(PC)寄存器R15為程序計數器(PC),它指向正在取指的地址。可以認為它是一個通用寄存器,但是對于它的使用有許多與指令相關的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結果將是不可預測的。讀R15的限制正常操作時,從R15讀取的值是處理器正在取指的地址,即當前正在執行指令的地址加上8個字節(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執行正在譯碼正在取指流水線狀態地址程序代碼2.3.3處理器的寄存器組織寫R15的限制正常操作時,寫入R15的值被當作一個指令地址,程序從這個地址處繼續執行(相當于執行一次無條件跳轉)。2.3.3處理器的寄存器組織寫R15的限制由于ARM指令以字節為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規則取決于內核結構的版本:在ARM結構V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉地址由指令的實際目標地址(寫入R15的值)和0xFFFFFFFC相與得到;在ARM結構V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結果將不可預測。2.3.3處理器的寄存器組織寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器CPSR為程序狀態寄存器,在異常模式中,另外一個寄存器“程序狀態保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在進入異常時它保存CPSR的當前值,異常退出時可通過它恢復CPSR。ARM狀態各模式下的寄存器ARM內核包含1個CPSR和5個供異常處理程序使用的SPSR。CPSR反映了當前處理器的狀態,其包含:4個條件代碼標志(負(N)、零(Z)、進位(C)和溢出(V));2個中斷禁止位,分別控制一種類型的中斷;

5個對當前處理器模式進行編碼的位;1個用于指示當前執行指令(ARM還是Thumb)的位。2.3.3處理器的寄存器組織每個異常模式還帶有一個程序狀態保存寄存器(SPSR),它用于保存在異常發生之前的CPSR。CPSR和SPSR通過特殊指令(MRS、MSR)進行訪問。注意:如果通過程序修改CPSR寄存器中的模式位進入異常模式,那么硬件將不會把CPSR保存至SPSR中。2.3.3處理器的寄存器組織程序狀態寄存器的訪問NZCV——IM0M1M2M3M4TF—...313029282726876543210

程序狀態寄存器條件代碼標志保留控制位NZCVIM0M1M2M3M4TFCPSR寄存器的格式2.3.3處理器的寄存器組織程序狀態寄存器條件代碼標志大多數“數值處理指令”可以選擇是否影響條件代碼標志位。通常如果指令帶S后綴,則該指令的執行會影響條件代碼標志;但有一些指令的執行總是會影響條件代碼標志。N、Z、C和V位都是條件代碼標志。算術操作、邏輯操作、MSR或者LDM指令可以對這些位進行設置。所有ARM指令都可按條件來執行,而Thumb指令中只有分支指令可按條件執行。程序狀態寄存器條件代碼標志N運算結果的最高位反映在該標志位。對于有符號二進制補碼,結果為負數時N=1,結果為正數或零時N=0;Z指令結果為0時Z=1(通常表示比較結果“相等”),否則Z=0;C當進行加法運算(包括CMN指令),并且最高位產生進位時C=1,否則C=0。當進行減法運算(包括CMP指令),并且最高位產生借位時C=0,否則C=1。對于結合移位操作的非加法/減法指令,C為從最高位最后移出的值,其它指令C通常不變;V當進行加法/減法運算,并且發生有符號溢出時V=1,否則V=0,其它指令V通常不變。程序狀態寄存器控制位CPSR的最低8位為控制位,當發生異常時,這些位被硬件改變。當處理器處于一個特權模式時,可用軟件操作這些位。它們分別是:中斷禁止位;T位;模式位。程序狀態寄存器控制位中斷禁止位包括I和F位:當I位置位時,IRQ中斷被禁止;當F位置位時,FIQ中斷被禁止。T位反映了正在操作的狀態:當T位為1時,處理器正在Thumb狀態下運行;當T位清零時,處理器正在ARM狀態下運行。程序狀態寄存器控制位模式位包括M4、M3、M2、M1和M0,這些位決定處理器的操作模式。注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯誤的設置,將引起一個無法恢復的錯誤。M[4:0]模式可見的Thumb狀態寄存器可見的ARM狀態寄存器10000用戶R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSR10001快中斷R0~R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,CPSR,SPSR_fiq10010中斷R0~R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiqR0~R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq10011管理R0~R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0~R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0~R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0~R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定義R0~R7,SP_und,LR_und,PC,CPSR,SPSR_undR0~R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系統R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSRCPSR模式位設置表程序狀態寄存器保留位CPSR中的保留位被保留將來使用。為了提高程序的可移植性,當改變CPSR標志和控制位時,請不要改變這些保留位。另外,請確保程序的運行不受保留位的值影響,因為將來的處理器可能會將這些位設置為1或者0。2.3.4Thumb狀態的寄存器集ARM狀態和Thumb狀態之間寄存器的關系Thumb狀態寄存器與ARM狀態寄存器有如下的關系:Thumb狀態R0~R7與ARM狀態R0~R7相同;Thumb狀態CPSR和SPSR與ARM狀態CPSR和SPSR相同;Thumb狀態SP映射到ARM狀態R13;Thumb狀態LR映射到ARM狀態R14;Thumb狀態PC映射到ARM狀態PC(R15)。Thumb狀態寄存器在Arm狀態寄存器上的映射R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R0

堆棧指針(R13)

連接寄存器(R14)

程序計數器(R15)

低寄存器高寄存器2.3.4Thumb狀態的寄存器集在Thumb狀態中訪問高寄存器在Thumb狀態中,高寄存器(R8~R15)不是標準寄存器集的一部分。匯編語言程序員對它們的訪問受到限制。可以使用MOV、CMP和ADD指令對高寄存器操作。2.3.4Thumb狀態的寄存器集第二章ARM體系結構1ARM體系結構簡介2ARM微處理器的寄存器結構3ARM微處理器的異常處理45ARM微處理器結構ARM微處理器指令系統6ARM的存儲器結構2.4ARM微處理器的異常處理異常:在一個正常的程序流程執行過程中,由內部或外部源產生的一個事件使正常的程序產生的暫時的停止。例如響應一個來自外設的中斷。在處理異常之前,ARM7TDMI內核自動保存當前狀態,即返回地址存入寄存器R14,當前的處理器狀態(CPSR->SPSR),這樣當處理程序結束時可以恢復執行原來的程序(SPSR->CPSR)。如果同時發生兩個或更多異常,那么將按照固定的優先級來處理異常。ARM體系結構中的異常,與8位/16位體系結構的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。

VectorTable2.4.1異常類型不同的異常將導致處理器進入不同的工作模式,并執行不同特定地址的指令各異常類型具有不同的優先級。復位——發生時,處理器立即停止當前程序,進入禁止中斷的管理模式,并從地址0x00000000處開始執行;未定義指令——在ARM處理器或協處理器認為當前指令未定義時發生;軟件中斷——當用戶模式下的程序使用指令SWI時,處理器便產生軟件中斷,進入管理模式,以調用特權操作。指令預取中止——當處理器預取指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發出中止信號;只有當預取的指令被執行時,才會產生指令預取中止異常。Vectortablecanbeat

0xFFFF0000onARM720T

andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x001665優先級VectorTable不同的異常將導致處理器進入不同的工作模式,并執行不同特定地址的指令各異常類型具有不同的優先級。數據訪問中止——若處理器數據訪問指令的地址不存在,或該地址不允許當前指令訪問時,產生數據中止異常;外部中斷請求——當處理器的外部中斷請求引腳有效,而且CPSR中的I位為0時,產生IRQ異常。系統外設可通過該異常請求中斷服務。快速中斷請求——處理器的快速中斷請求引腳有效,而且CPSR中的F位為0時,產生FIQ異常。Vectortablecanbeat

0xFFFF0000onARM720T

andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x0016652優先級432.4.1異常類型復位當nRESET信號被拉低時(一般外部復位引腳電平的變化和芯片的其它復位源會改變這個內核信號),處理器放棄正在執行的指令。在復位后,除PC和CPSR之外的所有寄存器的值都不確定。當nRESET信號再次變為高電平時,ARM處理器執行下列操作:1.強制CPSR中的M[4:0]變為b10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強制PC從地址0x00開始對下一條指令進行取指;5.返回到ARM狀態并恢復執行。86UndefinedInstruction(未定義指令)當ARM處理器或協處理器遇到不能處理的指令時,會產生未定義指令異常。采用這種機制,對協處理器進行軟件仿真或在軟件仿真時擴展ARM或Thumb指令集。處理器執行以下程序返回,無論是在ARM狀態還是Thumb狀態:

MOVSPC,R14_und以上指令恢復PC(從R14_und)和CPSR(從SPSR_und)的值,并返回到未定義指令后的下一條指令。87SoftwareInterrupt(軟件中斷)

軟件中斷指令(SWI)用于進入管理模式,常用于請求執行特定的管理功能。軟件中斷處理程序執行以下指令可以從SWI模式返回,無論是在ARM狀態還是Thumb狀態:

MOVSPC,R14_svc以上指令恢復PC(從R14_svc)和CPSR(從SPSR_svc) 的值,并返回到SWI的下一條指令。ABORT(中止)

產生中止異常意味著對存儲器的訪問失敗。ARM微處理器在存儲器訪問周期內檢查是否發生中止異常。中止異常包括兩種類型:指令預取中止:發生在指令預取時。數據中止:發生在數據訪問時。當指令預取訪問存儲器失敗時,存儲器系統向ARM處理器發出存儲器中止(Abort)信號,預取的指令被記為無效,但只有當處理器試圖執行無效指令時,指令預取中止異常才會發生,如果指令未被執行,例如在指令流水線中發生了跳轉,則預取指令中止不會發生。若數據中止發生,系統的響應與指令的類型有關。當確定了中止的原因后,Abort處理程序均可以執行以下指令從中止模式返回,無論是在ARM狀態還是Thumb狀態:

SUBSPC,R14_abt,#4;指令預取中止

SUBSPC,R14_abt,#8;數據中止IRQ(InterruptRequest)

IRQ異常屬于正常的中斷請求,可通過對處理器的nIRQ引腳輸入低電平產生,IRQ的優先級低于FIQ,當程序執行進入FIQ異常時,IRQ可能被屏蔽。若將CPSR的I位置為1,則會禁止IRQ中斷,若將CPSR的I位清零,處理器會在指令執行完之前檢查IRQ的輸入。注意只有在特權模式下才能改變I位的狀態。不管是在ARM狀態還是在Thumb狀態下進入IRQ模式,IRQ處理程序均可以執行以下指令從IRQ模式返回:

SUBSPC,R14_irq,#4FIQ(FastInterruptRequest)FIQ異常是為了支持數據傳輸或者通道處理而設計的。快速中斷請求(FIQ)適用于對一個突發事件的快速響應,這得益于在ARM狀態中,快中斷模式有8個專用的寄存器可用來滿足寄存器保護的需要(這可以加速上下文切換的速度)。若將CPSR的F位置為1,則會禁止FIQ中斷,若將CPSR的F位清零,處理器會在指令執行時檢查FIQ的輸入。注意只有在特權模式下才能改變F位的狀態。

可由外部通過對處理器上的nFIQ引腳輸入低電平產生FIQ。不管是在ARM狀態還是在Thumb狀態下進入FIQ模式,FIQ處理程序均可以執行以下指令從FIQ模式返回:

SUBSPC,R14_fiq,#4當多個異常同時發生時,一個固定的優先級系統決定它們被處理的順序:異常優先級異常類型優先級復位1(最高優先級)數據中止2FIQ3IRQ4預取中止5未定義指令6SWI7(最低優先級)優先級降低2.4.2異常的響應過程進入異常在異常發生后,內核會作以下工作:1.在適當的LR中保存下一條指令的地址,當異常入口來自:ARM狀態,那么ARM將當前指令地址加4或加8復制(取決于異常的類型)到LR中;為Thumb狀態,那么ARM將當前指令地址加2、4或加8(取決于異常的類型)復制到LR中;異常處理器程序不必確定狀態。2.4.2異常的響應過程進入異常在異常發生后,內核會作以下工作:2.將CPSR復制到適當的SPSR中;3.將CPSR模式位強制設置為與異常類型相對應的值;4.強制PC從相關的異常向量處取指。內核在中斷異常時置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。注:異常總是在ARM狀態中進行處理。當處理器處于Thumb狀態時發生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態。2.4.2異常的響應過程進入異常異常向量地址異常類型進入時的模式進入時I的狀態進入時F的狀態0x00000000復位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷(SWI)管理禁止F0x0000000C預取中止(指令)中止IF0x00000010數據中止中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對該位有影響,保留原來的值。2.4.2異常的響應過程進入異常程序AIRQ服務程序系統模式IRQ模式程序寄存器組圖示進入異常過程1.程序在系統模式下運行用戶程序,假定當前處理器狀態為Thumb狀態、允許IRQ中斷;2.用戶程序運行時發生IRQ中斷,硬件完成以下動作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進入ARM狀態)設置MOD位,切換處理器模式至IRQ模式將下一條指令的地址存入IRQ模式的LR寄存器將CPSR寄存器內容存入IRQ模式的SPSR寄存器將跳轉地址存入PC,實現跳轉IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對該位不關心當異常結束時,異常處理程序必須:1.將SPSR的值復制回CPSR;2.若在進入異常處理時設置了中斷禁止位,要在此清除;3.將LR(R14)中的值減去偏移量后存入PC,偏移量根據異常的類型而有所不同;注:恢復CPSR的動作會將T、F和I位自動恢復為異常發生前的值。退出異常2.4.2異常的響應過程在異常處理結束后,異常處理程序完成以下動作:程序AIRQ服務程序系統模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復制回CPSR寄存器;將LR寄存的值減去一個常量后復制到PC寄存器,跳轉到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對該位不關心異常入口/出口匯總異常類型返回指令之前的狀態備注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占先而沒有被執行的指令的地址中斷SUBSPC,R14_irq,#4PC+4PC+4數據中止SUBSPC,R14_abt,#8PC+8PC+8此處PC為產生數據中止的裝載或保存指令的地址。

復位無——復位時保存在R14_svc中的值不可預知。

注意:“MOVSPC,R14_svc”是指在管理模式執行MOVSPC,R14指令。“MOVSPC,R14_und”、“SUBSPC,R14_abt,#4”等指令也是類似的。2.4.3應用程序中的異常處理異常的入口和出口處理如果異常處理程序已經把返回地址拷貝到堆棧,那么可以使用堆棧指令來恢復用戶寄存器并實現返回。SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回

如果異常處理程序已經把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復用戶寄存器并實現返回。中斷處理代碼的開始部分和退出部分異常的入口和出口處理注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特

溫馨提示

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

評論

0/150

提交評論