ARM概論(Advanced RISC Machines)


簡介

ARM7是32 位通用微處理器ARM(Advanced RISC Machines)家族中的一員,具備比較低的電 源消耗和良好的性價比,
基於(精簡指令)RISC結構,指令集和相關的譯碼機制與微程序 控制的複雜指令系統的計算機相比要相對簡單,
這使得它擁有比較高的指令處理能力和實時 中斷響應能力。

指令集包含11種基本類型:
     兩種類型用於偏上算術邏輯單元, 在31個寄存器(32位)間執 行高速操做
                    桶式移位器
                    乘法器
     三種類型的指令控制數據在存儲器和寄存器之間傳送,
                    一種用於彈性地址
                    一種用於 高速內容切換
                    一種用於交換數據

     三種類型的指令用於控制流程和特權級執行
     三種專門用於控制外部的協處理器,此種協處理器容許指令集的功能以開放和統一的 格式擴展到片外

特性:
●適用於高級語言
ARM指令集對不一樣高級語言的編譯器來說都比較適用,須要臨界的代碼段,彙編語言的編程 也很簡單,
不像其它的微處理器, 須要依靠複雜的編譯器來管理指令。

流水線技術
指令處理和存儲系統的各個部分均可以連續運行。 典型的例子, 一條指令正在執行,下一條指令正被譯碼,
第三條指令同時從存儲器中取出。 在存儲系統中,存儲接口的設計能夠最大限度地發揮性能潛力而不須要花費很大的代價,
度敏感信號作成流水線方式,容許系統控制功能應用於標準的低電壓邏輯,這些控制信號推 動了由工業DRAM提供的快速局部訪問模式

●兼容性
ARM7有32位的地址總線,全部的ARM處理器共享同一個指令集,ARM7能夠配製成26位地 址線,向下兼容其它早期的處理器。

●CMOS
ARM7是全靜態CMOS,容許時鐘在週期的任意部分被中止,但不丟失狀態。

應用:
ARM7適用於那些須要緊湊且功能強大的RISC處理器系統
     電訊 GSM終端控制
     數據通訊 協議轉換
     便攜式計算機 掌上電腦
     自動控制系統 發動機管理單元
     信息存貯系統 存儲卡
     圖像處理 JOEG控制器


二. 編程模式
ARM7支持不一樣的操做配置
     硬件配置,由輸入信號控制
     其餘爲軟件控制,稱爲 操做模式

硬件配置信號
ARM7提供了三個硬件配置信號,處理器正在運行的時候能夠改變,具體以下:
1. big and little endian  (bigend 位)
ARM7 依據BIGNED 信號爲高或者低,將MEM中的數據看成Big Endian 或 Little Endian 格 式,
MEM 被看做字節線性存儲,序號從0向上排列,字節0到3爲第一個存儲字,4 到 7爲 第二個,以此類推

在LittleEndian格式,一個字的最小號字節被看成最低字節,最大號字節被看成最高字節。
字節0將被連結到數據線D[7:0]


在Big Endian 格式下,最高字節被存在MEM中的最低地址,最低字節被存在MEM的最高地
址。MEM中字節0對應數據線D[31:24],endianism隻影響加載和存儲指令。




操做模式選擇
ARM7有32位地址和32位數據線。處理器支持字節(8位),字(32位)數據類型,字必須 四個字節對齊。
指令按字執行,數據操做(好比加法)以字爲單位執行,加載和存儲操做可 覺得字或字節傳送。

ARM7支持六種操做模式:
(1)用戶模式(usr):正常的程序執行狀態
(2) FIQ模式(fiq): 支持數據傳送或通道處理
(3) IRQ模式(irq): 用於通用的中斷處理
(4) 管理模式(svc):用於操做系統的保護模式
(5) 異常模式(abt):數據或者指令預取異常時進入
(6) 無定義模式(und):當無定義指令被執行時進入 軟件控制,外部中斷,
              異常處理均可以改變操做模式。 大部分的應用程序在用戶模式下執行。
(7) 其餘模式,好比管理模式,在中斷、異常服務、或者訪問被保護資源時進入。


寄存器
ARM7處理器共有37個寄存器
         ● 31個(32位)通用寄存器
          6個狀態寄存器
在任意時候 16個通用寄存器(R0-R15)和一個或者兩個狀態寄存器對處理器來說是可見的。
可見寄存 器依據處理器模式和其它寄存器(banked registers)將被切換去支持IRQ, FIQ,管理, 異常, 無定義模式的處理。異常模式,非定義模式。

在全部的模式中,16個寄存器(R0-R15)均可以直接訪問。除過R15,其餘的寄存器都是通 用寄存器, 能夠用來保存數據和地址。R15保存可編程計數器PC的值,當R15被讀時,位[1: 0]爲’0’,位[31:2]保存計數器的值。 第十七個寄存器(CPSR-當前程序狀態寄存器)也是可 以訪問的。它包括了條件代碼標位和當前模式位,能夠看成是PC 的擴展。 R14能夠看成子程序鏈接寄存器,當執行一個分支或者鏈接指令時,能夠保存R15的值。在 其它狀況下, 能夠看成通用寄存器用。 R14_svc, R14_irq, R14_fiq, R14_abt, R14_und與R14 類似,當中斷或者異常發生時,或者是中斷和異常程序中,分支和分支鏈接指令被執行時, 能夠保存R15 的返回值


FIQ模式有7個Banked 寄存器,映射到R8-14(R8_fiq- R14_fiq)。有些FIQ程序不須要存儲任 何寄存器。用戶模式,IRQ模式,管理模式,無定義模式都有兩個Banked寄存器,映射到 R13和R14。這兩個Banked寄存器容許每一個模式有本身的堆棧指針和l連接寄存器。管理模 式,IRQ模式,異常模式和無定義模式的程序(須要不止兩個Banked寄存器)可以在它們自 己的堆棧中存儲部分或者所有的調用程序的寄存器(R0-R12),這樣就能夠無限制地用這 些寄存器(R0-R12),這些寄存器在調用程序返回以前被恢復。另外,有5 個SPSRs寄存 器(存儲可編程狀態寄存器),當異常發生時拷貝CPSR 。每個特權級模式有一個SPSR



可編程狀態寄存器的格式在圖6中顯示,N,Z,C,和V位條件代碼標誌位。看成處理器的算術或 者邏輯運算結束時這些條件代碼標誌位可能被改變,也能夠在程序中以此做爲條件來判斷指 令是否被執行。 I 和 F 位爲中斷禁止位。當I置’1’時,禁止IRQ中斷,當F置’1’時,禁止FIQ中斷。M[4:0]爲 模式位,這些位決定了處理器的操做模式。表2解釋了模式位M[4:0]。並非全部的組合都 表示了有效的操做,只有那些明肯定義的組合纔有效。 PSR寄存器的低28位(包括I,F,M[4:0])所有做爲控制位。若是有異常產生這些控制位將改 變,或者在管理模式,經過軟件改變控制位。沒有用到的位爲保留位,它們的狀態在在控制
位和標誌位改變時能夠保留。當檢查PSR狀態時,程序並不須要依靠保留位的值來判斷,因 爲它們在未來的處理器中中可能爲’1’或者’0’。


異常
當正常的程序流程須要被中斷時,異常產生,使得處理器能夠執行外設產生(例)的中斷。 進入異常處理以前,處理器的狀態必須保存,以便異常處理完以後源程序能夠繼續執行。可 能會有幾個異常同時產生。

ARM7處理異常時,經過banked寄存器保存狀態。PC和CPSR寄存器中的內容被拷貝到相應 的R14和SPSR中,PC 和CPSR中的模式位M[0:4]根據異常類型被強制改變。在異常斷處理 中,若是要禁止其它難以管理異常的嵌套,能夠置位中斷禁止標誌位。在須要重複進入中斷 處理程序的狀況下,R14和SPSR應該在中斷被使能以前保存到主MEM的堆棧中;當傳送 SPSR寄存器到堆棧或者從堆棧傳送時,須要注意的是必須傳送整個字(32位),而不僅是 標誌位或者控制位。當多個異常同時產生時,固定的優先級決定異常響應的順序。優先級將 在之後章節中說明

FIQ
FIQ(快速中斷請求)異常是由外部產生,將Nfiq輸入拉低。此輸入能夠接受異步轉換,在 影響處理器的執行流程以前,會被延遲一個時鐘週期,以便與處理器保持同步。此設計支持 數據傳輸或者通道處理,有足夠的私有寄存器轉移在某些應用中須要保存的值(最小化切換 成本) 。 能夠置位在CPSR中的F標誌位屏蔽FIQ異常 (除過用戶模式) , 若是F位清零, ARM7 在每一條指令結束時會檢查FIQ同步器的輸出是否爲低電平。 當檢測到有FIQ低電平輸入時,ARM7執行如下步驟:
(1) 將下一條將要執行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 強制M[4:0]=10001(FIQ模式),置位CPSR中的F,I
(3) 強制PC從地址0X1C取下一條指令

爲了從FIQ返回,執行 SUBS PC,R14_fiq,#4 將恢復PC(從R14)和CPSR(從SPSR_fiq)並 繼續執行的被中斷的程序。

IRQ
IRQ(中斷請求)爲普通異常,當 nIRQ 輸入位低電平時產生IRQ。它的優先級低於FIQ,並 且當進入FIQ異常處理程序時,它被屏蔽。在任什麼時候候將CPSR中I 位置1,均可以屏蔽此中 斷(用戶模式除外)。當I 位清零時,ARM7在每一條指令結束時會檢查IRQ同步器的輸 出是否有低電平。當檢測到有IRQ輸入時ARM7執行如下步驟:
(1) 將下一條將要執行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 強制M[4:0]=10010(IRQ模式),置位CPSR中的I
(3) 強制PC從地址0X18取下一條指令

爲了從IRQ狀態恢復正常,執行SUBS PC,R14_fiq,#4 將恢復PC(從R14)和CPSR(從 SPSR_fiq)並繼續執行的被中斷的程序。

異常中斷
異常中斷由外部的ABORT輸入產生。ABORT表示當前存儲器訪問沒有完成。舉例來說,在 虛擬存儲器系統中,當前地址上相應的數據可能已經從存儲器被移到disc, 在訪問完成以前, 可能要求處理器動做以恢復這些數據。Arm7在存儲器訪問週期檢查ABORT信號,若是有異
常產生,ARM7將執行如下兩種步驟之一:
(1) 若是異常在指令預取時產生(預取異常),預取的指令被標誌爲無效,可是異常中 斷並不當即產生。若是指令沒有被執行,舉例來說,在流水線中的一個分支指令, 將不會產生異常,若是指令到流水線的出口並將要被執行時,異常產生。
(2) 若是異常在數據訪問時產生(數據異常),ARM7的動做將依靠指令類型
          (A) 單次數據傳輸指令(LDR,STR)將回寫改變過的基址寄存器,異常處理程序必
                        須注意到這一點。
          (B) 交換指令異常(SWP),雖然外部的讀寫訪問可能發生,但就好像此指令沒有
                         被執行同樣
          (C) 塊數據傳輸指令完成(LDM,STM),若是回寫位置1,基址將改變。若是正常 狀況下,指令回寫基址寄存器(LDM傳輸列表中的基址),
                    則回寫 被禁止。當 異常產生時,全部寄存器回寫都被禁止。這就意味着當LDM指令異常時,R15 (老是最後一個被傳送)將保留。

在指令預取異常或數據異常發生,ARM7進行如下操做:
(1) 保存地址 (異常指令地址 加4 for 指令預取異常, 加8 for 數據異常) 到R14_abt, 保存CPSR到SPSR_abt
(2) 強制M[4:0]=10111(異常模式),置位CPSR中的I
(3) 強制PC從地址0X0C(預取異常)或0X10(數據異常)取下一條指令

爲了從異常返回,執行SUBS PC,R14_abt,#4 (預取異常)或SUBS PC,R14_abt,#8 (數 據異常),恢復PC和CPSR並繼續執行被異常的指令。
當適當的MEM管理軟件有效時,異常機制容許執行錀須要的頁式虛擬MEM系統鐀。處理器 能夠產生任意地址,若是地址中的數據無效時,MMU產生異常。處理器進入系統軟件陷阱, 系統軟件必須找出異常緣由,使請求的數據有效,從新執行被異常的指令。應用程序不須要 知道它用到的有效MEM的總量,也不須要異常時的狀態。

軟件中斷
軟件中斷指令(SWI)從其它模式進入管理模式。一般狀況下,請求一個特殊的管理函數。
當SWI指令被執行時,ARM7執行如下動做:
(1) 將SWI指令地址加4保存到R14_svc,保存CPSR的值到SPSR_svc
(2) 強制M[4:0]=10011(管理模式),置位CPSR中的 I
(3) 強制PC在地址0X80取下一條指令
爲了從SWI返回,執行指令MOVS PC,R14_svc,恢復PC和CPSR的值,返回到SWI的下一 條指令。

無定義的指令陷阱
當ARM7遇到本身沒有辦法處理的指令(第四章:指令集),它將此指令提供給現場的協處 理器。若是協處理器能夠執行此指令,但當時又比較忙,ARM7將進入等待狀態,直到協處 理器準備好或者中斷產生。若是沒有協處理器能夠處理此指令,ARM7將進入無定義指令陷 阱。

當系統中沒有協處理器硬件時,陷阱能夠用來作協處理器的軟件仿真,或者經過軟件仿真用 於通用指令集擴展。
當ARM7接收到無定義指令陷阱時,執行如下步驟:
(1) 將無定義指令或協處理器指令加4保存到R14_und;保存CPSR到SPSR_und.
(2) 強制M[4:0]=11011(無定義模式),置位CPSR中的 I
(3) 強制PC在地址0X04取下一條指令
在仿真失敗的指令以後,爲了從陷阱返回,執行MOVS PC,R14_und,恢復CPSR並返回到無 定義指令的下一條指令。






相關文章
相關標籤/搜索