S5P4418裸機開發(九):異常中斷處理概述

ARM體系結構中對異常中斷的一些概述

  • 七種異常

在這裏插入圖片描述
優先級

異常中斷類型 異常中斷模式 優先級
Rset 特權模式 1
Undef 未定義指令中止模式 6
SWI 特權模式 6
PAbort 中止模式 5
DAbort 中止模式 2
IRQ 外部中斷模式 4
FIQ 快速中斷模式 3
  • CPU對異常的響應過程

在這裏插入圖片描述
在這裏插入圖片描述

  • 從異常中斷中返回

在這裏插入圖片描述

  • SWIUndef:發生該異常時,PC值未更新,它指向當前指令後面的第2條指令,進入中斷時,CPU將(PC-4)保存到lr_mode中,(PC-4)指向的是當前指令的下一條指令;異常處理完後應返回當前指令的下一條指令;即MOV PC, LR
  • IRQFIQ:通常,CPU執行完當前指令後,查詢系統是否允許IRQ及FIQ中斷,以及是否產生IRQ及FIQ中斷,當該異常中斷產生時,PC值已更新,它指向當前指令的後3條指令,進入中斷時,CPU將(PC-4)保存到lr_mode中,(PC-4)指向的是當前指令後的第2條指令;異常處理完後應返回當前指令的下一條指令;即SUBS PC, LR, #4
  • PAbort:指令預取中止異常;
    在這裏插入圖片描述
      ABC三條指令,在執行A時預取C,若C指令會產生異常則標記該指令,在執行指令C時,處理器產生指令預取中止異常中斷;當發生PAbort時,程序要返回到該有問題的指令處,重新讀取並執行該指令。因此PAbort中斷程序應該返回到產生該指令預取中止異常中斷的指令處,而不是像前面的返回到發生中斷指令的下一條指令;
      PAbort是由當前執行的指令自身產生的,當該異常產生時,PC值未更新,它指向當前指令後面的第2條指令,進入中斷時,CPU將(PC-4)保存到lr_mode中,(PC-4)指向的是當前指令的下一條指令;異常處理完後應返回當前指令;即SUBS PC, LR, #4
  • DAbort:數據訪問中止異常;在這裏插入圖片描述
      DAbort是由數據訪問指令產生的,當該異常產生時,PC值已更新,它指向當前指令後面的第3條指令,進入中斷時,CPU將(PC-4)保存到lr_mode中,(PC-4)指向的是當前指令的第2條指令;異常處理完後應返回到產生數據訪問中止異常中斷的指令處;即SUBS PC, LR, #8

總結

異常類型 返回操作
SWI or Undef MOV PC, LR
IRQ or FIQ SUBS PC, LR, #4
PAbort SUBS PC, LR, #4
DAbort SUBS PC, LR, #8
  • 程序模型

  1. LR修改爲中斷處理完後的返回地址;
  2. STMFD sp!, {reglist, lr} // 保存現場,表示更新sp的值;
  3. 異常中斷處理程序;
  4. LDMFD SP!, {reglist, lr}^ // 恢復現場,^表示將SPSR_mode寄存器的內容複製到當前程序狀態寄存器CPSR中,該指令只能在特權模式下使用;
  • 異常向量表(S5P4418)

IROMBoot程序設置了這個表;
在這裏插入圖片描述在這裏插入圖片描述
除了復位操作,其他幾種異常會跳到 0xFFFF0000 + offset 的地址;
0xFFFF0000 是內部 SRAM 的起始地址;板子啓動時IROM程序會將nsih.bin2nboot.bin複製到0xFFFF0000處,下面是nsih.bin開頭的部分代碼;
在這裏插入圖片描述
也是幾條跳轉指令,0xFFFF02002nboot.bin的起始地址,再看看2nboot.bin的開頭幾條指令;
在這裏插入圖片描述

總結
友善Smart4418 官方安卓鏡像的異常處理過程:

  • IROMBOOT程序設定異常向量表;

在這裏插入圖片描述
ARM CPU的異常處理程序應該挨個地存在0x0地址。通常將用戶的異常處理程序存在於零地址。但是,在IROMBOOT的情況下,用戶的異常處理程序不可能設置在0x0地址,因爲ROM存在於0x0地址。當使用MMU時,可以通過將任意存儲器映射到零地址來處理CPU異常。然而,IROBOOT提供了用於不使用MMU的系統重定向異常處理程序的功能。

  • 當異常發生時,PC跳向IROM(0x34000000 + offset)
  • 再跳向nsih(0xFFFF0000 + offset)
  • 再跳向2nboot(0xFFFF0200 + offset)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章