目次
この記事の内容
Zynq タイマー割り込みの関数について。
FPGA設計大全第2版の第5章に、 Zynq の CPU を使ってタイマー割り込みで RGB LED の色を切り替えていく例が載っています。その C言語のコードを自分なりに理解したメモです。
- タイマー割り込み ← この記事の内容
- 割り込みコントローラのドライバ初期化
- 割り込み処理関数の登録
- main 関数・プリプロセッサ・インスタンス変数宣言
タイマー割り込み関数
/* タイマー割り込み関数 */
void TimerCounterHandler(void *CallBackRef)
{
volatile static int cnt;
XScuTimer *TimerInstancePtr = (XScuTimer *)CallBackRef;
if (XScuTimer_IsExpired(TimerInstancePtr))
{
XScuTimer_ClearInterruptStatus(TimerInstancePtr);
if (++cnt > 15)
cnt = 0;
xil_printf("cnt=%d\n", cnt);
XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, led_rgb(cnt));
}
}
void TimerCounterHandler { }
タイマー割り込みが発生したときに実行する関数。 (この関数を実行するように別の関数内で設定している。)
割り込み発生時に起動するから「割り込みハンドラ」という。
volatile static int cnt;
volatile : コンパイラによる最適化を抑制する。
static : 関数の処理終了後も値を保持する。 static がない場合は関数を呼び出すたびに初期化される。
XScuTimer *TimerInstancePtr = (XScuTimer *)CallBackRef;
XScuTimer ポインタ型の変数を宣言する。「*」が付いているのでポインタ。
初期値は、 XScuTimer のポインタ型にキャストした CallBackRef (関数の引数として入ってくる) 。
XScuTimer は IP ごとに定義された構造体で、「インスタンス」と呼ばれる。(参考文献より)
if (XScuTimer_IsExpired(TimerInstancePtr))
タイマーのカウンタが 0 になっている場合に処理を実行する。
XScuTimer_IsExpired は、タイマーの値が 0 のときに True を返す。
XScuTimer_ClearInterruptStatus(TimerInstancePtr);
タイマー割り込み状態をクリアする。
if (++cnt > 15)
cnt = 0;
(LED の色を切り替えるための)カウンタをインクリメントして、その値が 15 を超えたら 0 に戻す。
xil_printf("cnt=%d\n", cnt);
カウンタの値を表示する。
xil_printf は printf よりもサイズが小さい。浮動小数と long 型の表示には対応していない。 Xilinx Standalone Library Documentation の 10 ページ目に記載あり。
この記事には載せていないが、ファイルの先頭でインクルードしている (#include "xil_printf.h"
)
XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, led_rgb(cnt));
GPIO に値を出力する。
引数は、 1つ目が GPIO のインスタンス、 2つ目がチャンネル番号(1 か 2)、3つ目が出力したい値。
関連記事・参考文献
関連記事
当ブログ内の関連記事
- タイマー割り込み ← この記事の内容
- 割り込みコントローラのドライバ初期化
- 割り込み処理関数の登録
- main 関数・プリプロセッサ・インスタンス変数宣言
参考文献
- Xilinx Vitis Drivers API Documentation “scutimer_v2_3” (Vitis アプリ内から参照可能)
- FPGAプログラム大全 Xilinx編 第2版
使用ボード
Digilent 社製の PYNQ-Z1 を使いました。 Zynq 搭載のほかの評価ボードでも同じように動くはずです。参考までに PYNQ-Z1 購入先のリンクの一例。(PYNQ-Z1 と Z2 の違いはこちらの記事)
- 秋月電子
https://akizukidenshi.com/catalog/g/gM-13812/ - RSコンポーネンツ
https://jp.rs-online.com/web/p/fpga-development-tools/1840474/ - Amazon (記事作成時点では割高でした) ・楽天市場
コメントを残す