基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
ARM9處理器工作模式
改變工作模式的方法:①軟件改變,改變CPSR(當前程序狀態寄存器)的低5位即可;②外部中斷或異常處理改變;
用戶模式:大部分情況下,程序是運行在用戶模式下,此時某些被保護的寄存器是不能訪問;
非用戶模式:除了用戶模式之外的模式;也被稱作特權模式。特權模式下,可以訪問寄存器和一下片內資源。
異常模式:處理用戶模式和系統模式外其余的5中模式,常用于處理中斷或異常以及訪問需要被保護的系統資源等情況;
系統模式僅存在于ARM體系結構版本V4以上,系統模式和用戶模式擁有完全相同的寄存器;
ARM9的兩種工作狀態
處理器的兩種操作狀態:
ARM狀態:32位,這種狀態下執行的是字方式的ARM指令(地址[1:0]為0)。
Thumb狀態:16位,這種狀態下執行半字方式的Thumb指令(地址[0]為0);
Thumb指令集的特點:
Thumb指令集是ARM指令集的功能子集,但是與ARM代碼相比,可以節省30%~40%以上的儲存空間,同時兼備32位代碼的所有優點;
ARM內部寄存器組織
ARM存儲系統:(1)復雜:寄存器,Cache,主存儲器,輔助存儲器;(2)簡單:直接分為存儲器和寄存器即可;
寄存器特點:
數量少,讀寫速度快;每個寄存器內都有一個名字,但是沒有像存儲器一樣的存儲地址;不同的存儲器有不同的寄存器配置方案;
寄存器功能:暫存指令,數據和地址;
寄存器分組
分組的依據:處理器的工作狀態和工作模式的不同。
分組的特點:相同名字的寄存器在不同組中是兩個完全不同的物理寄存器;程序代碼運行時的設計的工作寄存器組是由ARM9微處理器的工作模式確定的;
寄存器類別:通用寄存器,程序狀態寄存器,程序計數器;
(1) 通用寄存器
R0~R7:未分組寄存器;對于任何工作模式,這些寄存器都對應相同的32位寄存器地址;
R8~R14:為分組寄存器;對應的物理地址取決于當前處理器的工作模式;
R8~R12:有兩個分組的物理寄存器;一組用于FIQ模式;一組用于非FIQ模式;
R0~R13:完全通用寄存器;保存數據和地址的通用寄存器;不會被體制結構作為特殊用途,并且可用于任何使用通用寄存器的指令;
R13,R14:分別有6個分組的寄存器。一個用于用戶模式和系統模式,另外5組寄存器分別對應5中工作模式;
異常處理:異常處理程序負責初始化自己的R13,使其指向該異常模式專用的棧地址。在異常處理程序入口處,將其他寄存器的內容保存到堆棧,返回時,重新將這些值加載到寄存器;從而保護現場的目的;
R13:堆棧指針SP;在ARM指令集集中,沒有以特殊方式使用R13的指令或其他功能,只是習慣上都這樣使用。但是Thumb指令集中存在使用R13的指令;
R14:鏈接寄存器LR;在結構上有兩個功能:
① 在每種工作模式下,模式本身的R14用于保存子程序返回的地址。例如,當ARM9處理器執行帶鏈接的分支指令(如BL)時,R14保存R15(PC)的值;
② 發生異常時,相應的寄存器分組R14_svc,R14_abt,R14_und,R14_ird和R14_fiq用來保存R15的返回值;
R15:程序計數器(PC)。在ARM狀態下,R15[1:0]=0x00;PC的值為R15[31:2];
(2) 狀態寄存器CPSR
R16:通用寄存器;看下表:
1)條件代碼標志位NZCV:
N:運算結果的最高位顯示在該標志位上。對于有符號二進制補碼,當結果為負數N=1,結果為正數或零為0;
Z:當指令結果為0時Z=1(通常表示比較結果“相等”)否則為0;
C:加法指令最高位進位C=1,否則C=0;減法指令最高位未借位C=1,借位則C=0;結合移位操作時C等于從最高位最后溢出的值;其他指令C不變;
V:加/減法運算并發生溢出時V=1,否則V=0;其他指令V不變;
(2)控制位IFTM4M3M2M1M0
當發生異常時這些位被硬件改變;當處理器處于特權模式時,可用軟件操作這些位;
① 中斷處理位:中斷使用的前提是中斷沒有被禁止;
I=1時IRQ中斷被禁止
F=1時FIQ中斷被禁止
② 處理器標志位:T位反映了處理的的工作狀態
T=1時,處理器處于Thumb狀態下
T=0時,處理器處于ARM狀態下;
③ 處理器模式位:決定處理器的工作模式,看下表格
(3)保留位
CPSR中的保留位被保留為將來使用。為了提高程序的可移植性,當改變CPSR標志位和控制位,不要改變這些保留位。另外要確保程序的運行不受保留位的值的影響。因為將來處理器開能會將這些位設置為1或0;
ARM9的異常處理
什么是異常:當正常的程序被暫時停止時就是發生了異常;異常是由一個內部或外部產生一個引起處理器處理的額外事件;
什么是異常向量(exception vectors):
異常出現后,處理器強項從正常程序地址跳轉到異常程序所對應的固定存儲器地址開始執行程序,這些程序存儲器地址稱為異常向量;
ARM9體系支持其中異常處理
處理器一旦有復位信號輸入,ARM處理器就立即執行當前。復位后,ARM處理器在禁止中斷的管理模式下從地址0x00000000或0Xffff0000處開始執行;
未定義指令異常
當ARM處理器執行協處理器指令時,需等任一外部協處理器應答后,才能真正執行這條指令。若協處理器沒有回應,就會出現未定義指令異常。另外,試圖執行未定義的指令也會出現未定義指令異常;
軟件中斷異常
軟件中斷異常指令SWI使處理器進入管理模式,以請求特定的管理函數;
預取中止異常
存儲器系統發出存儲器中止信號(Abort)時,響應取置激活的中止標記所取的指令無效,茹處理器試圖執行無效指令,則產生預約中止異常;茹指令未執行,則不發生預約中止;
數據中止異常
存儲器發出存儲器中止信號,響應數據中止標記的數據無效。
IRQ(外部中斷請求)異常
通過處理器上的IRQ輸入引腳,由外部產生IRQ異常。IRQ異常的優先級比FIQ異常的優先級低,當進入FIQ處理時,會屏蔽IRQ異常;
FIQ(快速中斷請求)異常
通過FIQ上的輸入引腳,由外部產生FIQ異常;
異常優先級
總結
以上是生活随笔為你收集整理的基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙通信工作流程讲解
- 下一篇: 如何用计算机求一个正数的算术平方根,《用