IMX6ULLmini に基づく Linux ベアメタル開発シリーズ 5: 汎用割り込みコントローラー (GIC)

目次

GIC構造

GIC 割り込みコントローラのベース アドレスを取得する

方法 1: チップのデータシートを照会する

方法 2: cp15 コプロセッサをクエリする

CBARレジスタ

SCTLRレジスタ

VBARレジスタ


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 レジスタに書き込みます。

おすすめ

転載: blog.csdn.net/qq_51519091/article/details/132366238