1 / 36

第 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.

gaurav
Download Presentation

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

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

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

  8. 位元組定址若是無號數的話,可定址的範圍: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-8/67

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

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

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

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

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

  14. 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-14/67

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

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

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

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

  19. 分區塊暫存器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-19/67

  20. 程式計數器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-20/67

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

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

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

  24. 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-24/67

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

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

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

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

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

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

  31. 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開始執行。 • 稍後的例外事件,都會進行類似的步驟。

  32. 2.6.5 例外事件進入/跳離 • 總結了進入例外事件處理時,保存在相應R14中的PC值,以及在離開例外事件處理時所建議使用的指令。

  33. 2.6.6 例外事件向量(Exception Vectors) • 當發生相對的例外事件的話,程式就會在此向量位址處開始執行。

  34. 2.6.7 例外事件的優先順序(Exception Priorities) • 例外事件的優先順序由高到低的排列次序。這個部分類似一般微處理器的中斷優先順序。

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

  36. 2.7 討論 • 本章已對ARM微處理器的系列結構、暫存器的組織、微處理器的工作狀態、執行模式以及處理器例外事件等內容進行了描述與相關的介紹,這些內容也是ARM系列結構的基本內容,是系統軟、硬體設計的基礎。稍後的章節將說明本章所延伸的ARM指令集。

More Related