1. 程式人生 > 其它 >MIPS中斷體系結構

MIPS中斷體系結構

MIPS中斷體系結構解析

作者:weirdo-xo
郵箱:[email protected]
時間:2021-7-5

1. 具有中斷向量偏移的例外

在《用芯探核-基於龍芯的Linux核心探索解析》中,把MIPS中具有專用向量地址的例外分為了六個:

  • 硬復位,NMI,軟復位
  • TLB重填異常
  • XTLB重填異常
  • Cache錯誤異常
  • 其他通用異常
  • Ejtag類異常

TLB、XTLB重填異常是因為處理器頻繁的遇到,所以具有專用的中斷處理向量入口地址。
下面給出向量偏移地址的圖:

這裡我們應該注意對這幾種中斷進行分類,因為中斷髮生並且使能之後處理器後會直接跳轉到指定的偏移地址處開始處理中斷事物,這也是各種中斷處理的入口。

2. 通用(常見)中斷處理

再協處理器中有一個Cause暫存器,Cause暫存器的excode中顯示了例外的型別,通過查詢這個標誌位我們就可以知道處理器內部或者外部出現了什麼異常,並且可以派發到指定的中斷處理函式。下圖便是一個excode編碼的例項:

由於PDF分頁,這裡只截取了部分的編碼資訊。這裡以中斷處理為例,但發生中斷後,CPU的PC會被髮射到其他異常處理的向量地址上,這裡存放在異常處理的函式,在這裡通過查詢excode發現是發生了中斷,於是跳轉到中斷的處理函式中,在中斷處理的函式中進一步的通過IP&Mask等一系列操作確認觸發中斷的裝置。

3. MIPS核心具有的中斷

從外設的角度來看,MIPS具有多個的外設中斷,大多的外設可以擁有自己的中斷號。從處理器核心來看,MIPS只有8個相關的中斷,其中有3-4個還被內部佔用了(核間中斷、計數器等),只有4個被用於外部中斷。也就是說多個外部中斷會通過一箇中斷控制器路由到這四個到處理器核心的中斷,這裡以龍芯處理器為例,介紹一下MIPS是如何接收外部中斷的。

從上圖我們可以看到64個外部中斷會被路由到兩個處理器核心中,並且路由的路徑是可以配置的,並且路由的策略也是可以手動配置的,可以指定某個中斷路由到具體的處理器進行處理。當處理器檢測到是中斷後,通過處理器協處理器的暫存器以及中斷控制暫存器就可以判斷出是那個模組發出的中斷訊號,進而跳轉到目標模組註冊的中斷處理函式(也可能是另一箇中斷控制器)進行分析以及處理,最後得到發起中斷的源裝置。得到源裝置後,Linux核心就會呼叫我們使用request_**_irq註冊的中斷處理函式進行最終的事物處理。

4. 總結

我們應該清楚的認識MIPS的中斷處理流程或者說中斷的結構,瞭解了中斷的結構,後面我們在核心中分析中斷處理的流程就會更加的方便和清晰。