目次
GIC は、シングルコアまたはマルチコア チップの割り込みリソースを管理するために使用されます。
-
ARM は GIC 仕様の 4 つのバージョン (V1 ~ V4) を開発しました。
-
ARMv7-A コアは GIC-400 で使用されます
GIC構造
GIC 公式マニュアル: ARM® 汎用割り込みコントローラー
-
V2 は最大 8 コアをサポートします
-
3 種類の信号ソース:
-
ソフトウェア割り込み:マルチコア通信用、ID0~ID15
-
プライベート割り込み: カーネル固有の割り込み、ID16 ~ ID31
-
共有割り込み:全コアで共有される割り込み、ID32~ID1019
-
-
Distributor: 割り込み信号をどの CPU インターフェースユニットに送信するかを選択します
関連するレジスタとは何ですか?
-
割り込み数: GICD_TYPER
-
割り込みクリア: GICD_ICENABLERn
-
割り込みイネーブル: GICD_ISACTIVERn
-
割り込み優先度設定: GICD_IPRIORITYR
-
-
CPUインターフェースユニット:信号を処理した後、CPUに信号を送信します。
関連するレジスタとは何ですか?
-
割り込み優先度の数: GICC_PMR
-
プリエンプション優先度とサブ優先度の設定: GICC_BPR
-
保存割り込み ID: GICC_IAR
-
CPU割り込み完了通知:GICC_EOIR
-
GIC 割り込みコントローラのベース アドレスを取得する
方法 1: チップのデータシートを照会する
方法 2: cp15 コプロセッサをクエリする
c0~c15の合計16個あります。各コプロセッサ自体には複数の意味があり、段階的に構成する必要があります。
//コプロセッサMRC {cond}の設定と読み取り p15, <opc1>, <Rn>, <CRn>, <CRm>, <opc2> //コプロセッサMCR の設定と書き込み{cond} p15, <opc1> , <Rn> 、<CRn>、<CRm>、<opc2>
-
cond: 実行条件、通常は省略されます
-
opc1: 最初のレイヤーの設定
-
Rn: 汎用レジスタ
-
CRn: 設定するコプロセッサ
-
CRm: 第 2 層の設定
-
opc2: レイヤ 3 設定
B3.17 VMSA 実装における CP15 レジスタの組織化
CBARレジスタ
CRn=c15、opc1=4、CRm=c0、opc2=0
-
GICの住所
MRC p15, 4, r1, c15, c0, 0 ;获取 GIC 基地址
SCTLRレジスタ
CRn=c1、opc1=0、CRm=c0、opc2=0
-
bit13: 割り込みベクタテーブルのベースアドレス
-
キャッシュ\mmu\分岐予測...
MRC p15, 0, <Rt>, c1, c0, 0 ; SCTLR レジスタを読み取り、データを Rt に保存します。 MCR p15, 0, <Rt>, c1, c0, 0 ; Rt のデータを SCTLR(c1) レジスタに書き込みます。
VBARレジスタ
CRn=c12,opc1=0,CRm=c0,opc2=0
-
bit5~31:割り込みベクタテーブルのオフセットアドレス
MRC p15, 0, <Rt>, c12, c0, 0 ; VBAR レジスタを読み取り、データを Rt に保存します。 MCR p15, 0, <Rt>, c12, c0, 0 ; Rt のデータを VBAR レジスタに書き込みます。