天天看點

ARM core 介紹

作者:程老師,華清遠見嵌入式學院講師。

一、ARM處理器的特點

(1)支援的資料類型

A.位元組        8bit

B.半字        16bit

C.字            32bit

(2)采用32位精簡指令集(RISC)處理器架構

ARM處理器可以工作在兩種狀态:

A . ARM狀态

指令長度為32位,這種狀态執行的是字對齊方式的ARM指令

B. Thumb狀态

指令長度為16位,這種狀态執行半字對齊方式的Thumb指令

主意:這兩個狀态間的切換并不影響處理器模式和寄存器内容

小知識:RISC和CISC

指令的強弱是CPU的重要名額,指令集是提高微處理器效率的最有效工具之一。從現階段的主流體系結構講,指令集可分為複雜指令集(CISC)和精簡指令集(RISC)兩部分。相應的,微處理随着微指令的複雜度也可分為CISC及RISC這兩類。

CISC是一種為了便于程式設計和提高記憶體通路效率的晶片設計體系。在20世紀90年代中期之前,大多數的微處理器都采用CISC體系——包括Intel的80x86和Motorola的68K系列等。即通常所說的X86架構就是屬于CISC體系的。RISC是為了提高處理器運作的速度而設計的晶片體系。它的關鍵技術在于流水線操作(Pipelining):在一個時鐘周期裡完成多條指令。而超流水線以及超标量技術已普遍在晶片設計中使用。RISC體系多用于非x86陣營高性能微處理器CPU。像ARM(Advanced RISC Machines),既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術的名字。而ARM體系結構目前被公認為是業界領先的32位嵌入式RISC 微處理器結構。所有ARM處理器共享這一體系結構。

(1)CISC

CISC複雜指令系統計算機通過增強計算機指令系統功能,通過程式去執行大量功能各異的指令,進而優化計算機系統的性能。

由于具有大量的指令,是以CISC體系的優缺點也很明顯。

優點:

a)具有豐富的指令系統,很大程度上簡化了程式設計的難度。

b)CISC中不要求指令長度統一,可以節省存儲空間。

c)CISC指令可以直接對存儲器操作,使得通用寄存器數目較少。

同時CISC指令系統也帶來很多問題:

a)由于指令系統龐大,尋址方式、指令格式較多,指令長度不一,增加了硬體複雜程式,設計成本較高。

b)指令操作複雜、執行周期長、速度低,難以優化編譯生成高效的機器語言。

c)許多指令使用頻度低,增加了系統負擔,降低了成本效益。

(2)RISC

和CISC相比,RISC的指令就要少得多,通常在幾十條左右,其基本設計思想是盡量簡化計算機的指令功能,進而降低硬體執行指令的複雜度,因為軟體比硬體容易提供更大的靈活性和更高的智能。是以CISC的主要特點如下:

a) 精簡指令集:隻保留了數量很少、功能簡單、能在一個機器周期内完成的指令,如果要執行複雜的程式功能則通過子程式而不是使用複雜指令來實作。

b)指令長度相同:每條指令的長度都是相同的,可以在一個單獨操作裡完成。

c) 單機器周期指令:大多數的指令都可以在一個機器周期裡完成,并且允許處理器在同一時間内執行一系列的指令。

使用RISC指令具有以下優勢:

a) 精簡指令系統的設計适合超大規模內建電路的實作。由于指令條數相對較少,尋址方式簡單,指令格式規整,與CISC結構相比,控制器的譯碼和執行硬體相對簡單,是以晶片中用于實作控制器的晶體面積明顯減小。

b)在使用相同的晶片技術和相同運作時鐘下,RISC系統具有更快的運作速度。精簡的指令系統可以加快指令的譯碼,控制器的簡化可以縮短指令的執行延時等,這些都可以提高程式的執行速度。

c)可以提供直接支援進階語言的能力,簡化編譯程式的設計。指令總數的減少,縮小了編譯過程中對功能類似的機器指令的選擇範圍,減輕了對各種尋址方式進行選擇、分析和變換的負擔,易于更換或取消指令、調整指令順序,提高程式運作速度。

d)RISC處理器比相對應的CISC處理器設計更簡單,所需要的時間将變得更短,并可以比CISC處理器應用更多先進的技術,開發更快的下一代處理器。

相應的,RISC也存在一些缺點,主要有:

a) 由于指令少,是以加重了彙程式設計式員的負擔,增加了機器語言程式的長度,進而占用了較大的存儲空間。

b) 相對來說,RISC對編譯器的要求更高,因為指令簡單,RISC結構的性能就依賴于編譯器的效率。編譯器的優劣直接影響處理器的性能發揮。

綜合上面所述,若要再進一步比較CISC與RISC之差異,可以由以下幾點來進行分析:

1、指令的形成:CISC因指令複雜,故采微指令碼控制單元的設計,而RISC的指令90%是由硬體直接完成,隻有10%的指令是由軟體以組合的方式完成,是以指令執行時間上RISC較短,但RISC所須ROM空間相對的比較大,至于RAM使用大小應該與程式的應用比較有關系。

2、定址模式:CISC的需要較多的定址模式,而RISC隻有少數的定址模式,是以CPU在計算記憶體有效位址時,CISC占用的周期較多。

3、指令周期:CISC指令的格式長短不一,執行時的周期次數也不統一,而RISC結構剛好相反,故适合采用管線處理架構的設計,進而可以達到平均一周期完成一指令的方向努力。顯然的,在設計上RISC較CISC簡單,同時因為CISC的執行步驟過多,閑置的單元電路等待時間增長,不利于平行處理的設計,是以就效能而言RISC較CISC還是站了上風,但RISC因指令精簡化後造成應用程式碼變大,需要較大的程式記憶體空間,且存在指令種類較多等等的缺點。

4、大量使用寄存器

二、ARM處理器的模式與異常

ARM體系結構主要支援7種處理器模式,分别為 : 使用者模式、快中斷模式、中斷模式、管理模式、中止模式,未定義模式和系統模式

ARM core 介紹

(1)系統(sys),快中斷(fiq)、中斷(irq)、管理(svc)、中止(abt)、未定義(und)這六種模式成為特權模式

(2)快中斷(fiq)、中斷(irq)、管理(svc)、中止(abt)、未定義(und)

這五種成為異常模式

ARM core 介紹

思考:為什麼處理會被設計成這麼多模式呢?

處理器之是以被設計出這麼多模式的目的是為了能夠更好地處理各種異常。

那什麼是異常呢?所謂的異常,指的就是中止了程式正常執行的過程而不得不去完成的一些特殊工作,如晶片複位,取指失敗,指令未定義,等等。

ARM core 介紹

有些同學在大學的時候,學過51單片機,知道中斷的概念。在這裡中斷其實也是一種異常,這裡的中斷包括外部硬體産生的外部中斷和由晶片内部硬體産生的内部中斷。由中斷産生的異常和其他異常,從處理方法的角度來看沒有任何差別,是以我們可以把這些異常統一起來研究。

注意:在正常情況下,一個普通程式可能會運作在使用者模式和系統模式下,當異常發生時,ARM就會自動切換到異常模式去處理異常,處理完後,又回到使用者模式或系統模式下繼續之前的工作。因為每一種模式都包含相應的私有資源,是以可以保證在處理異常的時候,原理的程式環境不會被新的環境破壞,進而保證了系統的正常工作。注意:在正常情況下,一個普通程式可能會運作在使用者模式和系統模式下,當異常發生時,ARM就會自動切換到異常模式去處理異常,處理完後,又回到使用者模式或系統模式下繼續之前的工作。因為每一種模式都包含相應的私有資源,是以可以保證在處理異常的時候,原理的程式環境不會被新的環境破壞,進而保證了系統的正常工作。

好了,關于ARM的異常和工作模式就介紹在這裡,接下來我們來看看ARM每種模式下所擁有的寄存器。

三、ARM每種模式擁有的寄存器

前面我們講到,ARM使用的是RSIC架構,而RSIC架構特點之一就是使用大量寄存器。ARM處理器支援多模式,每種模式都有一些寄存器是公用的,有一些是私有的。

ARM core 介紹

在這裡可以簡單總結一下:

(1)ARM總共有37個寄存器,其中R0-R7,CPSR,R15(pc)是任何模式下都公用的的寄存器

(2)使用者模式和系統模式使用相同的寄存器R0-R15,CPSR

(3)每種異常模式都有自己的 SPSR,R13,R14

(4)FIQ模式除了公共R0-R7寄存器外,還有自己私有的R8-R12,其他模式沒有自己私有的R8-R12寄存器

注意:Cortex體系結構下有40個32-Bits長的寄存器Cortex-A多出3個寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon

接下來我們一起來看看這些寄存器都有什麼作用吧。

四、ARM中每個寄存器的用途

(1)R0-R12 這些寄存器我們可以随便使用,就像我們寫C語言一樣,都需要定義變量,在ARM的世界裡,這些就是已經定義好的變量,可以直接拿來使用,每個都可以用來存放一個32bit的數哦。

(2)R13,R14這兩個寄存器就要注意了,前面我們分析過,在所有的異常模式下都有自己的私有的R13,R14,即每種異常模式在操作R13和R14,不會對其他模式下R13和R14的值産生影響。

R13我們又叫做sp,也就是我們常說的棧指針。大家C語言的局部變量時需要入棧的,也就是說不管在那一種模式下,如果我們想調用C語言程式,那在之前先設定好對應模式的sp指針。

R14為連結寄存器(LR),在結構上有兩個特殊功能:

(1)在每種模式下,模式自身的R14用于儲存子程式傳回位址;

(2)當發生異常時,将R14對應的異常模式設定為異常傳回位址(有些異常有一個小的固定偏移量)。

(3)寄存器R15為程式計數器(PC),它指向正在取指的位址。也就說R15儲存的是那一條指令的位址,CPU就會預取那一條指令。

(4)寄存器CPSR為程式狀态寄存器,它時刻記錄CPU的狀态

ARM core 介紹

通過上圖我們可以知道,CPSR記錄了處理器目前工作的模式,FIQ、IRQ中斷是否使能,指令帶條件執行結果等資訊。

下面我們詳細來看看每一位分别代表什麼意思:

A.條件代碼标志

(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通常不變。

B. 中斷禁止位包括I和F位

當I位置位時,IRQ中斷被禁止;

當F位置位時,FIQ中斷被禁止。

C.T位反映了正在操作的狀态

當T位置位時,處理器正在Thumb狀态下運作;

當T位清零時,處理器正在ARM狀态下運作。

D.模式位

模式位包括M4、M3、M2、M1和M0,這些位決定處理器的操作模式。

10000 User mode ; 10001 FIQ mode; 10011 SVC mode ; 10111

Abort mode ; 11011 Undfined mode;

11111 System mode; 10110 Monitor mode; 10010 IRQ

注意:不是所有模式位的組合都定義了有效的處理器模式,如果使用了錯誤的設定,将引起一個無法恢複的錯誤

(5)SPSR 程式狀态儲存寄存器

每種異常都有自己的SPSR,在因為異常事件而進入異常時它儲存CPSR的目前值,異常退出時可通過它恢複CPSR。

五、Thumb狀态下的寄存器

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)。

ARM core 介紹

注意: 在Thumb狀态中,高寄存器(R8~R15)不是标準寄存器集的一部分

六、ARM異常處理

前面我們已經說過異常了,所謂的異常可以了解為CPU的正常執行被打斷,而不得不去完成一些特殊的工作。有些同學可能感覺還是有點抽象,舉個例子說明一下吧:假如你正在努力的寫代碼,這個時候你肚子餓了,必須得解決呀,你就停止寫代碼,去吃飯了,吃完飯你又繼續寫代碼了,過了一會,你的瞌睡蟲來找你了,必須得睡覺呀,都三天三夜沒睡了。睡完之後,你又開始寫代碼。這裡的肚子餓,瞌睡蟲就可以了解成異常情況,必須得處理,處理完後還得恢複以前的狀态。

那異常産生的時候,硬體上會自動做那些事情呢?注意是硬體自動做的哦,不需要我們介入的。

當一種異常發生時,硬體就會自動執行如下動作:

(1)将CPSR儲存到相應異常模式下的SPSR中

(2)把PC寄存器儲存到相應異常模式下的LR中

(3)将CPSR設定成相應的異常模式

(4)設定PC寄存器的值為相應處理程式的入口位址

可以總結如下圖:

ARM core 介紹

細心的同學就會發現,這裡的PC寄存器的值不是應該指向正在執行的指令嗎?為什麼圖中卻指向了正在提起的指令,這裡的"正在提取"又有什麼含義呢?呵呵,這就涉及到流水線的問題了,關于流水線我們後面會介紹的。

這裡我們還是先搞明白,異常産生的時候,硬體應該将PC值設為多少呢?要想明白這個問題,還必須先知道一個概念"異常向量表"。

ARM一共有5種異常模式,按道理,每一種異常模式都應該有一個唯一的入口位址。這些入口位址彼此相鄰,我們一般稱之為異常向量表。

ARM core 介紹

當異常産生的時候,硬體會自動将PC的值設定為對應異常量的入口位址。具體異常向量表存放在什麼位置,我們可以通過相關的協處理指令進行設定就可以了。這個我們在後期的課程中會講到。

好了到這裡,我們已經知道了,異常發生時,硬體都自動做了哪些事情。那異常傳回的時候,硬體也會自動做一些事情嗎?呵呵,答案是沒有。異常傳回的時候,程式員必須做如下事情:

異常傳回

(1)從 SPSR_<mode>恢複CPSR

(2)從LR_<mode>恢複PC

這些事情産生的效果就是恢複現場哦。

文章來源:華清遠見嵌入式學院,原文位址:http://www.embedu.org/Column/Column777.htm

更多相關嵌入式免費資料檢視華清遠見講師博文>.>