FIQ和IRQ比較

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