Armadillo-460のPC/104バスにデジタル入出力ボードHT2030(梅沢無線電機製)を接続して使用する方法を紹介します。
HT2030は、入力16チャンネル、出力8チャンネルをもった、PC/104接続のデジタル入出力(DIO)ボードです。各入出力チャンネルは、光アイソレートされています。HT2030の詳細な仕様等は、梅沢無線電機ホームページでご確認ください。
Armadillo-460にPC/104ボードを接続して使用する場合、そのボード専用のデバイスドライバを作成するというのが、本来の方法です。しかしながら、Linuxカーネル用のデバイスドライバを作成するのはなかなかハードルが高い作業です。そこで、本Howtoではサンプルプログラムをユーザーランドで動作するアプリケーションプログラムとして実装します。このように、Armadillo-460では簡単なPC/104ボードであれば、デバイスドライバを作成せずとも、制御することができるようになっています。
以下はサンプルアプリケーションの主な仕様です。
- 入出力チャンネルの値を表示/設定
- 割り込みは未使用
- I/Oベースアドレスは0x100固定(出荷デフォルト)
本Howtoでのおおまかな手順は以下のようになります。
動作確認に使用したソフトウェアは以下の通りです。
- ユーザーランドイメージ: romfs-a460-1.00.img.gz
- Linux カーネルイメージ: linux-a460-1.00.bin.gz
- HT2030サンプルアプリケーション: ht2030.tar.gz
Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。
1. 事前準備
1.1. HT2030のジャンパ設定を確認する
HT2030ではPC/104のI/Oアドレス空間のどこを使用するか、ジャンパで設定できるようになっています。今回のサンプルアプリケーションでは0x100から0x103を使いますので、ジャンパ(JP1, JP2, JP3, JP4)が以下のように設定されていることを確認してください。HT2030の各ジャンパにシルク印字されている「●」側にジャンパソケットを取り付けた場合に設定値が0になります。
ジャンパ | 設定値 |
---|---|
J1 | 0 |
J2 | 0 |
J3 | 0 |
J4 | 0 |
その他の設定をする場合は、サンプルアプリケーションのソースファイルの以下の行に定義されているI/Oベースアドレスを編集する必要があります。
ht2030/ht2030.h
#define HT2030_BASE (0x100)
また、HT2030ではPB7の入力で割り込みを発生させることができますが、今回のサンプルアプリケーションでは使用しません。JP16が全てオープンに設定されていることを確認してください。
- JP16:
ピン 設定 IRQ2 オープン IRQ3 オープン IRQ4 オープン IRQ5 オープン IRQ6 オープン IRQ7 オープン
1.2. Armadillo-460にスペーサを取り付ける
HT2030を接続する前に、Armadillo-460の四隅に付属のスペーサ(15mm)を取り付けてください。PC/104用のピンは比較的長いため、スペーサを取り付けていないとボードの重みでピンが曲がってしまうことがあります。
1.3. HT2030をArmadillo-460に接続する
最後に、Armadillo-460に電源が入っていないことを確認してから、HT2030をArmadillo-460に接続してください。
以上で事前準備は完了です。
2. サンプルアプリケーションの取得とビルド
サンプルアプリケーションのソースコードアーカイブは、http://download.atmark-techno.com/armadillo-460/sample/ht2030.tar.gz から取得できます。wgetコマンドで開発PC上にダウンロードし、tarコマンドで展開してください。
[ATDE ~]$ wget http://download.atmark-techno.com/armadillo-460/sample/ht2030.tar.gz
[ATDE ~]$ tar zxvf ht2030.tar.gz
[ATDE ~]$ cd ht2030
[ATDE ~/ht2030]$ ls
Makefile ht2030.c ht2030.h
ht2030.cがソースコード、ht2030.hがヘッダファイルです。ht2030.cの中身を見てみると、以下に示すように単純な処理しか行っていません。これだけで、PC/104ボードのレジスタを読み書きすることができます。
- /dev/memをopen()
- Armadillo-460のPC/104 I/O空間(8bitアクセス用)をmemmap()
- memmap()した空間のうち、HT2030のI/Oベースアドレス分移動した空間へアクセス
サンプルアプリケーションをビルドするには、makeコマンドを実行してください。ファイル"ht2030"が、ビルドによって生成されたサンプルアプリケーションの実行可能ファイルです。
[ATDE ~/ht2030]$ make
arm-linux-gnueabi-gcc -Wall -Wextra -O2 -march=armv5te -c -o ht2030.0 ht2030.c
arm-linux-gnueabi-gcc ht2030.o -o ht2030
[ATDE ~/ht2030]$ ls
Makefile ht2030 ht2030.c ht2030.h ht2030.o
3. サンプルアプリケーションの転送
Howto: ftpでファイルを送受信するを参照し、サンプルアプリケーションの実行可能ファイルを開発用PCからArmadillo-460に転送してください。 転送が完了したら、Armadilloの端末上で以下のように実行権限を付与し、パスの通ったディレクトリへ実行可能ファイルを移動してください。
[armadillo ~]$ cd /home/ftp/pub
[armadillo /home/ftp/pub]$ chmod +x ht2030
[armadillo /home/ftp/pub]$ mv ht2030 /usr/bin
※ もし、ビルド済みのatmark-distがある場合は、以下の手順で本サンプルアプリケーションを含んだユーザランドイメージファイルを作ることもできます。ユーザランドイメージファイルをフラッシュメモリに書き込む方法については、「Armadillo-400シリーズ ソフトウェアマニュアル」を参照してください。
[atde3]$ ls
atmark-dist-[version] ht2030
[atde3]$ cd ht2030
[atde3]$ make ROOTDIR=../atmark-dist-[version] romfs
[atde3]$ cd ../atmark-dist-[version]
[atde3]$ make image
4. サンプルアプリケーションの実行
サンプルアプリケーションの書式は以下に示す通りです。
書式: ht2030 [出力チャンネルに設定する値]
引数無しで実行すると、入力ポート(PA及びPB)の全てのチャンネルの値を表示します。各ポートは8個のチャンネルを有しているため、合計で16チャンネル分の状態が表示されます。
引数を指定して実行した場合は、出力ポート(PC)に、指定した値を書き込みます。PCも8個のチャンネルを有しており、1チャンネルあたり1ビットが割り当てられています。そのため、設定可能な値は0(0x00)~255(0xFF)です。
なお、HT2030のレジスタ入出力の論理レベルは入力ポートと出力ポートで異なります。本サンプルアプリケーションでは、各入出力チャンネルの値として、レジスタの値をそのまま使用しています。
ポート | フォトカプラがオンの場合 | フォトカプラがオフの場合 |
---|---|---|
入力ポート | 0 | 1 |
出力ポート | 1 | 0 |
コマンドの実行例は次のようになります。
入力チャンネルの値を表示します。PA0とPB4に対応するフォトカプラがオンの場合は以下のように表示されます。
[armadillo ~]$ ht2030
PB7..PB0 PA7..PA0
11101111 11111110
出力チャンネルに値を設定します。PC3に対応するフォトカプラのみをオンにする場合は以下のようにコマンドを実行します。
[armadillo ~]$ ht2030 0x08
PC7..PC0
00001000