CAMACは通常VME-CAMACインターフェースを通してアクセスしますが、専用の ライブラリーやデバイスドライバーがKEKオンライングループ・東工大などに よって用意されています。CAMACしか使わない場合はVMEのことを意識する必要 はありません。ユーザから見るとUN IXの機械の上では共通のCAMACライブラリー として提供されていますのでそれを使うようにしましょう。プログラムは onlnews.kek.jpから匿名ftpで持ってくることが出来ます。CAM ACはUNIXのファ イルとしては/dev/ccという名前でインストールされているはずです。
プログラムを書いてみましょう。インクルードするべきファイルはcamlib.h です。
#include "camlib.h"
プログラムの中で最初にやるべきことはデバイスをオープンすることですが、 必要な情報はライブラリー側で確保しているのでユーザプログラムは単に CAMOPNを呼ぶだけです。
CAMOPN( );
終了時にはクローズします。
CAMCLS( );
多分その次にやることはZの発生やIの除去などでしょう。
CGENZ(); /* Z 発生*/ CGENC(): /* C 発生 */ CSETI(); /* Iを立てる*/ CREMI(); /* Iを下げる */
個別のモジュールへのCAMAC命令はNAFというマクロを使います。このマクロは 引数にCAMA CのN(ステーションナンバー)、A(サブアドレス)、F(ファンクショ ン)の三つを取ります。例えばN=5のモジュールのサブアドレスA=0に書き込む 命令F=16は、
NAF( 5, 0, 16 ) '
というように表します。これは覚えておいてください。では個別のモジュール に対してコマンドを実行しましょう。
int data, q, x; data = 0x1234; CAMAC( NAF( 5, 0, 16 ), &data, &q, &x );
Fのタイプによらず(書き込み、読み出し、データ転送なし)おなじ関数CAMACが 使われます。このためデータはポインターで渡されます。実行結果のビットQ とXも返されます。CAMA C()の場合は24ビットデータ転送がされます。16ビッ ト転送で十分の場合はCAMACW()を使います。使い方はCAMACと同じです。
LAM(ルックアットミー)を使いましょう。LAM割り込みを許可するには
CELAM(-1);
-1は全ビットが1の整数です。どのステーションからの割り込みも許可します。 禁止するときは
CDLAM( );
割り込みがかかるのを待ちます。
CWLAM( 10 );
割り込みがかかるまで10秒間待ちます。それまでに割り込みがかかればもちろ んそこで制御が戻ってきます。
プログラムは書けました。リンク時にはlibcamlib.aを呼びます。
% cc -o camtest camtest.o -lcamlib
という風になります。