The BAQ/Data Acquisition/DAQ System/NBBQ/CCNET

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
DAQ System DAQ Module Pulse Shape Analysis RTLinux Linux Device Driver Home
Babirl Babarl NBBQ Home

もどる

CC/NETでNBBQを使うときは、基本的には他のコントローラと同じですが、CC/NETの特徴であるまとめ読みモード(PIO、DMA)を使う場合に専用の関数&defineを使います。

以下のように簡単に使えるようなコマンドを用意ありますが、より自由に使いたい人はccnetevt.cを参考にしてください。
以下の場合は16Bit読み出しにしか対応していません。Segment IDも1つしか使えません。
複数のSegment IDを使えるように賢くしたものが用意してありますが、また後日アップロードします。

○新しい読みだし用ファイル

nbbqdrvccnet_150305.tar.gz
nbbqdrvccnet_withscr_150305.tar.gz(Scalerも読むばあい。しかしテストしていないのでバグがあるかもしれません。) この中のccnetsegment.cを編集してmakeしてください。 read_segndataやcontrol_mod等が使えます。


bbmodules.hの記述

#define BBRL
#define MAXBUFF 0x1e00
#define DBUFF

#define CMDLEN 300  // CC/NETでまとめ読みモードの場合の最大コマンド数

#define CAMAC
#define CAMACINT
#define CCNET
#define LAMN 0     // LAMに使うモジュール。CC/NETのTrigを使う場合は0にしておいてください。

#define OREG 22
#define QDC1 18
#define TDC1 20

CMDLENが初期設定として必要となります。まとめ読みモードでの最大コマンド(フレーム)数を設定します。最大で16kまでです。
nbbqdrvロード時にメモリ領域を確保するのに使います。この数で読み出し速度は変わりませんので、50〜500ぐらいの間で適当につけておけばよいと思います。

startup.cの記述

void startup(void){
  short sval = 1;

  /* Startup Function */
  ccnet_crate_reset();
  check_lam();

  /* Dummy LAM definition */
  crate_define_lam(LAMN);

  /* Create ccnet command frame */
  ccnetstartup();

  /* Create user command frame */
  //usr_ccnet_gen_init(USR_CMDLEN);
  //for(i=0;i<SCRLEN;i++){
    //usr_ccnet_gen_cc(CLKSCR, i, 0, val);
  //}

  /* Clear modules */
  //control_mod(0, N, 0, 9);      // Clear command
  //write_data(0, N, 0, 17, VAL); // via out put register

  control_mod(0, LAMN, 0, 26);
  control_mod(0, LAMN, 0, 9);
  control_mod(0,QDC1,0,9);
  control_mod(0,TDC1,0,9);
  control_mod(0,TDC1,0,24);
  control_mod(0,QDC1,0,24);

  write_data(0, OREG, 0, 17, sval);


  /* Set trigger mode */
   ccnet_trig();                         // CC/NETのTrig入力でLAMをかける場合
   ccnet_pulsemode();                    // CC/NETのBusy出力をパルスモードで使う場合
   ccnet_pulse();                        // CC/NETのBusy出力から1発パルスを出す
}

startup.cでscalerを読むばあいは場合はusr_ccnet_gen_ccでコマンドを追加していきます。
読み出しの場合でも、valに適当な数字を入れておきます。
CC/NETのTrig入力を使う場合は、ccnet_pulse()も併せて書いておくようにしてください。

ccnetsegment.cの記述

void ccnetsegment(void){
  /* Event */

  init_segment(1);
  read_segndata(8,0,QDC1,0,0);
  end_segment();

  init_segment(2);
  read_segndata(8,0,TDC1,0,0);
  end_segment();

  control_mod(0, QDC1, 0, 9);
  control_mod(0, TDC1, 0, 9);
}
          

evt.cのかわりにccnsetsegment.cを編集します。evt.cは書き換えません。

clear.cの記述
void clear(void){
  ccnet_pulse();
}          

clear.cでクリアコマンドを発行しておきます。ccnet_trig()を使う場合はかならずccnet_pulse()を書いておいてください。
また、Triggerが入力されないとBusy出力からパルスは出ません。

Last Update: 2015/3/5
Hidetada Baba
baba ribf.riken.jp