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