1 / 61

第 2 章 嵌入式微處理器 -ARM

第 2 章 嵌入式微處理器 -ARM. 大綱. 2.1 ARM 微處理器的工作狀態 2.2 ARM 系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外( Exceptions )事件 2.7 討論. 大綱. 2.1 ARM 微處理器的工作狀態 2.2 ARM 系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外( Exceptions )事件 2.7 討論. P- 3 /67.

verda
Télécharger la présentation

第 2 章 嵌入式微處理器 -ARM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 嵌入式微處理器-ARM

  2. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論

  3. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-3/67

  4. ARM微處理器的工作狀態一般有兩種 : ARM狀態,此時處理器執行32位元的字對齊的ARM指令。 Thumb狀態,此時處理器執行16位元,半字元組對齊的Thumb指令。 在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且處理器工作狀態的轉變並不影響處理器的工作模式和相應暫存器中的內容。 2.1 ARM微處理器的工作狀態

  5. ARM指令集和Thumb指令集均有切換處理器狀態的指令,並可在兩種工作狀態之間切換,但ARM微處理器在一開始執行程式碼時,應處於ARM狀態。ARM指令集和Thumb指令集均有切換處理器狀態的指令,並可在兩種工作狀態之間切換,但ARM微處理器在一開始執行程式碼時,應處於ARM狀態。 ARM微處理器狀態的切換: 進入Thumb狀態:當運算元暫存器<Rm>的狀態位元(bit-0)為1時,可以採用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。 當處理器處於Thumb狀態時,若是發生了例外事件(如IRQ、FIQ、UNDef、Abort與SWI等)的話,則當例外事件處理後返回時,能夠自動切換到Thumb狀態。 進入ARM狀態:當運算元暫存器<Rm>的狀態位元為0時,執行BX指令時可以使微處理器從Thumb狀態切換到ARM狀態。 微處理器在進行例外處理時,把PC指標器放入例外事件模式的鏈結暫存器(LR)中,並從例外事件向量位址開始處執行程式,也可以使微處理器切換到ARM狀態。 2.1 ARM微處理器的工作狀態 P-5/67

  6. 在這裡運用切換微處理器狀態的指令是BX。BX指令將暫存器<Rm>的數值複製至PC中,以達到轉移程式控制權。在這裡運用切換微處理器狀態的指令是BX。BX指令將暫存器<Rm>的數值複製至PC中,以達到轉移程式控制權。 透過將根據暫存器<Rm>的最低位元<Rm>[0]來變更指令集狀態,<Rm>[0]為1,則變更為Thumb指令集狀態。<Rm>[0]為0,則變更為ARM指令集狀態。此指令可將程式控制權轉移到4GB絕對位址的任一字元位址。 2.1 ARM微處理器的工作狀態 P-6/67

  7. 範例程式片段: .code 32 // 從此處起的程式以ARM指令集編譯 bx r0 // 若r0[31:1]為位址label1,r0[0]為1,當跳躍//至label1處執行時,切換為Thumb指令集態 .code 16 // 指示從此處的程式為Thumb指令集狀態 label1 : // label1程式進入點 2.1 ARM微處理器的工作狀態 P-7/67

  8. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-8/67

  9. ARM系列結構將記憶體看作是從零位址開始的位元組之線性組合的方式。從零位元組到三位元組放置第一個記憶體的字元組資料,從第四個位元組到第七個位元組放置第二個記憶體的字元組資料,依次排列。作為32位元的微處理器,ARM系列結構所支援的最大定址空間為4GB(232位元組)。ARM系列結構將記憶體看作是從零位址開始的位元組之線性組合的方式。從零位元組到三位元組放置第一個記憶體的字元組資料,從第四個位元組到第七個位元組放置第二個記憶體的字元組資料,依次排列。作為32位元的微處理器,ARM系列結構所支援的最大定址空間為4GB(232位元組)。 2.2 ARM系列結構的定址方式與記憶體格式

  10. 位元組定址若是無號數的話,可定址的範圍:0~232 –1。 可視為230個32位元組,以字元對齊(word-aligned)的話,則位址可被4整除。 字元組對齊的A,是由A,A+1,A+2,A+3位元組所組成。 V4以上的版本,定址空間可視為由231個16位元的半位元組所組成。 若是半字元組對齊(halfword-aligned)的話,則位址可被2整除,且半字元組對齊的A,是由A,A+1位元組所組成。 2.2 ARM系列結構的定址方式與記憶體格式 P-10/67

  11. 此外,位址空間在排列時,需按照某種規則來排列。對於字元組對齊的位址A,定址空間的規則是:此外,位址空間在排列時,需按照某種規則來排列。對於字元組對齊的位址A,定址空間的規則是: 位於位址A的字元組是由:A,A+1,A+2,A+3的位元組所組成。 位於位址A的字半元組是由:A,A+1的位元組所組成。 位於位址A+2的半字元組是由:A+2,A+3的位元組所組成。 位於位址A的字元組是由:A,A+2的半字元組所組成。 2.2 ARM系列結構的定址方式與記憶體格式 P-11/67

  12. 而在ARM系列結構可以用兩種方法存取字元組資料而在ARM系列結構可以用兩種方法存取字元組資料 大端(Big Endian)格式 在這種格式中,字元組資料的高位元組是存儲在低位址中,而字元組資料的低位元組則存放在高位址中,如圖1所示。這一系列的微處理器以Motorola系列的晶片組為主要的代表。 字元組對齊的位元組或是半字元組是該位址的最高有效的位元組或是半字元組。 半字元組對齊的位元組是該位址的半字元組的最高有效的位元組。 2.2 ARM系列結構的定址方式與記憶體格式 圖1、以大端格式儲存字元組資料 P-12/67

  13. 而在ARM系列結構可以用兩種方法存取字元組資料而在ARM系列結構可以用兩種方法存取字元組資料 小端(Little Endian)格式 與大端存儲格式相反,在小端存儲格式中,低位址中存放的是字元組資料的低位元組,高位址存放的是字元組資料的高位元組。這一系列的微處理器以Atmel系列的晶片組為主要的代表。 字元組對齊的位元組或是半字元組是該位址的最低有效的位元組或是半字元組。 半字元組對齊的位元組是該位址的半字元組的最低有效的位元組。 2.2 ARM系列結構的定址方式與記憶體格式 圖2、以小端格式儲存字元組資料 P-13/67

  14. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-14/67

  15. ARM微處理器的指令長度可以是32位元(在ARM狀態下),也可以為16位元(在Thumb狀態下)。ARM微處理器的指令長度可以是32位元(在ARM狀態下),也可以為16位元(在Thumb狀態下)。 ARM微處理器中支援位元組(8位元),半字元組(16位元)以及字元組(32位元)三種資料類型。其中,字需要4位元組對齊(位址的低兩位元為0),半字元組需要2位元組對齊(位址的最低位為0)。 2.3 指令長度及資料類型

  16. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-16/67

  17. ARM微處理器支援7種執行模式,分別為: 使用者模式(User Mode,usr):ARM微處理器正常的程式執行狀態 快速中斷模式(Fast Interrupt Request Mode,FIQ):應用於高速資料傳輸或通道處理。 外部中斷模式(Interrupt Request Mode,IRQ):用於通用的中斷處理。 管理者模式(Supervisor Mode,SVC):作業系統使用的保護模式。 中止模式(Abort Mode,ABT):當資料或指令預取終止時進入該模式,可用於虛擬儲存及儲存保護。 系統模式(System Mode,sys):執行具有特權的作業系統任務。 未定義指令中止模式(UNDefined Mode,UND):當未定義的指令執行時進入該模式,可用於支援硬體輔助運算器的軟體除錯。 2.4 處理器模式 P-17/67

  18. ARM微處理器的執行模式可以通過軟體改變,也可以通過外部中斷或例外處理來改變。ARM微處理器的執行模式可以通過軟體改變,也可以通過外部中斷或例外處理來改變。 大多數的應用程式都是執行在使用者模式下。此模式下,某些被保護的系統資源是不能被存取的。 除使用者模式以外,其餘的所有6種模式稱之為非使用者模式,或特權模式(Privileged Modes)。 除了使用者模式和系統模式以外的5種又稱為例外模式(Exception Modes),常用於處理中斷或例外,以及需要存取受保護的系統資源等情況。 2.4 處理器模式 P-18/67

  19. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-19/67

  20. 整個ARM微處理器的暫存器中,共有37個32位元暫存器,其中31個為通用暫存器,6個為程式狀態暫存器,如圖3所示。整個ARM微處理器的暫存器中,共有37個32位元暫存器,其中31個為通用暫存器,6個為程式狀態暫存器,如圖3所示。 暫存器是不能被同時被存取,至於哪些暫存器是可編程存取的,則取決於微處理器的工作狀態以及目前的執行模式。 任何時刻,通用暫存器R0~R14、程式計數器PC、一個或兩個程式狀態暫存器都是可存取的。 2.5 暫存器內容

  21. 2.5 暫存器內容 圖3、ARM狀態下的暫存器架構 P-21/67

  22. 通用暫存器包括R0~R15,可以分為三類: 未分區塊暫存器R0~R7: 在所有的執行模式下,未分區塊暫存器都指向同一個實體暫存器,他們未被系統用作特殊的用途。但是在中斷或例外事件處理進行執行模式轉換時,由於不同的處理器執行模式均使用相同的實體暫存器,可能會造成暫存器中資料被破壞或是被更改。 2.5.1 ARM狀態下的暫存器內容

  23. 分區塊暫存器R8~R14 對於分區塊暫存器,他們每一次所存取的實體暫存器與處理器目前的執行模式有關。 對於R8~R12來說,每個暫存器對應兩個不同的實體暫存器。例如,當使用FIQ模式時,存取暫存器是R8_FIQ~R12_FIQ;當使用除FIQ模式以外的其他模式時,存取暫存器就變成R8_USR~R12_USR。 對於R13、R14來說,每個暫存器對應6個不同的實體暫存器,其中的一個是使用者模式與系統模式共用,另外5個實體暫存器對應於其他5種不同的執行模式。 2.5.1 ARM狀態下的暫存器內容 P-23/67

  24. 分區塊暫存器R8~R14 暫存器R13在ARM指令中常用作堆疊指標(SP),但這只是一種習慣用法,使用者也可使用其他的暫存器作為堆疊指標。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆疊指標。 由於處理器的每種執行模式均有自己獨立的R13實體暫存器,在使用者應用程式的初始化部分,一般都要初始化每種模式下的R13,使其指向該執行模式的堆疊空間。如此,當程式的執行進入例外模式時,可以將需要保護的暫存器放入R13所指向的堆疊。而當程式從例外模式返回時,則從對應的堆疊中恢復。 採用這種方式可以保證例外事件發生後,程式可以正常執行。 2.5.1 ARM狀態下的暫存器內容 P-24/67

  25. 分區塊暫存器R8~R14 R14也稱作副程式鏈結暫存器(Subroutine Link Register)或鏈結暫存器(LR)。當執行BL副程式呼叫指令時,R14中可以取得R15(程式計數器PC)的備份。其他情況下,R14則用來作為通用暫存器。而我們可以加以推衍,當發生中斷或例外事件時,對應的分區塊暫存器R14_SVC、R14_IRQ、R14_FIQ、R14_ABT和R14_UND用來保存R15的返回值。 而在每一種執行模式下,都可用R14保存副程式的返回位址,當用BL或BLX指令呼叫副程式時,將PC的目前值拷貝給R14,執行完副程式後,又將R14的值拷貝回PC,即可完成副程式的呼叫返回。 2.5.1 ARM狀態下的暫存器內容 P-25/67

  26. 以上的描述可用指令完成: 第一步,執行以下任意一條指令: MOV PC,LR BX LR 第二步,在副程式入口處可以使用以下指令將R14存入堆疊: STMFD SP!,{<Regs>,LR} 對應的,使用以下指令來完成副程式的返回步驟: LDMFD SP!,{<Regs>,PC} 此外,R14也可作為通用暫存器。 2.5.1 ARM狀態下的暫存器內容 P-26/67

  27. 程式計數器PC(R15) 暫存器R15用作程式計數器(PC)。在ARM狀態下,位元[1:0]為0,位元[31:2]用於保存PC值;在Thumb狀態下,位元[0]為0,位元[31:1]則用於保存PC值; 雖然R15可以用作通用暫存器,但是有一些指令在使用R15時有一些特殊限制,若不注意的話,執行的結果將是不可預測的。在ARM狀態下,PC的bit-0和bit-1是0,在Thumb狀態下,PC的bit-0則是0。 2.5.1 ARM狀態下的暫存器內容 P-27/67

  28. 程式計數器PC(R15) R15雖然也可用作通用暫存器,但一般都不這麼使用。因為對R15的使用上還是有一些特殊的限制,若是違反了這些限制時,程式的執行結果則是未知的。 由於ARM系列結構採用了多級管線技術,對於ARM指令集而言,PC總是指向當前指令的後兩條指令的位址,也即是PC的數值為當前指令的位址值再加8個位元組。 在ARM狀態下,任一時刻可以存取以上所討論的16個通用暫存器與一到兩個狀態暫存器。在非使用者模式(特權模式)下,則可存取到特定模式分區塊暫存器, 2.5.1 ARM狀態下的暫存器內容 P-28/67

  29. R16暫存器: R16暫存器是CPSR(Current Program Status Register,目前程式狀態暫存器),CPSR可在任何執行模式下被存取,它包括條件旗標(旗標)位元、中斷除能位元、當前處理器模式旗標(旗標)位元,以及其他一些相關的控制和狀態位元。 每一種執行模式下又都有一個專用的實體狀態暫存器,稱之為SPSR(Saved Program Status Register,備份程式狀態暫存器)。當例外事件發生時,SPSR用來保存CPSR的目前值,而從例外事件退出時,則可由SPSR的備份值來恢復CPSR暫存器。 由於使用者模式和系統模式不屬於例外模式,所以都不具有SPSR。若是在這兩種模式下,來存取SPSR的話,則結果是未知的。 2.5.1 ARM狀態下的暫存器內容 P-29/67

  30. Thumb狀態下的暫存器集是ARM狀態下暫存器集的一個子集,程式可以直接存取8個通用暫存器(R7~R0)、程式計數器(PC)、堆疊指標(SP)、連接暫存器(LR)和CPSR。同時,在每一種特權模式下都有一組SP、LR和SPSR。如圖4所示,為Thumb狀態下的暫存器架構圖。Thumb狀態下的暫存器集是ARM狀態下暫存器集的一個子集,程式可以直接存取8個通用暫存器(R7~R0)、程式計數器(PC)、堆疊指標(SP)、連接暫存器(LR)和CPSR。同時,在每一種特權模式下都有一組SP、LR和SPSR。如圖4所示,為Thumb狀態下的暫存器架構圖。 而Thumb狀態下的暫存器架構與ARM狀態下的暫存器架構的對應關係,是如下所列: Thumb狀態下和ARM狀態下的R0~R7是相同的。 Thumb狀態下和ARM狀態下的CPSR和所有的SPSR是相同的。 Thumb狀態下的SP對應於ARM狀態下的R13。 Thumb狀態下的LR對應於ARM狀態下的R14。 Thumb狀態下的程式計數器對應於ARM狀態下R15。 2.5.2 Thumb狀態下的暫存器組織

  31. 2.5.2 Thumb狀態下的暫存器組織 圖4、Thumb狀態下的暫存器架構圖 P-31/67

  32. 在Thumb狀態下,高位暫存器(Hi-registers),R8~R15並不是標準暫存器子集的一部分,但可使用組合語言程式受限制的存取這些暫存器,將其用作快速的暫存器。使用帶特殊變數的MOV指令,資料可以在低位元暫存器和高位暫存器之間進行傳送;高位暫存器的值可以使用CMP和ADD指令進行比較或加上低位暫存器中的值。在Thumb狀態下,高位暫存器(Hi-registers),R8~R15並不是標準暫存器子集的一部分,但可使用組合語言程式受限制的存取這些暫存器,將其用作快速的暫存器。使用帶特殊變數的MOV指令,資料可以在低位元暫存器和高位暫存器之間進行傳送;高位暫存器的值可以使用CMP和ADD指令進行比較或加上低位暫存器中的值。 2.5.2 Thumb狀態下的暫存器組織 P-32/67

  33. 2.5.2 Thumb狀態下的暫存器組織 圖5、ARM與Thumb狀態下的暫存器對應圖 P-33/67

  34. ARM系列結構中,包含一個目前程式狀態暫存器(CPSR)和五個備份程式狀態暫存器(SPSRs)。備份程式狀態暫存器是用來進行例外事件處理,其功能包括:ARM系列結構中,包含一個目前程式狀態暫存器(CPSR)和五個備份程式狀態暫存器(SPSRs)。備份程式狀態暫存器是用來進行例外事件處理,其功能包括: 保存ALU中的當前操作資訊 控制允許和除能中斷 設置處理器的執行模式 條件碼旗標欄位(Condition Code Flags) N、Z、C與V均為條件碼旗標位元。它們的內容可被算術或邏輯運算的結果而有所改變,並且可以決定某條指令是否被執行。 2.5.3 程式狀態暫存器

  35. 在ARM狀態下,絕大多數的指令都是有條件執行的。在ARM狀態下,絕大多數的指令都是有條件執行的。 在Thumb狀態下,僅有分支指令是有條件執行的。 2.5.3 程式狀態暫存器 圖6、程式狀態暫存器狀態 P-35/67

  36. 條件碼旗標位元的各個位元的具體含義 2.5.3 程式狀態暫存器 P-36/67

  37. PSR的低8位(包括I、F、T和M[4:0])稱為控制位元。當發生例外事件的情況時,這些位元可以被改變。如果處理器要執行特權模式,這些位元也可以由程式來加以修改。PSR的低8位(包括I、F、T和M[4:0])稱為控制位元。當發生例外事件的情況時,這些位元可以被改變。如果處理器要執行特權模式,這些位元也可以由程式來加以修改。 中斷除能位元I與F: I=1,除能IRQ中斷。 F=1,除能FIQ中斷。 T旗標位元:該位元反映處理器的執行狀態。 2.5.3 程式狀態暫存器 P-37/67

  38. 對於ARM系列結構V5及以上的版本的Thumb系列處理器,當該位元為1時,程式執行於Thumb狀態,否則執行於ARM狀態。對於ARM系列結構V5及以上的版本的Thumb系列處理器,當該位元為1時,程式執行於Thumb狀態,否則執行於ARM狀態。 對於ARM系列結構V5及以上的版本的非Thumb系列處理器,當該位為1時,執行下一條指令以引起為定義的指令例外;當該位為0時,表示執行於ARM狀態。 執行模式位元M[4:0]:M0、M1、M2、M3與M4是模式位元。這些位元決定了處理器的執行模式。 2.5.3 程式狀態暫存器 P-38/67

  39. 保留位元 PSR中的其餘位元為保留位元,當改變PSR中的條件碼旗標位元或者控制位元時,保留位元不要被改變,在程式中也不要使用保留位元來存儲資料。保留位元將應用於未來ARM版本的擴展上。 2.5.3 程式狀態暫存器 P-39/67

  40. 大綱 2.1 ARM微處理器的工作狀態 2.2 ARM系列結構的定址方式與記憶體格式 2.3 指令長度及資料類型 2.4 處理器模式 2.5 暫存器內容 2.6 例外(Exceptions)事件 2.7 討論 P-40/67

  41. 當正常的程式執行流程發生暫時的停止時,稱之為例外事件。當正常的程式執行流程發生暫時的停止時,稱之為例外事件。 例:處理一個外部的中斷請求。在處理例外事件之前,目前處理器的狀態必須加以保留,這樣當例外事件處理完成之後,目前程式才可以繼續執行。處理器允許多個例外事件同時發生,它們將會按固定的優先順序來進行處理。 這種存在ARM系列結構中的例外事件,是與8位元/16位元系列結構的中斷有很大的相似之處,但例外事件與中斷的概念並不完全相同。 2.6 例外(Exceptions)事件 P-41/67

  42. ARM系列結構所支援的例外事件以及其具體含義 2.6.1 ARM系列結構所支援的例外事件類型 P-42/67

  43. 當一個例外事件出現以後,會將下一條指令的位址存入相應鏈結暫存器LR,以便程式在處理例外事件返回時能從正確的位置重新開始執行。當一個例外事件出現以後,會將下一條指令的位址存入相應鏈結暫存器LR,以便程式在處理例外事件返回時能從正確的位置重新開始執行。 若例外事件是從ARM狀態進入的話,LR暫存器中保存的是下一條指令的位址(目前PC+4或PC+8,與例外事件的類型有關);若例外事件是從Thumb狀態進入,則在LR暫存器中保存目前PC的偏移量。 這樣,例外事件處理程式就不需要確定例外事件是從何種狀態進入的。例如:在軟體中斷例外SWI事件中,指令 MOV PC,R14_SVC總是會返回到下一條指令,不管SWI是在ARM狀態執行,還是在Thumb狀態執行。 2.6.2 對例外事件的回應方式 P-43/67

  44. 當一個例外事件出現以後,ARM微處理器會執行以下幾個步驟來執行,如圖7所示:當一個例外事件出現以後,ARM微處理器會執行以下幾個步驟來執行,如圖7所示: 將CPSR的內容複製至相對應的程式操作模式的SPSR中。EX: 軟體中斷指令SWI會引發軟體中斷SWI指令特例事件,SPSR_SVC=CPSR 根據例外事件類型,強制設置CPSR的執行模式位元。將特例事件設定至CPSR中的程式操作模式位元,並設定中斷除能位元,若發生的特例事件是快速中斷要求,則一併設定快速中斷除能位元。EX:CPSR_M=0b10011(Supervisor Mode),CPSR_I=1 將返回位址儲存至相對應操作模式的鏈結暫存器R14。這返回位址是發生特例事件時,正常流程下應執行而尚未執行的指令位址。EX:R14_SVC=PC-4 將特例事件向量填寫至PC中。EX:PC=0x00000008 如果例外發生時,微處理器是處於Thumb狀態的話,則當例外向量位址加載至PC時,微處理器就會自動切換到ARM狀態。 2.6.2 對例外事件的回應方式 P-44/67

  45. 2.6.2 對例外事件的回應方式 圖7、例外事件發生時,所需執行的步驟流程圖 P-45/67

  46. 當例外事件處理完畢之後,對於程式設計者來說,需執行下列的工作(同時):當例外事件處理完畢之後,對於程式設計者來說,需執行下列的工作(同時): 1、將目前程式操作模式的SPSR內容複製至CPSR。 2、根據目前程式操作模式的鏈結暫存器LR,R14值,將返回位址值設定至PC中。返回位址的值需根據R14的值,目前處理器指令集狀態和程式操作模式來計算出。例如,SUBS PC,R14_SVC,#4。 3、若在進入例外處理時設置了中斷除能位元,要在此加以清除掉。 此外,我們可以認為應用程式總是從重置例外事件處理程式開始執行的,因此重置例外處理程式是不需要返回的。 2.6.3 從例外事件返回 P-46/67

  47. 2.6.3 從例外事件返回 • 綜合上述,ARM微處理器對例外事件的回應過程可以透過所列的程式碼來加以說明: • R14_<Exception_Mode> = Return Link • SPSR_<Exception_Mode> = CPSR • CPSR[4:0] = Exception Mode Number • CPSR[5] = 0 ;當執行在ARM工作狀態時 • If <Exception_Mode> == Reset or FIQ then ;當回應FIQ例外事件時,除能新的FIQ例外事件 • CPSR[6] = 1 ; 除能快速中斷(FIQ) • CPSR[7] = 1 ; 除能外部中斷(IRQ) • PC = Exception Vector Address

  48. 2.6.4 各類型例外事件的具體描述 • 重置 • 當系統的電源重新被啟動或是ARM微處理器的重置訊號輸入接腳上,偵測到產生重置電位時,則ARM微處理器就會產生重置例外事件。 • 重置例外事件處理的程式通常是用來設定或是執行下列的工作,以其整個系統的運作重新正常地執行: • 設定重置例外事件向量表。 • 啟始暫存器與堆疊位址。 • 若系統是包含MMU,則啟始記憶體系統。 • 啟始輸出入設備的外部接腳狀態。 • 設定此系統所要用到的中斷。 • 設定處理器指令狀態或是操作模式。 • 設定相當變數的初始值。 • 呼叫主程式。

  49. 2.6.4 各類型例外事件的具體描述 • 重置 • 當發生重置例外事件時,目前正在執行的指令會被放棄,但是仍會持續地讀取指令,直到重置訊號輸入接腳恢復到正常電位為止。微處理器會執行下列的步驟: • 將目前的程式計數值暫存器PC的數值與CPSR的數值分別複製到R14_SVC與SPSR_SVC中。 • 將CPSR中的模式位元設定M[4:0]設定為0b10011(根據表2.2所示)的管理模式(Supervisor Mode),且中斷要求除能位元I與快速中斷要求除能位元F被設定為1(禁止,除能),以及指令集狀態位元T被清除為0(設定為ARM指令集狀態)。 • PC的數值被更新為0x00000000,即是跳回到ARM指令集狀態,並從PC位址0開始執行。 • 稍後的例外事件,都會進行類似的步驟。

  50. 2.6.4 各類型例外事件的具體描述 • FIQ(Fast Interrupt Request) • FIQ例外事件是為了支援資料傳輸或者是通道處理而設計的。在ARM狀態下,系統有足夠的私有暫存器,從而可以避免對暫存器保存的需求,並減小了系統上下頁切換的時間。 • 若將CPSR的F位元為1,則會除能FIQ中斷,若將CPSR的F位元清零,處理器會在指令執行時檢查FIQ的輸入。 • 只有在特權模式下才能改變F位元的狀態。可由外部通過對處理器上的nFIQ引腳輸入低電位平產生FIQ。不管是在ARM狀態還是在Thumb狀態下進入FIQ模式,FIQ處理程式均會執行以下指令從FIQ模式返回。 • SUBS PC,R14_FIQ ,#4,該指令將暫存器R14_FIQ的值減去4後,複製到程式計數器PC中,進而實現從例外事件處理程式中的返回,同時將SPSR_mode暫存器的內容複製到目程式狀態暫存器CPSR中。

More Related