next up previous contents
Next: この文書について... Up: VMEバスやCAMACをアクセスする Previous: 割り込みの使い方

CAMACを使う

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

という風になります。



next up previous contents
Next: この文書について... Up: VMEバスやCAMACをアクセスする Previous: 割り込みの使い方



Kinya Hibino
Sun Jan 14 21:36:40 JST 1996