對於只有一箇中斷的處理器來說,這是相當典型的。 x86就像這樣一段時間,也許還是這樣。手臂傳統上有兩個,但更新的核心有許多現在32,256等。
如果你有一個共享中斷線,作爲纏結提到你通常有一些東西在處理器外,在手臂的情況下,在芯片,但在手臂核心本身之外。有許多中斷輸入和輸出或輸出到處理器一個或幾個中斷。當處理器中斷髮生時,您會檢查處理器/內核之外的這個邏輯/硬件,看看是誰造成的,然後你就去了。
嵌套的中斷控制器也不是非典型的,比如說帶有一個輸出的8個輸入。並且對於這8個輸入中的一些或每一個輸入另一個8對1中斷控制器。那麼軟件就需要簡單地遵循路徑。檢查一級中斷控制器以查看哪一個中斷控制器觸發了中斷,然後從那裏知道需要與之通話的下一層控制器,等等,直到你隔離單箇中斷爲止。
也知道並理解,對於這些共享中斷系統,基本上從程序開始停止並調用中斷向量開始,「同時」發生多箇中斷是非常可能的,並且您執行中斷啓動的東西,並最終讀取中斷狀態寄存器,不止一個可以進來。你需要決定如何處理,並根據系統/邏輯,如果你從其中一個返回,其他人被聲稱可能會讓你回到中斷處理程序,這樣,只有一個掛起可以處理。其他邏輯可能會要求您在返回之前處理所有掛起。
由於手臂犯規一定要控制哪些綁中斷或FIQ線就可以得到各種來自不同廠商的解決方案,以中斷系統如何作用於特定的ARM芯片。
非常感謝@ tangrs.I有疑問,我問過dwelch,我想只有一個,其在地址0x0000018映射中斷處理程序和該處理程序是負責具體到模塊採取其他處理的照顧?還有,這將是很好,你可以建議我一些代碼爲「中斷處理程序通常詢問中斷控制器哪個引腳引起中斷,然後調用適當的處理程序」,我的意思是如何中斷處理程序問中斷控制器哪個引腳引起中斷? –
它取決於您使用的確切的SoC和配置,但通常涉及讀取某種內存映射的IO寄存器。 – tangrs
罰款糾纏不清,請問你是否確認我的這種理解,即只有一箇中斷處理程序映射到地址0x0000018,並且此處理程序負責照顧模塊特定的其他處理程序? –