ARM 平台之嵌入式系統設計 第二章 嵌入式硬體平台. 2 本章綱要 2.1 嵌入式系統硬體平台之組成 2.2 微處理機 (Microprocessor) 基本架構 2.3 記憶體子系統
第 2 章 嵌入式微處理器 -ARM
description
Transcript of 第 2 章 嵌入式微處理器 -ARM
嵌入式系統概論 - 以 S3C2440 核心為架構
第 2 章 嵌入式微處理器 -ARM
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-2/67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-3/67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
ARM 微處理器的工作狀態一般有兩種 : ARM 狀態,此時處理器執行 32 位元的字對齊的 ARM指令。
Thumb 狀態,此時處理器執行 16 位元,半字元組對齊的 Thumb 指令。
在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且處理器工作狀態的轉變並不影響處理器的工作模式和相應暫存器中的內容。
P-4/67
2.1 ARM2.1 ARM 微處理器的工作狀態微處理器的工作狀態
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
範例程式片段:
.code 32 // 從此處起的程式以 ARM指令集編譯bx r0 // 若 r0[31:1]為位址 label1 , r0[0] 為 1,當跳躍 // 至 label1處執行時,切換為 Thumb指令集態.code 16 // 指示從此處的程式為 Thumb指令集狀態label1 : // label1程式進入點
2.1 ARM2.1 ARM 微處理器的工作狀態微處理器的工作狀態
P-5/67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-6/67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
ARM 系列結構將記憶體看作是從零位址開始的位元組之線性組合的方式。
從零位元組到三位元組放置第一個記憶體的字元組資料
從第四個位元組到第七個位元組放置第二個記憶體的字元組資料,依次排列。
32 位元的微處理器, ARM 系列結構所支援的最大定址空間為 4GB ( 232 位元組)。
P-7/67
2.2 ARM2.2 ARM 系列結構的定址方式與記憶體格式系列結構的定址方式與記憶體格式
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
位元組定址若是無號數的話,可定址的範圍: 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位元組所組成。
P-8/67
2.2 ARM2.2 ARM 系列結構的定址方式與記憶體格式系列結構的定址方式與記憶體格式
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
而在 ARM 系列結構可以用兩種方法存取字元組資料
大端 (Big Endian) 格式在這種格式中,字元組資料的高位元組是存儲在低位址中,而字元組資料的低位元組則存放在高位址中,如圖 2.1 所示。這一系列的微處理器以 Motorola 系列的晶片組為主要的代表。 字元組對齊的位元組或是半字元組是該位址的最高有效的位元組或是半字元組。
半字元組對齊的位元組是該位址的半字元組的最高有效的位元組。
P-9/67
2.2 ARM2.2 ARM 系列結構的定址方式與記憶體格式系列結構的定址方式與記憶體格式
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
而在 ARM 系列結構可以用兩種方法存取字元組資料
小端 (Little Endian) 格式與大端存儲格式相反,在小端存儲格式中,低位址中存放的是字元組資料的低位元組,高位址存放的是字元組資料的高位元組。這一系列的微處理器以 Atmel 系列的晶片組為主要的代表。 字元組對齊的位元組或是半字元組是該位址的最低有效的位元組或是半字元組。
半字元組對齊的位元組是該位址的半字元組的最低有效的位元組。
2.2 ARM2.2 ARM 系列結構的定址方式與記憶體格式系列結構的定址方式與記憶體格式
P-10/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-11/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
ARM 微處理器的指令長度可以是 32 位元(在ARM 狀態下),也可以為 16 位元(在 Thumb 狀態下)。
ARM 微處理器中支援位元組( 8 位元),半字元組( 16 位元)以及字元組( 32 位元)三種資料類型。其中,字需要 4 位元組對齊(位址的低兩位元為 0 ),半字元組需要 2 位元組對齊(位址的最低位為 0 )。
2.3 2.3 指令長度及資料類型指令長度及資料類型
P-12/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-13/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
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 ):當未定義的指令執行時進入該模式,可用於支援硬體輔助運算器的軟體除錯。
P-14/
67
2.4 2.4 處理器模式處理器模式
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-15/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
整個 ARM 微處理器的暫存器中,共有 37 個 32 位元暫存器,其中 31 個為通用暫存器, 6 個為程式狀態暫存器。
暫存器是不能被同時被存取,至於哪些暫存器是可編程存取的,則取決於微處理器的工作狀態以及目前的執行模式。
任何時刻,通用暫存器 R0 ~ R14 、程式計數器PC 、一個或兩個程式狀態暫存器都是可存取的。
2.5 2.5 暫存器內容暫存器內容
P-16/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
通用暫存器包括 R0 ~ R15 ,可以分為三類:未分區塊暫存器 R0 ~ R7 :
在所有的執行模式下,未分區塊暫存器都指向同一個實體暫存器,他們未被系統用作特殊的用途。但是在中斷或例外事件處理進行執行模式轉換時,由於不同的處理器執行模式均使用相同的實體暫存器,可能會造成暫存器中資料被破壞或是被更改。
P-17/
67
2.5.1 ARM2.5.1 ARM 狀態下的暫存器內容狀態下的暫存器內容
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
分區塊暫存器 R8 ~ R14
對於分區塊暫存器,他們每一次所存取的實體暫存器與處理器目前的執行模式有關。
對於 R8 ~ R12 來說,每個暫存器對應兩個不同的實體暫存器。例如,當使用 FIQ 模式時,存取暫存器是R8_FIQ ~ R12_FIQ ;當使用除 FIQ 模式以外的其他模式時,存取暫存器就變成 R8_USR ~ R12_USR 。
對於 R13 、 R14 來說,每個暫存器對應 6 個不同的實體暫存器,其中的一個是使用者模式與系統模式共用,另外 5 個實體暫存器對應於其他 5 種不同的執行模式。
P-18/
67
2.5.1 ARM2.5.1 ARM 狀態下的暫存器內容狀態下的暫存器內容
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
分區塊暫存器 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 ,即可完成副程式的呼叫返回。
P-19/
67
2.5.1 ARM2.5.1 ARM 狀態下的暫存器內容狀態下的暫存器內容
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
程式計數器 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 。
P-20/
67
2.5.1 ARM2.5.1 ARM 狀態下的暫存器內容狀態下的暫存器內容
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
R16 暫存器: R16 暫存器是 CPSR(Current Program Status Register ,目前程式狀態暫存器 ) , CPSR 可在任何執行模式下被存取,它包括條件旗標(旗標)位元、中斷除能位元、當前處理器模式旗標(旗標)位元,以及其他一些相關的控制和狀態位元。
每一種執行模式下又都有一個專用的實體狀態暫存器,稱之為 SPSR ( Saved Program Status Register ,備份程式狀態暫存器)。當例外事件發生時, SPSR 用來保存 CPSR 的目前值,而從例外事件退出時,則可由SPSR 的備份值來恢復 CPSR 暫存器。
由於使用者模式和系統模式不屬於例外模式,所以都不具有 SPSR 。若是在這兩種模式下,來存取 SPSR 的話,則結果是未知的。
2.5.1 ARM2.5.1 ARM 狀態下的暫存器內容狀態下的暫存器內容
P-21/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
ARM 系列結構中,包含一個目前程式狀態暫存器( CPSR )和五個備份程式狀態暫存器( SPSRs )。備份程式狀態暫存器是用來進行例外事件處理,其功能包括: 保存 ALU 中的當前操作資訊 控制允許和除能中斷 設置處理器的執行模式 條件碼旗標欄位( Condition Code Flags ) N 、 Z 、 C 與 V 均為條件碼旗標位元。它們的內容可被算術或邏輯運算的結果而有所改變,並且可以決定某條指令是否被執行。
在 ARM 狀態下,絕大多數的指令都是有條件執行的。在 Thumb 狀態下,僅有分支指令是有條件執行的。
P-22/
67
2.5.3 2.5.3 程式狀態暫存器程式狀態暫存器
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
條件碼旗標位元的各個位元的具體含義
P-23/
67
旗標位元 意 義N 負旗標,當用 2補數所表示的有號數進行運算時, N=1,表示運算的結果為負數; N=0
,表示運算的結果為正數或零;Z 零旗標, Z=1 表示運算的結果為零; Z=0表示運算的結果為非零;C 進位旗標,可以有 4種方法來設置 C的值:
─ 加法運算(包括比較指令 CMN):當運算結果產生了進位位元時(無號數溢出), C=1,否則 C=0。─ 減法運算(包括比較指令 CMP):當運算時產生了借位(無號數溢出),則 C=0,否則 C=1。─ 對於包含移位操作的非加 /減運算指令, C為移出值的最後一位元。─ 對於其他的非加 /減運算指令, C值通常不改變。
V 溢位旗標,可以有 2種方法來設置 V的值:─ 對於加 /減法運算指令,當運算元和運算結果為 2補數表示的有號數時, V=1表示有號位元溢位。─ 對於其他的非加 /減運算指令, C的值通常不改變。
Q 在 ARM v5及以上版本的 E系列處理器中,用 Q旗標位元指示增強的 DSP運算指令是否發生了溢出。在其他版本的處理器中, Q旗標位元無定義。
2.5.3 2.5.3 程式狀態暫存器程式狀態暫存器
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
PSR 的低 8 位元(包括 I 、 F 、 T 和 M[4 : 0] )稱為控制位元。當發生例外事件的情況時,這些位元可以被改變。如果處理器要執行特權模式,這些位元也可以由程式來加以修改。
中斷除能位元 I 與 F : I=1 ,除能 IRQ 中斷。 F=1 ,除能 FIQ 中斷。
T旗標位元:該位元反映處理器的執行狀態。
P-24/
67
2.5.3 2.5.3 程式狀態暫存器程式狀態暫存器
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-25/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
當正常的程式執行流程發生暫時的停止時,稱之為例外事件。 例:處理一個外部的中斷請求。在處理例外事件之前,目前處理器的狀態必須加以保留,這樣當例外事件處理完成之後,目前程式才可以繼續執行。處理器允許多個例外事件同時發生,它們將會按固定的優先順序來進行處理。
這種存在 ARM 系列結構中的例外事件,是與 8 位元 /16 位元系列結構的中斷有很大的相似之處,但例外事件與中斷的概念並不完全相同。
2.6 2.6 例外(例外( ExceptionsExceptions )事件)事件
P-26/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
ARM 系列結構所支援的例外事件以及其具體含義 2.6.1 ARM2.6.1 ARM 系列結構所支援的例外事件類型系列結構所支援的例外事件類型
P-27/
67
例外事件類型 具體含義重置 當處理器的重置電位 (nRESET)有效時,產生重置例外,程式會跳躍到重置例
外處理程式處開始執行。未定義指令 當 ARM微處理器或輔助運算器遇到不能處理的指令時,產生未定義指令例外
。但我們可以使用這種例外的機制來進行軟體模擬與除錯的目的。軟體中斷 該例外由執行 SWI指令產生,可用於使用者模式下的程式引用特權操作指令
。但我們可使用這種例外機制來實現系統功能的引用。指令預取中止 若處理器預取指令的位址是不存在,或是該位址不允許當前指令存取,記憶體
會向處理器發出中止信號,但當預取的指令被執行時,才會產生指令預取中止例外事件。
資料中止 若處理器資料存取指令的位址不存在,或該位址不允許當前指令存取時,產生資料中止例外事件。
IRQ(外部中斷請求)
當處理器的外部中斷請求接腳 (nIRQ)有效,且 CPSR中的 I位元為 0時,產生 IRQ例外事件。系統的外部設備可通過該例外事件來請求中斷服務。
FIQ(快速中斷請求)
當處理器的快速中斷請求接腳( nFIQ)有效,且 CPSR中的 F位元為 0時,產生 FIQ例外事件。
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
當一個例外事件出現以後,會將下一條指令的位址存入相應鏈結暫存器 LR ,以便程式在處理例外事件返回時能從正確的位置重新開始執行。
若例外事件是從 ARM 狀態進入的話, LR 暫存器中保存的是下一條指令的位址(目前 PC + 4 或 PC + 8 ,與例外事件的類型有關);若例外事件是從 Thumb 狀態進入,則在 LR 暫存器中保存目前 PC 的偏移量。
這樣,例外事件處理程式就不需要確定例外事件是從何種狀態進入的。例如:在軟體中斷例外 SWI 事件中,指令 MOV PC , R14_SVC總是會返回到下一條指令,不管 SWI 是在 ARM 狀態執行,還是在 Thumb狀態執行。
2.6.2 2.6.2 對例外事件的回應方式對例外事件的回應方式
P-28/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
當例外事件處理完畢之後,對於程式設計者來說,需執行下列的工作(同時): 1、將目前程式操作模式的 SPSR內容複製至 CPSR 。 2、根據目前程式操作模式的鏈結暫存器 LR , R14值,將返回位址值設定至 PC中。返回位址的值需根據 R14的值,目前處理器指令集狀態和程式操作模式來計算出。例如, SUBS PC , R14_SVC , #4 。
3 、若在進入例外處理時設置了中斷除能位元,要在此加以清除掉。
2.6.3 2.6.3 從例外事件返回從例外事件返回
P-29/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
重置 當系統的電源重新被啟動或是 ARM 微處理器的重置訊號輸入接腳上,偵測到產生重置電位時,則 ARM 微處理器就會產生重置例外事件。
重置例外事件處理的程式通常是用來設定或是執行下列的工作,以其整個系統的運作重新正常地執行:
設定重置例外事件向量表。 啟始暫存器與堆疊位址。 若系統是包含MMU ,則啟始記憶體系統。 啟始輸出入設備的外部接腳狀態。 設定此系統所要用到的中斷。 設定處理器指令狀態或是操作模式。 設定相當變數的初始值。 呼叫主程式。
2.6.4 2.6.4 各類型例外事件的具體描述各類型例外事件的具體描述
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
重置 當發生重置例外事件時,目前正在執行的指令會被放棄,但是仍會持續地讀取指令,直到重置訊號輸入接腳恢復到正常電位為止。微處理器會執行下列的步驟:
將目前的程式計數值暫存器 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 開始執行。
稍後的例外事件,都會進行類似的步驟。
2.6.4 2.6.4 各類型例外事件的具體描述各類型例外事件的具體描述
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
總結了進入例外事件處理時,保存在相應 R14 中的PC值,以及在離開例外事件處理時所建議使用的指令。
返回指令之前的狀態
注意ARM R14_x
Thumb R14_x
BL MOV PC , R14 PC + 4 PC + 2 1
SWI MOVS PC , R14_SVC PC + 4 PC + 2 1
UDEF MOVS PC , R14_UND PC + 4 PC + 2 1
FIQ SUBS PC , R14_FIQ,# 4 PC + 4 PC + 4 2
IRQ SUBS PC , R14_IRQ,# 4 PC + 4 PC + 4 2
PABT SUBS PC , R14_ABT,# 4 PC + 4 PC + 4 1
DABT SUBS PC , R14_ABT,# 8 PC + 8 PC + 8 3
RESET NA - - 4
2.6.5 2.6.5 例外事件進入例外事件進入 //跳離跳離
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
當發生相對的例外事件的話,程式就會在此向量位址處開始執行。
2.6.6 2.6.6 例外事件向量(例外事件向量( Exception VectorsException Vectors ))
位 址 例外事件 進入模式0x0000,0000 重置 管理模式0x0000,0004 未定義指令 未定義模式0x0000,0008 軟體中斷 管理模式0x0000,000C 中止(預取指令) 中止模式0x0000,0010 中止(數據) 中止模式0x0000,0014 保留 保留0x0000,0018 IRQ IRQ
0x0000,001C FIQ FIQ
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
2.6.7 2.6.7 例外事件的優先順序(例外事件的優先順序( Exception PrioritiesException Priorities ))
優先順序 例外件事1(最高) 重置2 資料中止3 FIQ
4 IRQ
5 預取指令中止6(最低) 未定義指令、 SWI
例外事件的優先順序由高到低的排列次序。這個部分類似一般微處理器的中斷優先順序。
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
大綱大綱2.1 ARM 微處理器的工作狀態2.2 ARM 系列結構的定址方式與記憶體格式2.3 指令長度及資料類型2.4 處理器模式2.5 暫存器內容2.6 例外( Exceptions )事件2.7 討論
P-35/
67
嵌入式系統概論 - 以 S3C2440 核心為架構 copyright @ 許永和
2.7 2.7 討論討論
本章已對 ARM 微處理器的系列結構、暫存器的組織、微處理器的工作狀態、執行模式以及處理器例外事件等內容進行了描述與相關的介紹,這些內容也是ARM 系列結構的基本內容,是系統軟、硬體設計的基礎。稍後的章節將說明本章所延伸的 ARM 指令集。