Cyclone V SoC で Hard Processor System (HPS) の Cache enable にすると割り込み処理が動作しなくなります。原因として何が考えられますでしょうか?
SoC FPGA
カテゴリ:SoC
ツール:-
デバイス:Cyclone® V
原因としてはキャッシュの有効化によりソフトウェアが高速に動作するため、割り込みハンドラ内の割り込みクリア処理が間に合っていないことが原因だと考えられます。
例えば FPGA 側の PIO モジュールの割り込み信号に対して、割り込みクリア関数である IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0xf); を実行した場合を考えます。
上記の割り込みクリア関数を実行後は、次の処理に行く前に割り込みが終了したと思われるかもしれませんが、実際にはレジスタクリアされる前に復帰処理が実行され、結果 2 回割り込みハンドラがコールされていることがあります。
この場合、割り込みクリア処理は LWHPS_FPGA (Lightweight HPS-to-FPGA) ブリッジを経由してまだ書き込み途中の状態です。単純にウエイト処理を追加するだけでも問題回避されます。
対策として該当アドレスにきちんと値が書き込まれているか、レジスタリードバック処理を追加し読み出し完了までハンドラを抜けない様に変更してください。