ARM體系結構與介面技術——ARM例外處理
例外的概念
處理器在正常執行程式的程序中可能會遇到一些不正常的事件發生,這時處理器就要將當前的程式暫停下來,轉而去處理這個例外的事件,例外事件處理完成之后再回傳到被例外打斷的點繼續執行程式,
例外處理機制
不同的處理器對例外的處理的流程大體相似,但是不同的處理器在具體實作的機制上有所不同;
比如:
處理器遇到哪些事件認為是例外事件,
遇到例外事件之后處理器有哪些動作,
處理器如何跳轉到例外處理程式,
如何處理例外,
處理完例外之后又如何回傳到被打斷的程式繼續執行等,
這些細節的實作就是處理器的例外處理機制,
ARM例外源
導致例外產生的事件稱為例外源,
ARM例外源有7類:
| FIQ | 快速中斷請求引腳有效 |
| IRQ | 外部中斷請求引腳有效 |
| Reset | 復位電平有效 |
| Software Interrupt | 執行swi指令 |
| Data Abort | 資料終止 |
| Prefetch Abort | 指令預取終止 |
| Undefined Instruction | 遇到不能處理的指令 |
例外模式
ARM的基本作業模式中有5個異屬于例外模式:
| 例外源 | 例外模式 |
| FIQ | FIQ |
| IRQ | IRQ |
| Reset & Software Interrupt | SVC |
| Data Abort & Prefetch Abort | Abort |
| Undef Instruction | Undef |
ARM例外回應
1.拷貝CPSR中的內容到對應例外模式下的SPSR_<mode>,
2.修改CPSR的值:
2.1修改中斷禁止位禁止相應的中斷
2.2修改模式位進入相應的例外模式
2.3修改狀態位進入ARM狀態
3.保存回傳地址到對應例外模式下的LR_<mode>,
4.設定PC為相應的例外向量(例外向量表對應的地址),
例外向量表
- 例外向量表的本質是記憶體中的大一段代碼
- 表中為每個例外源分配了四個位元組的存盤空間
- 遇到例外后處理器自動將PC修改為對應的地址
- 因為例外向量表空間有限,一般我們不會在這里寫例外處理程式,而是在對應的位置寫一條跳轉指令使其跳轉到指定的例外處理程式的入口
注:ARM的例外向量表的基地址默認在0x00地址,但是可以通過配置協處理器來修改其基地址,
例外回傳
ARM例外回傳的動作(自己撰寫)
- 將SPSR_<mode>的值復制給CPSR使處理器恢復之前的狀態,
- 將LR_<mode>的值復制給PC,使程式跳轉回被打斷的地址繼續執行,
例外優先級
多個例外同時產生時的服務順序
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
Software Interrupt
Undefined insturction
FIQ和IRQ
FIQ的回應速度比IRQ快,有以下3點原因,
- FIQ在例外向量表位于最末
- 所以可以直接把例外處理程式寫在例外向量表之后,省去了跳轉的程序,
- 而IRQ需要執行向量表對應的跳轉指令之后,跳轉到指定的中斷處理程式,
- FIQ模式有5個私有暫存器(R8-R12)
- 執行中斷處理程式前無需壓堆疊保存暫存器,可直接處理中斷,
- 而IRQ的R8-R12暫存器是與和其它模式共用的,在中斷前需要保護現場,即把R8-R12的資料保存在堆疊中,
- FIQ的優先級高于IRQ
- 兩個中斷同時發生時先回應FIQ
- FIQ可以打斷IRQ,單IRQ不能打斷FIQ,
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458260.html
標籤:其他
上一篇:Linux-安裝ifconfig
下一篇:2022-A rch安裝(詳細)
