DE0-Nano-SoC用ベアメタルアプリのインタラプト

Cyclone Vのベアメタルアプリで、FPGAからHPSへのインタラプトを認識するインタラプト・ハンドラの作成例です。

ハードウェアについて

FPGAから出力したインタラプトを、QsysのPIOを介してHPSに接続しています。回路とQuartus II/Qsysの具体的な設定は、こちらです。

インタラプト・ハンドラの参考コード

ベアメタルのインタラプト・ハンドラは、以下のページの”GPIO Example-CV”が参考になります。
https://www.altera.com/support/support-resources/design-examples/soc.html

具体例

今回のインタラプトは、72番に反応するようにインタラプト・ハンドラを記述します。具体的なコードは次のとおりです。

ソースコード

このプログラムでは、FPGA内に実装したLCD表示回路から、Vブランクのタイミングでインタラプト72番が発生します。インタラプトが発生すると、vint_isr_callbackが呼ばれます。

重要なコードは、system_init関数の次の部分です。ここで、インタラプト番号72に対してコールバック関数vint_isr_callbackを登録しています。

インタラプト番号の対応は、alt_interrupt_common.h(/embedded/ip/altera/hps/altera_hps/hwlib/include/alt_interrupt_common.h)に定義されています。72は ALT_INT_INTERRUPT_F2S_FPGA_IRQ0として定義されているのがわかります。

vint_isr_callbackでは、単純にvint_statフラグを1にする処理を記述しています。main関数内でvint_stat == 1を検出すると、プログラムが終了します。

実行結果

まとめ

ベアメタルアプリでは、GPIOのサンプルを参考に、コールバック関数の名前と対応するインタラプト番号を変更すればインタラプトを認識できます。

Linuxでのインタラプト・ハンドラの例はこちらです。

スポンサーリンク







  • このエントリーをはてなブックマークに追加
スポンサーリンク