Armadillo-460のPC/104バスにデジタル入力ボードMPC104-ISO32I(エンベデッドテクノロジー製)を接続して使用する方法を紹介します。
MPC104-ISO32Iは、入力32チャンネルをもった、PC/104接続のデジタル入力ボードです。各入力チャンネルは、光アイソレートされています。MPC104-ISO32Iの詳細な仕様等は、エンベデッドテクノロジーホームページでご確認ください。
Armadillo-460にPC/104ボードを接続して使用する場合、そのボード専用のデバイスドライバを作成するというのが、本来の方法です。しかしながら、Linuxカーネル用のデバイスドライバを作成するのはなかなかハードルが高い作業です。そこで、本Howtoではサンプルプログラムをユーザーランドで動作するアプリケーションプログラムとして実装します。このように、Armadillo-460では簡単なPC/104ボードであれば、デバイスドライバを作成せずとも、制御することができるようになっています。
以下はサンプルアプリケーションの主な仕様です。
- 32チャンネル全ての入力値を表示
- I/Oベースアドレスは0x360固定(出荷デフォルト)
本Howtoでのおおまかな手順は以下のようになります。
動作確認に使用したソフトウェアは以下の通りです。
- ユーザーランドイメージ: romfs-a460-1.00.img.gz
- Linux カーネルイメージ: linux-a460-1.00.bin.gz
- MPC104-ISO32Iサンプルアプリケーション: iso32i.tar.gz
Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。
1. 事前準備
1.1. MPC104-ISO32Iのジャンパ設定を確認する
MPC104-ISO32IではPC/104のI/Oアドレス空間のどこを使用するか、ジャンパで 設定できるようになっています。今回のサンプルアプリケーションでは0x360 から0x363を使いますので、ジャンパ(JP1, JP2, JP3)が以下のように設定され ていることを確認してください。
JP1: ショート
JP2:
ピン 設定 A15 ショート A14 ショート A13 ショート A12 ショート A11 ショート A10 ショート A09 オープン A08 オープン JP3:
ピン 設定 A07 ショート A06 オープン A05 オープン A04 ショート A03 ショート A02 ショート
その他の設定をする場合は、サンプルアプリケーションのソースファイルの以下の行に定義されているI/Oベースアドレスを編集する必要があります。
iso32i/iso32i.h
#define ISO32I_BASE (0x360)
1.2. Armadillo-460にスペーサを取り付ける
MPC104-ISO32Iを接続する前に、Armadillo-460の四隅に付属のスペーサ(15mm) を取り付けてください。PC/104用のピンは比較的長いため、スペーサを取り付 けていないとボードの重みでピンが曲がってしまうことがあります。
1.3. MPC104-ISO32IをArmadillo-460に接続する
最後に、Armadillo-460に電源が入っていないことを確認してから、MPC104-ISO32IをArmadillo-460に接続してください。
以上で事前準備は完了です。
2. サンプルアプリケーションの取得とビルド
サンプルアプリケーションのソースコードアーカイブは、http://download.atmark-techno.com/armadillo-460/sample/iso32i.tar.gz から取得できます。wgetコマンドで開発PC上にダウンロードし、tarコマンドで展開してください。
[ATDE ~]$ wget http://download.atmark-techno.com/armadillo-460/sample/iso32i.tar.gz [ATDE ~]$ tar zxvf iso32i.tar.gz [ATDE ~]$ cd iso32i [ATDE ~/iso32i]$ ls Makefile iso32i.c iso32i.h
iso32i.cがソースコード、iso32i.hがヘッダファイルです。iso32i.cの中身を見てみると、以下に示すように単純な処理しか行っていません。これだけで、PC/104ボードのレジスタを読み書きすることができます。
- /dev/memをopen()
- Armadillo-460のPC/104 I/O空間(8bitアクセス用)をmemmap()
- memmap()した空間のうち、ISO32IのI/Oベースアドレス分移動した空間へアクセス
サンプルアプリケーションをビルドするには、makeコマンドを実行してください。ファイル"iso32i"が、ビルドによって生成されたサンプルアプリケーションの実行可能ファイルです。
[ATDE ~/iso32i]$ make arm-linux-gnueabi-gcc -Wall -Wextra -O2 -march=armv5te -c -o iso32i.0 iso32i.c arm-linux-gnueabi-gcc iso32i.o -o iso32i [ATDE ~/iso32i]$ ls Makefile iso32i iso32i.c iso32i.h iso32i.o
3. サンプルアプリケーションの転送
Howto: ftpでファイルを送受信するを参照し、サンプルアプリケーションの実行可能ファイルを開発用PCからArmadillo-460に転送してください。 転送が完了したら、Armadilloの端末上で以下のように実行権限を付与し、パスの通ったディレクトリへ実行可能ファイルを移動してください。
[armadillo ~]$ cd /home/ftp/pub [armadillo /home/ftp/pub]$ chmod +x iso32i [armadillo /home/ftp/pub]$ mv iso32i /usr/bin
※ もし、ビルド済みのatmark-distがある場合は、以下の手順で本サンプルアプリケーションを含んだユーザランドイメージファイルを作ることもできます。ユーザランドイメージファイルをフラッシュメモリに書き込む方法については、「Armadillo-400シリーズ ソフトウェアマニュアル」を参照してください。
[atde3]$ ls atmark-dist-[version] iso32i [atde3]$ cd iso32i [atde3]$ make ROOTDIR=../atmark-dist-[version] romfs [atde3]$ cd ../atmark-dist-[version] [atde3]$ make image
4. サンプルアプリケーションの実行
サンプルアプリケーションに引数はありません。実行すると、32チャンネル全ての入力値を1チャンネルごとに表示します。
フォトカプラがオンの場合は"1"が、オフの場合は"0"が読み出せます。 +V3(CN1 31ピン)に電源を接続し、D34(CN1 36ピン)にGNDを接続している状態 での実行例は次のようになります。
[a460]$ iso32i D37..D30 D27..D20 D17..D10 D07..D00 00010000 00000000 00000000 00000000