警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

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

対象製品: Armadillo-460

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