ARM7是32 位通用微處理器ARM(Advanced RISC Machines)家族中的一員,具備比較低的電
源消耗和良好的性價比,
基於(精簡指令)RISC結構,指令集和相關的譯碼機制與微程序
控制的複雜指令系統的計算機相比要相對簡單,
這使得它擁有比較高的指令處理能力和實時
中斷響應能力。
指令集包含11種基本類型:
●
兩種類型用於偏上算術邏輯單元,
在31個寄存器(32位)間執
行高速操做
桶式移位器
乘法器
●
三種類型的指令控制數據在存儲器和寄存器之間傳送,
一種用於彈性地址
一種用於
高速內容切換
一種用於交換數據
●
三種類型的指令用於控制流程和特權級執行
●
三種專門用於控制外部的協處理器,此種協處理器容許指令集的功能以開放和統一的
格式擴展到片外
特性:
●適用於高級語言
ARM指令集對不一樣高級語言的編譯器來說都比較適用,須要臨界的代碼段,彙編語言的編程
也很簡單,
不像其它的微處理器,
須要依靠複雜的編譯器來管理指令。
●
流水線技術
指令處理和存儲系統的各個部分均可以連續運行。 典型的例子,
一條指令正在執行,下一條指令正被譯碼,
第三條指令同時從存儲器中取出。
在存儲系統中,存儲接口的設計能夠最大限度地發揮性能潛力而不須要花費很大的代價,
速
度敏感信號作成流水線方式,容許系統控制功能應用於標準的低電壓邏輯,這些控制信號推
動了由工業DRAM提供的快速局部訪問模式
●兼容性
ARM7有32位的地址總線,全部的ARM處理器共享同一個指令集,ARM7能夠配製成26位地
址線,向下兼容其它早期的處理器。
●CMOS
ARM7是全靜態CMOS,容許時鐘在週期的任意部分被中止,但不丟失狀態。
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 的返回值
異常
當正常的程序流程須要被中斷時,異常產生,使得處理器能夠執行外設產生(例)的中斷。
進入異常處理以前,處理器的狀態必須保存,以便異常處理完以後源程序能夠繼續執行。可
能會有幾個異常同時產生。
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並返回到無
定義指令的下一條指令。