Zynq 割り込み処理登録 – タイマー割り込み理解メモ (3)

アイキャッチ

この記事の内容

Zynq 割り込み処理登録を行う関数について。

Zynq の CPU でタイマー割り込みによって RGB LED の色を切り替えていく例が、FPGA設計大全第2版の第5章に載っています。C のソースコードを自分なりに理解したときのメモ (その3) です。

  1. タイマー割り込み
  2. 割り込みコントローラのドライバ初期化
  3. 割り込み処理関数の登録  ← この記事の内容
  4. main 関数・プリプロセッサ・インスタンス変数宣言

割り込み処理関数登録

割り込み処理登録関数を抜粋したコード。

/* 割り込み処理関数の登録 */
int ScuGicInt_Reg(u32 Int_Id, void *InstancePtr, void *IntHandler)
{
    int Status;
    Status = XScuGic_Connect(&IntcInstance, Int_Id, (Xil_ExceptionHandler)IntHandler, (void *)InstancePtr);
    if (Status != XST_SUCCESS)
        return XST_FAILURE;
    XScuGic_Enable(&IntcInstance, Int_Id);
    return XST_SUCCESS;
}

以下、コードの処理内容メモ。


int ScuGicInt_Reg(u32 Int_Id, void *InstancePtr, void *IntHandler) {}

割り込み発生時の処理に呼び出す関数を設定する関数を作成する。具体的には「タイマー割り込み」発生時に LEDを制御する関数 が呼ばれるようする。

第1引数は割り込み ID 、第2引数はインスタンスポインタ、第3引数は割り込みハンドラ。

main 関数から適切な引数とともに ScuGicInt_Reg (この関数) を実行する。


Status = XScuGic_Connect(&IntcInstance, Int_Id, (Xil_ExceptionHandler)IntHandler, (void *)InstancePtr);

割り込み発生時に実行する関数と割り込みソースの ID を関連付ける。

XScuGic_Connect の引数は、1つ目が割り込みコントローラのインスタンスポインタ、2つ目が割り込み ID 、3つ目が割り込みハンドラー (割り込み発生時に呼ぶ関数) 、4つ目が接続先のインスタンスポインタ (今回はタイマー)。


if (Status != XST_SUCCESS)
    return XST_FAILURE;

異常発生時は “処理失敗” を返してここで処理を終える。


XScuGic_Enable(&IntcInstance, Int_Id);

引数で渡す ID の割り込みを有効にする。


return XST_SUCCESS;

“正常終了” を返して処理を終了する。

関連記事・参考文献

関連記事

当ブログ内の関連記事

  1. タイマー割り込み
  2. 割り込みコントローラのドライバ初期化
  3. 割り込み処理関数の登録  ← この記事の内容
  4. main 関数・プリプロセッサ・インスタンス変数宣言

参考文献

  • Xilinx Vitis Drivers API Documentation “scugic_v4_5” (Vitis 内から参照可能)
  • FPGAプログラム大全 Xilinx編 第2版

使用したボード PYNQ-Z1 については、割り込みハンドラの記事の最後 をご覧ください。

スポンサーリンク