Howto

Armadillo-460でPC/104接続のプログラマブルI/Oボード(梅沢無線電機 HT3070)を使用する

Armadillo-460のPC/104バスにプログラマブルI/OボードHT3070(梅沢無線電機製)を接続して使用する方法を紹介します。

HT3070は、出荷時はシンプルなデジタル入出力ボードとして機能しますが、CPLDの書き込み内容を変更してアプリケーションに適した処理を組み込むことができます。HT3070の詳細な仕様等は、梅沢無線電機ホームページでご確認ください。

Armadillo-460にPC/104ボードを接続して使用する場合、そのボード専用のデバイスドライバを作成するというのが、本来の方法です。しかしながら、Linuxカーネル用のデバイスドライバを作成するのはなかなかハードルが高い作業です。そこで、本Howtoではサンプルプログラムをユーザーランドで動作するアプリケーションプログラムとして実装します。このように、Armadillo-460では簡単なPC/104ボードであれば、デバイスドライバを作成せずとも、制御することができるようになっています。

本Howtoでは、HT3070の出荷時に記録されているアプリケーションのデジタル入出力(62bit)を制御する方法を示します。

本Howtoの構成は以下のようになります。

  1. 事前準備
  2. HT3070の出荷時アプリケーションのレジスタ構成
  3. 動作確認

動作確認に使用したソフトウェアは以下の通りです。

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を出荷時設定と同様に設定します。

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