嵌入式ARM彙編複習

 嵌入式系統是將先進的計算機技術、半導體技術和電子技術與各個行業的具體應用相結合後的產物。

嵌入式系統的特點

       形式多樣、面向特定應用,處理器和處理器體系結構類型多,關注成本,實時性和可靠性的要求


嵌入式微處理器的體系結構 :可以分爲馮•諾依曼(Von Neumann)結構或哈佛(Harvard)結構兩大類。 


數據類型
 字節型數據(Byte):數據寬度爲8bits
 半字數據類型(HalfWord):數據寬度爲16bits,存取式必須以2字節對齊的方式
 字數據類型(Word):數據寬度爲32bits,存取式必須以4字節對齊的方式

進入Thumb狀態:
執行BX指令,並設置操作數寄存器的狀態(位[0])爲1。
在Thumb狀態進入異常(IRQ, FIQ, UNDEF, ABORT,SWI etc.),當異常處理返回時自動轉換到Thumb狀態
進入ARM狀態:
執行BX指令,並設置操作數寄存器的狀態(位[0])爲0。
進入異常時,將PC放入異常模式鏈接寄存器中,從異常向量地址開始執行也可進入ARM狀態

工作狀態與模式:

 

除了User模式,其他模式都是特權模式,可以 任意訪問系統資源,System模式與user的區別在於可以訪問系統資源,其他異常模式用於處理異常、

寄存器;

    ARM處理器有37個寄存器
 31個通用寄存器:程序計數器、堆棧及其他通用寄存器
  6個狀態寄存器
這些寄存器不能同時看到
不同的處理器狀態和工作模式確定哪些寄存器是對編程者是可見的

ARM state 與thumb state寄存器的關係 thumb是R0~R7+SP,LR,PC,CPSR,SPSR  ;  ARM是R0~R15其中其中R13~15對於  SP,LR,PC 還有CPSR,SPSR。


異常發生時伴隨的模式切換意味着, 被調用的異常處理程序會訪問:
它自己的堆棧指針 (SP_<mode>)
它自己的鏈接寄存器 (LR_<mode>)
它自己的備份程序狀態寄存器 (SPSR_<mode>)
如果是FIQ異常處理, 5個其它的通用狀態寄存器 (r8_FIQ to r12_FIQ)
其它寄存器和原來模式下的寄存器是相同的

通用寄存器是R0-R15的寄存器,分爲三類
 沒有對應影子寄存器的寄存器R0-R7
  有對應影子寄存器的寄存器R8-R14
  程序計數器R15 (或者PC)  
影子寄存器是指該寄存器在不同的模式下對應的物理寄存器


R13(也被稱爲SP指針)被用作棧指針,通常在系統初始化時需要對所有模式下的SP指針賦值,當CPU在不同的模式時棧指針會被自動切換成相應模式下的值。
R14有兩個用途,一是在調用子程序時用於保存調用返回地址,二是在發生異常時用於保存異常返回地址。

R15
用作程序計數器(PC),可以被讀寫
ARM state: bits [1:0]爲0,bits[31:2]即爲 PC.
THUMB state:bit [0]爲0,bits[31:1]即爲 PC

CPSR(當前程序狀態寄存器)在所有的模式下都是可以讀寫的,它主要包含:
條件標誌
中斷使能標誌
當前處理器的模式
其它的一些狀態和控制標誌

CPSR有32位,其中31~27 表示條件標誌

分別爲

N Z C V
條件標誌位
N = ALU產生負數結果
Z = ALU產生結果是0
C = ALU操作產生進位或借位
V = ALU結果溢出


N = ALU產生負數結果
Z = ALU產生結果是0
C = ALU操作產生進位或借位
V = ALU結果溢出


  7~6中斷標誌, 7對應IRQ中斷 ,6對應FIQ中斷,爲1時禁止。

5——arm,THUMB標誌位爲0表示ARM,

4~0表示模式控制位

     10000~ User

 10001       ~FIQ

 10010      ~IRQ

 10011       ~Supersiver

  10111    ~Abort

  11011  ~Undefined

  11111   ~System


中斷與異常:

         中斷分爲外部中斷,軟件中斷與異常。

ARM處理器把上述三種事件都以異常模式來處理,並且都通過異常向量來響應

當異常發生時CPU自動到指定的向量地址讀取指令並且執行,即ARM的向量地址處存放的是一條指令(一般是一條跳轉指令)


有7中異常,按優先級從大到小排序:

Reset     ——Supersiver
Data Abort  ——Abort
FIQ     
IRQ
Prefetch Abort
SWI       ——Supersiver
Undefined instruction        


在所有異常的入口,IRQ 中斷被屏蔽
只有重新被使能纔可觸發內核響應 (如:中斷嵌套處理)
在 FIQs 和 Reset 異常的入口,FIQ中斷被屏蔽

ARM處理器響應異常的過程如下:
拷貝CPSR寄存器的內容至對應模式下的 SPSR_<mode>寄存器中;
將返回地址保存到對應模式下的LR_<mode>寄存器中;
對 CPSR 寄存器的一些控制位進行設置:
無論發生異常時處理器處於Thumb 狀態還是ARM狀態,響應異常後處理器都會切換到 ARM 狀態,即CPSR[5]=0;
將模式位 CPSR[4:0]設置爲被響應異常的模式編碼;
設置中斷屏蔽位:如果異常模式爲Reset 或 FIQ 則
       CPSR[6]=1       /*禁止快速中斷*/
       CPSR[7]=1       /*禁止正常中斷*/
將程序計數器(PC)設置爲異常向量的地址

    

     從異常處理程序返回時(執行特定的異常返回指令,需注意對於復位異常不需要返回),處理器執行下列動作:
將SPSR_<mode>中的內容恢復到CPSR中;
將PC設置爲LR_<mode> 的值
同異常響應過程一樣,上述過程只能在ARM狀態下完成。

對於軟中斷和未定義指令異常返回
        
        MOVS pc,lr

對於 FIQ, IRQ 和指令預取異常返回
        
        SUBS pc,lr,#4
        
對於數據訪問中止異常的返回
        
        SUBS pc,lr,#8    

如果LR寄存器在壓棧前已經被矯正,那麼帶 ^ 修飾符 LDM 指令 也可以用於返回
    LDMFD sp!,{pc}^

軟中斷處理程序必須從SWI 指令中提取軟中斷號
但是在這之前,軟中斷處理程序必須確定調用軟中斷功能函數之前的狀態是ARM 還是 Thumb 狀態
在 SPSR 中檢查 T 標誌位
在 ARM 狀態下,SWI 指令在地址 LR-4 處,Thumb狀態下則爲LR-2處


內存和IO:

    ARM 的尋址空間是線性的地址空間,爲232=4G
Bytes 0 to 3 存儲第一個word, bytes 4 to 7存儲第二個word
ARM支持大端(Big-endian)和小端(Little-endian)的內存數據方式,可以通過硬件的方式設置(沒有提供軟件的方式)端模式
內存和I/O – I/O端口編址方式




ARM 的I/O端口都是內存映射的方式,即對I/O端口的訪問與內存的訪問的方式完全一樣。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章