FIQ和IRQ是兩種不同類型的中斷,ARM為了支持這兩種不同的中斷,提供了對應的叫做FIQ和IRQ處理器模式(ARM有7種處理模式)。
一般的中斷控制器里我們可以配置與控制器相連的某個中斷輸入是FIQ還是IRQ,所以一個中斷是可以指定為FIQ或者IRQ的,為了合理,要求系統更快響應,自身處理所耗時間也很短的中斷設置為FIQ,否則就設置了IRQ。
如果該中斷設置為了IRQ,那么當該中斷產生的時候,中斷處理器通過IRQ請求線告訴ARM,ARM就知道有個IRQ中斷來了,然后ARM切換到IRQ模式運行。類似的如果該中斷設置為FIQ,那么當該中斷產生的時候,中斷處理器通過FIQ請求線告訴ARM,ARM就知道有個FIQ中斷來了,然后切換到FIQ模式運行。
簡單的對比的話就是FIQ比IRQ快,為什么快呢?
ARM的FIQ模式提供了更多的banked寄存器,r8到 r14還有SPSR,而IRQ模式就沒有那么多,R8,R9,R10,R11,R12對應的banked的寄存器就沒有,這就意味著在ARM的IRQ模式下,中斷處理程序自己要保存R8到R12這幾個寄存器,然后退出中斷處理時程序要恢復這幾個寄存器,而FIQ模式由于這幾個寄存器都有banked寄存器,模式切換時CPU自動保存這些值到banked寄存器,退出FIQ模式時自動恢復,所以這個過程FIQ比IRQ快。
FIQ比IRQ有更高優先級,如果FIQ和IRQ同時產生,那么FIQ先處理。
在symbian系統里,當CPU處于FIQ模式處理FIQ 中斷的過程中,預取指令異常,未定義指令異常,軟件中斷全被禁止,所有的中斷被屏蔽。所以FIQ就會很快執行,不會被其他異常或者中斷打斷,所以它又比 IRQ快了。而IRQ不一樣,當ARM處理IRQ模式處理IRQ中斷時,如果來了一個FIQ中斷請求,那正在執行的IRQ中斷處理程序會被搶斷,ARM切換到FIQ模式去執行這個FIQ,所以FIQ比IRQ快多了。
另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18。
責任編輯:lq
-
寄存器
+關注
關注
31文章
5336瀏覽量
120232 -
IRQ
+關注
關注
0文章
16瀏覽量
10761 -
FIQ
+關注
關注
0文章
9瀏覽量
2305
原文標題:FIQ和IRQ
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論