Armadillo-460のPC/104バスにプログラマブルI/OボードHT3070(梅沢無線電機製)を接続して使用する方法を紹介します。
HT3070は、出荷時はシンプルなデジタル入出力ボードとして機能しますが、CPLDの書き込み内容を変更してアプリケーションに適した処理を組み込むことができます。HT3070の詳細な仕様等は、梅沢無線電機ホームページでご確認ください。
Armadillo-460にPC/104ボードを接続して使用する場合、そのボード専用のデバイスドライバを作成するというのが、本来の方法です。しかしながら、Linuxカーネル用のデバイスドライバを作成するのはなかなかハードルが高い作業です。そこで、本Howtoではサンプルプログラムをユーザーランドで動作するアプリケーションプログラムとして実装します。このように、Armadillo-460では簡単なPC/104ボードであれば、デバイスドライバを作成せずとも、制御することができるようになっています。
本Howtoでは、HT3070の出荷時に記録されているアプリケーションのデジタル入出力(62bit)を制御する方法を示します。
本Howtoの構成は以下のようになります。
動作確認に使用したソフトウェアは以下の通りです。
- ユーザーランドイメージ: romfs-a460-1.00.img.gz
- Linux カーネルイメージ: linux-a460-1.00.bin.gz
- アプリケーション: devmem2.tar.gz
Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。
1. 事前準備
1.1. HT3070のジャンパ設定を確認する
HT3070では、PC/104のI/Oアドレス空間のベースアドレスをジャンパで設定できるようになっています。本Howtoでは、出荷時設定(SA[10:4]=[00100000])のまま使用します。
JP1 | 設定値 |
---|---|
A4 | 0 |
A5 | 0 |
A6 | 0 |
A7 | 0 |
A8 | 1 |
A9 | 0 |
A10 | 0 |
HT3070では割り込みを使用することができますが、本Howtoでは使用しません。 JP2を出荷時設定と同様に設定します。
JP3は、PC/104バスのシステムクロックSYSCLKをCPLDに接続するかどうかを設定することができます。 出荷時設定と同様に、システムクロックをCPLDに接続する設定とします。
JP3 | 設定値 |
---|---|
CLK | ON |
1.2. Armadillo-460にスペーサを取り付ける
HT3070を接続する前に、Armadillo-460の四隅に付属のスペーサ(15mm)を取り付けてください。PC/104用のピンは比較的長いため、スペーサを取り付けていないとボードの重みでピンが曲がってしまうことがあります。
1.3. HT3070をArmadillo-460に接続する
最後に、Armadillo-460に電源が入っていないことを確認してから、HT3070をArmadillo-460に接続してください。
以上で事前準備は完了です。
2. HT3070の出荷時アプリケーションのレジスタ構成
HT3070の出荷時アプリケーションのレジスタ構成は以下のようになっています。
アドレス | 機能 |
---|---|
base+0 | PA: データ入出力ポートA |
base+1 | PB: データ入出力ポートB |
base+2 | PC: データ入出力ポートC |
base+3 | PD: データ入出力ポートD |
base+4 | PE: データ入出力ポートE |
base+5 | PF: データ入出力ポートF |
base+6 | PG: データ入出力ポートG |
base+7 | PH: データ入出力ポートH |
base+8 | PAC: 入出力定義レジスタA |
base+9 | PBC: 入出力定義レジスタB |
base+A | PCC: 入出力定義レジスタC |
base+B | PDC: 入出力定義レジスタD |
base+C | PEC: 入出力定義レジスタE |
base+D | PFC: 入出力定義レジスタF |
base+E | PGC: 入出力定義レジスタG |
base+F | PHC: 入出力定義レジスタH |
各ポートは、8本の端子で構成されています。
2.1. データ入出力ポート
各端子の入力状態の取得または、出力状態の設定を行うことが出来ます。
入出力定義レジスタで"出力"に設定されている場合
値 状態 0 端子に0Vを出力 1 端子に3.3Vを出力 入出力定義レジスタで"入力"に設定されている場合
値 状態 0 端子が0V 1 端子が3.3V
2.2. 入出力定義レジスタ
各端子の入出力方向を設定します。
設定 | 方向 |
---|---|
0 | 出力 |
1 | 入力 |
3. 動作確認
HT3070の動作確認には、devmem2というアプリケーションを利用します。 以下のHowtoで詳しく説明されているので、ビルドを行いArmadillo-460へ転送してください。
Howto: アプリケーションから任意のメモリ空間をアクセスする
Howto: ftpでファイルを送受信する
FAQ: ArmadilloにFTPでファイルを転送したが実行できない
事前準備で設定したようにベースアドレスは0x0100となります。 Armadillo-460のPC/104 I/O 8bit空間のオフセットは0xb2000000のため、 HT3070のレジスタ空間の先頭アドレスは、0xb2000100となります。
- ポートAの各端子を"入力"に設定し、状態を取得する
[root@armadillo460-0 (ttymxc1) /home/ftp/pub]# ./devmem2 0xb2000108 byte 0xff /dev/mem opened. Memory mapped at address 0x40021000. Value at address 0xB2000108 (0x40021108): 0xFF Written 0xFF; readback 0xFF [root@armadillo460-0 (ttymxc1) /home/ftp/pub]# ./devmem2 0xb2000100 byte /dev/mem opened. Memory mapped at address 0x40021000. Value at address 0xB2000100 (0x40021100): 0xFF
- ポートAの各端子を"出力"に設定し、0Vを出力する
[root@armadillo460-0 (ttymxc1) /home/ftp/pub]# ./devmem2 0xb2000100 byte 0x00 /dev/mem opened. Memory mapped at address 0x40021000. Value at address 0xB2000100 (0x40021100): 0x0 Written 0x0; readback 0x0 [root@armadillo460-0 (ttymxc1) /home/ftp/pub]# ./devmem2 0xb2000108 byte 0x00 /dev/mem opened. Memory mapped at address 0x40021000. Value at address 0xB2000108 (0x40021108): 0xFF Written 0x0; readback 0x0