Cyclone V HPSへのインタラプト入力(ハンドラ部分)

ユーザー回路からインタラプト信号は、Qsysを利用してCyclone VのHPSに入力することができました。次に行うのは、インタラプト・ハンドラの動作確認です。当初、ベアメタルでインタラプトの動作を確認しようと考えていました。しかし、Cyclone VではNios IIの時のようなベアメタル開発環境(Eclipse Nios II + Altera API)が見当たらなかったので、Linuxで確認することにしました。Linuxのバージョンは3.13.0-00298-g3c7cbb9-dirtyです。これはDE0-Nano-SoCに付属のSDカードに格納されているLinuxのバージョンです。具体的な手順は次の通りです。

デバイスドライバの開発環境について

今回、Linuxデバイスドライバの開発はubuntu 14.04LTS 64bitで行いました。デバイスドライバの開発にはARM用のクロスコンパイラが必要になりますが、ubuntuではapt-getで簡単にインストールできるようです。具体的には、次のコマンドでクロスコンパイラをインストールできます。

Linuxソースコードのダウンロード

Linuxのデバイスドライバを開発するには、ソースコードが必要になります。ソースコードはRocketBoard.orgからダウンロードできます。DE0-Nano-SoCに付属しているLinuxのバージョンは3.13.0-00298-g3c7cbb9-dirtyなので、同じバージョンのソースコードが欲しいのですが、見つからないので3.13.0-00298-g3c7cbb9をダウンロードしました。具体的な手順は次の通りです。

次にLinuxをコンパイルします。

コンパイルしたLinuxのバイナリは今回は使用していません。ただ、コンパイルを行わないとデバイスドライバのコンパイルに必要なインクルードファイルなどが生成されないようなのでLinuxのコンパイルを行いました。

デバイスドライバの作成

次のような簡単なドライバでインタラプトの動作を確認します。72番のIRQが発生すると、”Interrupt 72 occured”と表示するだけのドライバです。

コンパイルの前にLinuxのソースコードを一部書き換えます。これは、DE0-Nano-SoCのLinuxのバージョンとソースコードのバージョンが異なるためです。本当は、DE0-Nano-SoC用のLinuxのバージョンを合わせる方が正しいと思いますが、インタラプトハンドラの動作を確認したいだけなので、ソースコードを書き換えました。具体的には、linux-socfpga/include/generated/utsrelease.hを次のように書き換えます。

ソースコードのバージョンが異なると、insmodでデバイスドライバを登録する時に次のようなエラーが発生します。

ドライバは、次のようなMakefileでコンパイルできます。この例ではLinuxのソースコードは~linux-socfpgaに格納されています。

テスト用アプリケーションの作成

次のようなアプリケーションでインタラプトの動作を確認しました。Qsysでユーザー回路からのインタラプトを入力したPIOのインタラプトマスクを解除後、my_system_init()でユーザー回路を初期化して無限ループを行うだけのアプリケーションです。Qsys PIOのレジスタ詳細は、Embedded Peripherals IP User Guideに記載があります。my_system_init()の内容は省略していますが、ユーザー回路を初期化してLCD表示用のV-syncのタイミングでインタラプトが発生するように設定を行っています。

Qsysで設定したPIOのアドレス・マップは、hps_0.hに格納されています。このファイルは、DE0-Nano-SoC付属のデモプロジェクトに格納されているgenerate_hps_qsys_header.shを実行することで生成されます。

DE0-Nano-SoCへの転送

DE0-Nano-SoCでLinuxを起動後、ユーザー回路のコンフィグレーションを行います。その後、ネットワーク経由でドライバやアプリケーションデータをDE0-Nano-SoCに転送します。

デバイスドライバの登録とアプリケーションの実行

insmodでデバイスドライバを登録後、テスト用のアプリケーションを実行します。72番のインタラプトの発生を確認できます。

まとめ

QsysでCyclone V HPSのf2h_irq0[0]に入力したインタラプト信号は、IRQ72のインタラプト・ハンドラで認識できることが確認できました。

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