ARM 之FIQ 快速中斷 IRQ(中斷)

2022-07-26 12:48:19 字數 1023 閱讀 4114

irq,fiq定義:  這就是個普通中斷,當我們程式定義了該中斷,並且在程式執行的時候產生了irq中斷,則此時的晶元是這樣執行的------中斷處理器吧利用irq請求線來高速arm,arm就知道有個irq中斷來了,然後arm切換到irq模式執行。類似的如果該中斷設定為fiq,那麼當該中斷產生的時候,中斷處理器通過fiq請求線告訴arm,arm就知道有個fiq中斷來了,然後切換到fiq模式執行。

那麼問題來啦,為何要有這兩個中斷,或者說為何分成這兩種中斷,?、原因很簡單,速度不同,fiq  也就是快速中斷的速度快,那麼問題又來了,為何就fiq速度快???

原因:1:arm的fiq模式提供了更多的banked暫存器,r8到r14還有spsr,而irq模式就沒有那麼多,r8,r9,r10,r11,r12對應的banked的暫存器就沒有,這就意味著在arm的irq模式下,中斷處理程式自己要儲存r8到r12這幾個暫存器,然後退出中斷處理時程式要恢復這幾個暫存器,而fiq模式由於這幾個暫存器都有banked暫存器,模式切換時cpu自動儲存這些值到banked暫存器,退出fiq模式時自動恢復,所以這個過程fiq比irq快.不要小看這幾個暫存器,arm在編譯的時候,如果你fiq中斷處理程式足夠用這幾個獨立的暫存器來運作,它就不會進行通用暫存器的壓棧,這樣也省了一些時間。

2:fiq比irq有更高優先順序,如果fiq和irq同時產生,那麼fiq先處理。

3:在symbian系統裡,當cpu處於fiq模式處理fiq中斷的過程中,預取指令異常,未定義指令異常,軟體中斷全被禁止,所有的中斷被遮蔽。所以fiq就會很快執行,不會被其他異常或者中斷打斷,所以它又比irq快了。而irq不一樣,當arm處理irq模式處理irq中斷時,如果來了乙個fiq中斷請求,那正在執行的irq中斷處理程式會被搶斷,arm切換到fiq模式去執行這個fiq,所以fiq比irq快多了。

4:另外fiq的入口位址是0x1c,irq的入口位址是0x18。寫過完整彙編系統的都比較明白這點的差別,18只能放一條指令,為了不與1c處的fiq衝突,這個地方只能跳轉,而fiq不一樣,1c以後沒有任何中斷向量表了,這樣可以直接在1c處放fiq的中斷處理程式,由於跳轉的範圍限制,至少少了一條跳轉指令。

FIQ(快速中斷請求)和IRQ 外部中斷請求

快速中斷請求 fast interrupt request,fiq 在arm中,fiq模式是特權模式中的一種,同時也屬於異常模式一類。用於高速資料傳輸或通道處理,在觸發快速中斷請求 fiq 時進入。fiq和irq 外部中斷模式 之間有很大的區別。fiq模式必須盡快處理,處理結束後離開這個模式 irq...

fiq中斷的入口位址 ARM的中斷原理

1.中斷概述 所謂查詢方式是指,cpu不到查詢外設的狀態,如果外設準備就緒則開始進行資料傳輸 如果外設還沒有準備好,cpu將進入迴圈等待狀態。很顯然這樣浪費了大量的cpu時間,降低了cpu的利用率。所謂中斷方式是指,當外設準備好與cpu進行資料傳輸時,外設首先向cpu發出中斷請求,cpu接收到中斷請...

uboot中新增FIQ中斷及相關問題

本文主要說明了在uboot中新增fiq中斷時遇到的問題以及對應的解決辦法。問題 一 發生fiq中斷之後處理器做了哪些事情?發生中斷之後arm處理器需要處理完當前的指令,然後自動完成以下事情 1.將當前程式狀態暫存器cpsr儲存到fiq模式下的備份程式狀態暫存器spsr fiq之中 執行中斷返回時其逆...