目次
この記事の内容
Zynq 割り込み処理登録を行う関数について。
Zynq の CPU でタイマー割り込みによって RGB LED の色を切り替えていく例が、FPGA設計大全第2版の第5章に載っています。C のソースコードを自分なりに理解したときのメモ (その3) です。
- タイマー割り込み
- 割り込みコントローラのドライバ初期化
- 割り込み処理関数の登録 ← この記事の内容
- 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;
“正常終了” を返して処理を終了する。
関連記事・参考文献
関連記事
当ブログ内の関連記事
- タイマー割り込み
- 割り込みコントローラのドライバ初期化
- 割り込み処理関数の登録 ← この記事の内容
- main 関数・プリプロセッサ・インスタンス変数宣言
参考文献
- Xilinx Vitis Drivers API Documentation “scugic_v4_5” (Vitis 内から参照可能)
- FPGAプログラム大全 Xilinx編 第2版
リンク
使用したボード PYNQ-Z1 については、割り込みハンドラの記事の最後 をご覧ください。
コメントを残す