1. 程式人生 > >arm gic 中斷控制器工作原理概述

arm gic 中斷控制器工作原理概述

linux pinctrl 裡面有個gpio抽象的中斷控制器與系統的gic中斷控制器級聯cascade

閱讀arm generic interrupter controller architecture specification,總結下

支援的中斷型別

平常工作接觸到的是ppi,sgi和spi,ppi和sgi是對某一個核的,spi是對所有核的,sgi一般是用來核間通訊

gic 的hw 分為簡單兩部分distributor和cpu interface(實際上還有int service 和 redistributor),下圖以是gic工作原理的簡化圖,distributor是隻有一個,cpu interface 每個核有一個,每個核可以通過一個private bus去訪問gic的暫存器

distributor 的功能包括(針對不同型別中斷可能支援的功能不同,如下只描述spi):

.中斷的優先順序控制(group0  group1)

.中斷的security 配置(secure  non-secure)

.中斷的affinity配置(親核性 )

.中斷的level-edge sensitive

.對中斷active或者pending(state machine)

cpu interface的功能包括:

.中斷的ACK

.中斷的priority drop

.中斷在對應的security狀態執行(secure  non-secure)

.中斷的deavtive

gic state machine

一般的中斷處理流程: 中斷的初始狀態是inactive,device assert 中斷後狀態變為pending如果這個時候priority security 條件都滿足的話cpu interface會ack to this interrupter,中斷的狀態變為active,系統讀取中斷號然後執行中斷,如果之後該device沒有再assert中斷的話,中斷的狀態就變為了inactive

device assert 中斷對於level-edge sensitive(配置在distributor)的中斷是不一樣的,這次想翻看gic文件的目的是想知道level sensitive的中斷gic會不會有device已經關掉中斷,gic還記錄著該中斷是pending的狀態,答案是不會