1. 程式人生 > >ARM GIC中斷控制器介紹

ARM GIC中斷控制器介紹

這幾天長三角爆發禽流感,搞的連菜市場都不敢靠近了,頗有點SARS的架勢,我真懷疑上帝是不是個程式猿,造人搞這麼多bug,

H7N9的driver還沒寫好吧,害的我們只能不停的打patch,時不時來個oops。今天看了一個專家的解說:"H7N9基因有八節,其中H7的部分是來自浙江的野鳥,

N9的部分是來自韓國的野鳥,那麼其餘的六節相信是來自長江以北",好吧,又是你們韓國。

1.“站的高尿的遠”

   GIC為中斷控制器,不要和ARM core的中斷搞混了,這些中斷都是連線到ARM core的IRQ或者FIQ上的。

   要了解arm中斷系統,GIC絕對不容錯過,好先付上一張大家都能百度到的圖片。

++和*可以先不用考慮,用於安全模式。

GIC可以用於單核多核系統,這時候要拋開微控制器的簡單中斷了,從圖上看有SGI(Software-generated interrupt)、PPI(Private peripheral interrupt )、SPI(Shared peripheral interrupt),顧名思義SGI為軟體可以觸發的中斷,經常用於各個core之間的通訊,PPI為每個core的私有外設中斷,SPI為各個core公用的中斷。

SGI:0~15

PPI:16-31

SPI:32~1019


2.  follow me

 通常把GIC分成兩個部分,分發器(Distributor)和CPU介面。

分發器其實應該叫匯聚器,在IC的後端設計中,layout會把各個模組引過來的中斷線混接到GIC上(就是上面說的三種中斷),然後把混聚合的中斷接到CPU的irq線上。

這樣core就有觸覺了。

3. 模型

既然是中斷控制器,必不可少的是總的中斷使能,各個子中斷使能,優先順序排序,在多核系統中對於SGI還可以指定中斷髮往哪個CPU core。

如何才能保證中斷不丟失呢?啊對了就是pending,distributor會把收集來的中斷,先快取一下,依次交給CPU處理,cpu讀取一箇中斷,其實

就是讀取一個暫存器,只不過這個暫存器存放的是中斷號,這時候中斷的狀態由pending轉為active,cpu處理完了以後,將中斷號寫入GIC,告訴

GIC我處理完了,你可以歇歇了。