<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Mott Polarimeterのブログ</title>
<link>https://ameblo.jp/mtv-daq-dev/</link>
<atom:link href="https://rssblog.ameba.jp/mtv-daq-dev/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>MTVのデータ収集に使うDAQの備忘録を載せたブログ。みんな、見てくれよな！</description>
<language>ja</language>
<item>
<title>Scaler読み出し、書き出し</title>
<description>
<![CDATA[ SIS3803を利用して、スケーラーの読み出しを試みた。<br><br>SIS3803について。<br><br>・立ち上げただけでは、カウントできない。Global Count Enableの状態にする必要がある<br>・馬場さんの用意した関数cmdvmeを使って、base addressの値をとってくると、0x00000000となっている。<br>・つぎに、cmdvme -lw 0x38383828 0x1とする。この作業で、global count enableの状態を作れる。再度base addressを見に行くと、0x00008000となっている。<br><br>これで準備完了。<br><br>実際の値の格納について。<br><br>・scalerの各チャンネルは、それぞれ固有のアドレスが与えられている。どこのチャンネルにいくつイベントが来たか、という情報は、そのチャンネルのアドレスにアクセスすればよい。<br>・読み出し方法は二通り。一つは読んだら全チャンネルクリアするモード、もうひとつはずーっと数え続けるモード。<br>・実験では、読んだ値を保持して欲しくない。わかんなくなるので。つまり、クリアするモードにすればいいように思う。<br>・ところが、それではだめ。これは今気づいたけど。<br><br>１チャネル読んだら、他の全部をクリアすることになるので、複数のチャネルを読むことができない。<br>forループとかでも、0ch,1ch,2ch....という順番で読んでしまうので、0chを読んだら、他の全てが0になってしまう。<br><br>結論的には、値を保持するモードで測って、全チャネル読み終わったら、clearすればいい。<br><br><br>実際にどうするか。<br><br>まずはwindowの定義をする。<br><br>startup.cで、<br>univ_init_window(ADDR,REGSIZE,A32,No);<br><br>とする。<br>これは、ADDR:base address,REGSIZE:使うレジスターのoffset(最大値),A32:32bitアドレスモード,No:モジュールの番号(これは勝手に決める。以降全てモジュールの番号でやり取りすることになる。)<br><br>さらに、SIS3803は値を保持する能力があるので、一度初期化する必要がある。<br><br>univ_map_write32(0x020,sc,SCAN);<br><br>base addressから数えて0x20のアドレスに、1を立ててあげると、それまでscalerが覚えていた値がクリアされる。<br><br>これをstartup.cの中に書いてあげることで、DAQを回した瞬間にスケーラーの値を0にできる。<br>ここで一つ注意事項。<br><br>univ_map_write32の二番目の引数(上の例では、scという変数)は、ポインタである必要がある。<br>ただの数字の1を入れても、セグメンテーション違反になって実行できない。<br>どうするか。<br>int *sc,a=1;<br>sc=&amp;a;<br>このようにすれば問題ない。<br>なんかそんな回りくどいことしないで、<br>int *sc;<br>*sc = 1;<br>でいいじゃん。と思うだろうけど、<br>なんかこれじゃうまくいかなかった。<br><br>初期化はできた。<br>次に書き出しである。<br><br>sca.cというscaler用の関数の中に、<br>univ_map_read32という関数を書く。<br>これによって書き出す仕様になってる。<br><br>実際には、<br>int ii;<br>int *sc,a=1;<br>const int SCALERCH = 16;<br>int scr[SCALERCH];<br>sc=&amp;a;<br>for(ii=0;ii<scalerch;ii++){<br />univ_map_read32(0x280+ii*4,(long *)(data+BLKSIZE/2-(SCALERCH-ii)*2),SCAN);<br>}<br>univ_map_write32(0x020,sc,SCAN);<br><br>こんな感じ。<br>どういうことかというと、<br>まず、dataという物。これはポインタ。もっと言うと、dataという配列の第一要素(data[0])の先頭のアドレスを表すポインタ。<br>重要なのは、dataはunsigned shortで定義される。つまり2byteが最小単位。<br>BLKSIZEはbyte単位。<br>つまり、univ_map_read32の二番目の引数は、<br>dataの先頭から、BLKSIZE/2個(short単位で)進んだところ、つまり、ブロックの最終部分、さらにそこから、全ch-各ch×2個(short単位)戻ったところに、<br>scalerのbase addressから、0x280+各ch*4(チャネル毎のオフセットは0x4なので)のアドレスに格納された値をコピーする。<br>という意味。<br>わけわかんない？<br>これをすると、<br>dataのお尻から、64byte分、メモリ空間が確保され、そこに、4byteずつ、各チャネルのデータが順番に並ぶ。<br>このforループを抜けると、全チャネルの値をクリアするために、<br>startup.cに書いたのと同じようにuniv_map_write32関数が用意されている。<br><br>基本的には、これだけ。<br><br>最後に読み出し。<br>これはめんどくさいから、プログラムをそのまま乗っける<br>/*******************************/<br>/*analize to XXXX.rdf*/<br>/*read the v1190 output and scaler data*/<br>/*this program must be used in the environment we can use "ROOT"*/<br>/*******************************/<br><br><br>#include <stdio.h><br>#include <string.h><br>#include <unistd.h><br>#include <stdlib.h><br>#include "TApplication.h"<br>#include "/home/gauge/work/ana/H_header/rootheader.h"<br><br>#define BLKSIZE 0x21000<br><br>const int SCALERCH = 16;<br>unsigned short buff[BLKSIZE/2];<br>unsigned int data[BLKSIZE/4];<br>unsigned int scr[SCALERCH];<br>const int MAXCH = 128;<br>// int   4byte<br>// short 2byte<br>// char  1byte<br><br>int main(int argc, char *argv[]){<br>  TApplication theApp("App",&amp;argc,argv);<br><br>  gROOT-&gt;SetStyle("Plain");<br>  gStyle-&gt;SetOptStat("neuioMR");<br>  gStyle-&gt;SetPalette(1);<br>  <br>  FILE *fd;<br>  int mp, sz, datasz, i,ii;<br>  int tdcdata,header;<br>  int trigger=0;<br>  unsigned int tdcCannel;<br>  char filename[20];<br>  char rootname[20];<br>  int dataI;<br>  int edge;<br>  unsigned int sum[SCALERCH] = {0};<br>  int dmanumber=0;<br>  switch (argc) {<br>  case 1:<br>    fprintf(stdout,"<usage> ./vr4 filenumber\n");<br>    fprintf(stdout,"<sample> ./vr4 0000\n ");<br>    exit(1);<br>    break;<br>  case 2:<br>    sprintf(filename,"%s.rdf",argv[1]);<br>    if((fd = fopen(filename, "r")) == NULL){<br>      printf("Can't open %s\n", filename);<br>      exit(1);<br>    }<br>    break;<br>  }<br>  <br>  TNtuple *nt = new TNtuple("nt","TDCdata","N:Edge:Cannel:data");<br>  while(!feof(fd)){<br>    fread(buff, 2, BLKSIZE/2, fd);<br><br>    if(buff[0] != 0) continue; // skip to next block<br><br>    mp = 4;<br>    <br>    while(buff[mp] != 0xffff){<br>      sz = buff[mp] &amp; 0x7fff;<br>      memcpy((char *)data, (char *)(buff+mp+5), (sz-5)*2);<br>      datasz = (sz-5)/2;   // in integer unit<br>      for(i=0;i<datasz;i++){<br />tdcdata=data[i] &amp; 0xf8000000;<br>header=data[i] &amp; 0x40000000;<br>if(header==0x40000000){<br>  trigger++;<br>}<br>if(tdcdata!=0)continue;<br>tdcCannel=((data[i] &amp; 0x07f80000) &gt;&gt; 19);<br>if((tdcCannel &gt;&gt; 7) == 0){<br>  dataI=data[i] &amp; 0x0007ffff;<br>  edge=0; //for rising<br>}<br>else if((tdcCannel &gt;&gt; 7) == 1){<br>  tdcCannel = tdcCannel &amp; 0x0000007f;<br>  dataI=data[i] &amp; 0x0007ffff;<br>  edge=1; //for faling<br>}<br>nt-&gt;Fill(trigger,edge,tdcCannel,dataI);<br>      }<br>      memcpy((char *)scr,(char *)(buff+BLKSIZE/2-(2*SCALERCH)),4*SCALERCH);<br>      for(ii=0;ii<scalerch;ii++){<br />sum[ii] += scr[ii];<br>if(scr[ii]!=0)fprintf(stdout,"src[%d]=%d\n",ii,scr[ii]);<br>      }<br>      dmanumber++;<br>      mp += sz;<br>    }<br>  }<br>  fclose(fd);<br>  sprintf(rootname,"%s.root",argv[1]);<br>  TFile *rootfile = new TFile(rootname,"RECREATE","tdcData");<br>  nt-&gt;Write();<br>  rootfile-&gt;Close();<br>  for(ii=0;ii<scalerch;ii++){<br />    fprintf(stdout,"scaler channel[%d] = %d\n",ii,sum[ii]);<br>  }<br>  fprintf(stdout,"event number = %d\n",trigger);<br>  fprintf(stdout,"dmanumber = %d\n",dmanumber);<br>  return 0;<br>}<br><br>重要なのは、memcpyのところ。<br>まず、scalerのデータ用配列を用意しとく。ここではint scr[SCALERCH];で定義してある。<br>データが格納された部分をsrc配列に詰めていく。<br>memcpyはbyte単位でやり取りするので、<br>memcpy((char *)scr,(char *)(buff+BLKSIZE/2-(2*SCALERCH)),4*SCALERCH);<br>引数一つ目、<br>scr配列の先頭1byte分のアドレス<br>引数二つ目<br>buff:これも配列。fread(buff,2,BLKSIZE/2,fd);で、fdファイルポインタの先頭から、2byteずつ(buffはunsigned shortなので)、BLKSIZE/2(これもshortサイズに合わせてる)個buffの先頭からコピーしている。<br>これはC言語の知識だけど、配列を宣言すると、例えばintだったら、配列の先頭から4byteずつ、配列の要素分のメモリ空間が用意される。<br>つまり、buffの先頭からfreadでコピーすると、各要素が2byteずつ、全部でBLKSIZE/2個、すなわちBLKSIZEバイトのデータが格納される。<br>これとほとんど同じで、<br>buffの先頭から、BLKSIZE/2個(short 単位)行ったところ(データのお尻)から、2*SCALERCH個(これもshort)戻ったところの、1byte(charなので)分のアドレス、という意味になる。<br>引数三つめ<br>4*SCALERCHというのは、scaler用に確保したメモリ空間の大きさ。これはDAQ側で設定している。memcpyはbyte単位で書かないとややこしくなるので、scrがintだから、4をかけて、byteに変換している。<br><br>これをやると、scr配列の各要素に、ch0ならscr[0],ch1ならscr[1]とか、言った感じでデータをこぴーできる。<br><br>はい、<br>長くなったけどこんなところです。<br><br>実はまだ未完成で、scalerからの読み出しの値がなんか変。<br>たぶんこれは、memcpyして、用意した変数にscrの値を足してるんだけど、<br>おそらくその場所がよくない。<br>もともとは、DMA一回につき、scalerのデータもくっつけるつもりだったんだけど、<br>じつはそうなっていなくて、<br>almost fullでTDCのbufferにthresholdを設けて、それを超えたらCPUにinterruptをかけ、DMA転送を行うのだが、<br>DMA一回でbuffer内の全てのデータを送れるというわけではない。<br>一回のDMA転送容量と、その回数を決めてあげることで、buffer内に多くのデータをためても送れるようにする、というのが今後の展開。<br>その中で、scalerの値を見に行くのは、1blockの中で、どこまでデータが来たら、読みに行く、という別のthresholdが用意されているので、<br>DMA一回につき、毎回scalerを読んでるわけじゃない。<br>scalerを読んでる印みたいなものがあれば、<br>ある程度正しく値を持ってこれると思うんだけど、まだよくわかんない。<br><br>それと、DMAの話もうまく行ってない。<br>試しにalmost fullのthresholdを31kword(TDCの定義。ここではlong)ぐらいにして、<br>DMAサイズを適当に1/4ぐらいにして、４回DMAさせる使用にしてみた。<br>そうすると、なんやらおかしくて、<br>うまく転送ができない。<br>TDC buffがthresholdを超えてから、一回目の転送が始まるんだけど、一回目と二回目の転送の時間間隔が異常に大きい。<br>そのため、その時間の間にbuffがいっぱいになって、わけわかんなくなってなぜかネットワークが落ちるという事態にもなった。<br>これはなんか怖くていろいろチャレンジできません。<br>次回は、<br>blockについてるthresholdをめっちゃ小さくして、4096word一回のDMAでblockを使いきる仕様にしてみようかなと。<br>無駄が多いけど。<br><br>そんな感じ。<br><br>とりあえず今日はここまで。<br><br><br><br><br><br><br></sample></usage></stdlib.h></unistd.h></string.h></stdio.h>
]]>
</description>
<link>https://ameblo.jp/mtv-daq-dev/entry-10519520983.html</link>
<pubDate>Tue, 27 Apr 2010 21:14:53 +0900</pubDate>
</item>
<item>
<title>SIS3803</title>
<description>
<![CDATA[  SIS3803とは,<a href="http://struck.de/sis3803.htm">ココ</a>にもある通り、VME規格のSCALERである。<br><br>シグナル総数をカウントして、それを表示してくれる。<br><br><br>写真I<br><br><br><a href="http://stat.ameba.jp/user_images/20100420/21/mtv-daq-dev/28/cb/j/o0272059310504775088.jpg"><img border="0" src="https://stat.ameba.jp/user_images/20100420/21/mtv-daq-dev/28/cb/j/t02200480_0272059310504775088.jpg" alt="Mott Polarimeterのブログ"></a><br><br><br>写真II<br><br><a href="http://stat.ameba.jp/user_images/20100420/22/mtv-daq-dev/ab/86/g/o0700093310504785862.gif"><img border="0" src="https://stat.ameba.jp/user_images/20100420/22/mtv-daq-dev/ab/86/g/t02200293_0700093310504785862.gif" alt="Mott Polarimeterのブログ"></a><br><br><br><br><br>さて、VMIVMEからアクセスするためには、ドライバをインストールした後、SIS3803をVMEクレートに取り付け、<br><br># cmdvme -lr 0x38383800<br>00000000<br><br>と3803のベースアドレスにアクセスする。<br><br>すると、写真IIの一番右のモジュールの左上のランプがチカッと光る。<br>アクセスは出来ているみたい。<br><br>さらにテスト<br><br># cmdvme -lw 0x38383800 0x1    //Uランプが点灯<br># cmdvme -lw 0x38383800 0x100  //Uランプが消灯　　<br><br>アクセス成功だ。<br><br>それでは、実際に簡単な回路を作り測定できるか検証してみる。<br><br>まずinput許可の信号を出さなければいけないが、これは<br><br># cmdvme -lw 0x38383828 1<br><br>と打つと、Sランプがつく。global count enableの状態にしているのだ。最後の3ケタに028を足して、bitを立たせてあげる。<br><br>ちなみにdisableの状態にしたい場合は<br><br># cmdvme -lw 0x3838382C 1<br><br>これでデータ非取得モードになる。ちなみに、enable状態にした状態だと、<br><br># cmdvme -lr 0x38383800<br>00008000<br><br>ステータスコードから参照すると、15Bit目が立っているので、Global Count Enableであると確認できる。<br>これで、1chにclockからはきだされるNIMをさし、1chのデータを呼び出す。address mapによると、ベースアドレス+280が0ch、+2BCが15chなので、1chは0chから4つ後、すなわち+284をすればよい。<br><br># cmdvme -lr 0x38383a84<br>001212c1<br># cmdvme -lr 0x38383a84<br>00122c60<br># cmdvme -lr 0x38383a84<br>001237c8<br># cmdvme -lr 0x38383a84<br>00123f70<br># cmdvme -lr 0x38383a84<br>0012464e<br># cmdvme -lr 0x38383a84<br>00124bc6<br><br>カウント取れてるっぽいね。どういう値を意味するのかはこれから解析する。
]]>
</description>
<link>https://ameblo.jp/mtv-daq-dev/entry-10513581540.html</link>
<pubDate>Tue, 20 Apr 2010 21:30:23 +0900</pubDate>
</item>
<item>
<title>TDC output</title>
<description>
<![CDATA[ v1190aのoutputフォーマットを読み解く。<br>0000000 0001 0000 0000 0000 0000 0000 0000 0000<br>0000020 0000 0000 5552 2d4e 3030 3333 2020 5453<br>0000040 5241 2054 3e3d 3220 3a33 3735 353a 2037<br>0000060 5320 4f54 2050 3e3d 5820 3a58 5858 583a<br>0000100 2058 2020 7250 6e69 2074 3e2d 5820 3a58<br>0000120 5858 583a 2058 3020 2d36 7041 2d72 3031<br>0000140 0000 0000 7274 6769 6567 2072 6564 616c<br>0000160 2079 7531 2073 2020 2020 2020 2020 2020<br>0000200 2020 2020 2020 2020 2020 2020 2020 2020<br>*<br>0000400 2020 2020 0000 0000 0000 0000 0000 0000<br>0000420 0000 0000 0000 0000 0000 0000 0000 0000<br>*<br>0410000 0000 0000 0000 0000 8805 0001 0001 0802<br>0410020 0001 000a 4000 0319 0800 0002 1800 0319<br>0410040 0900 0002 1900 0319 0a00 0002 1a00 0319<br>0410060 0b00 0002 1b00 014a 8400 002a 4000 1d9b<br>0410100 0800 1002 1800 1d9b 0900 1002 1900 1d9b<br>0410120 0a00 1002 1a00 1d9b 0b00 1002 1b00 014a<br>0410140 8400 004a 4000 281d 0800 2002 1800 281d<br>0410160 0900 2002 1900 281d 0a00 2002 1a00 281d<br>0410200 0b00 2002 1b00 014a 8400 006a 4000 329f<br>0410220 0800 3002 1800 329f 0900 3002 1900 329f<br><br><br><br>一行目から<br>*まではコメント文<br>0001で始まるのがヘッダー。<br><br>2020の連続はよくわかんね。<br><br>とりあえず、二個目のアスタリスク以降がデータ。<br>五個目、8805からデータが始まる。<br>8805は、DMAのサイズを表している。<br>でも一番上位のbitは1になるようになっているため、本当のsizeは<br>0805になる。<br>そのあとの0001,0001は順番？だと思う。<br><br>次、0802はセグメント（bbはそう呼ぶ）のサイズ。<br>後ろの0001は順番。<br><br>いよいよ。000a 4000からデータスタート。<br>それでもまずは、TDCのヘッダーが入る。<br>000aと4000。<br>ちなみにこれらは、後ろが上位ビットになっている。<br>つまり<br>0x4000000aが正解。<br>さて、<br>こいつら見にくくね？<br>ってことで、<br><br>0x4000000a　　これがグローバルヘッダー<br>0x0800008b　　これはTDC Header<br>0x18000002    TDC Trailer<br>0x0900008b    TDC Header:上との違いは、TDCチップの番号。全４つ。<br>0x19000002　　一個上のHeaderのTrailer<br>0x0a00008b<br>0x1a000002<br>0x0b00008b<br>0x030032ca    ここがデータ。Headerの後ろにTrailerが来ていない。<br>0x031032ad<br>0x0700333c<br>0x071036ea<br>0x03003373<br>0x070033c6<br>0x03003815<br>0x03003aa3<br>0x1b00000a　　ここにTrailerがあるので、ここまでだとわかる。<br>0x8400024a　　これがGlobal Headerに対する、Trailer。ここまで。<br>0x4000002a　　次のデータ。<br>0x08001b0d<br>0x18001002<br>0x09001b0d<br>0x19001002<br>0x0a001b0d<br>0x1a001002<br>0x0b001b0d<br>0x030032c2<br>0x031032a3<br>0x07003333<br>0x071036e0<br>0x03003368<br>0x070033bc<br>0x030037f6<br>0x03003a9a<br>0x1b00100a<br>0x8400024a<br><br><br>そこで疑問。<br>最初のHeader(TDCのデータより上にあるやつ。8505とか)は、<br>DMAのたびに入る模様。<br>なので、これをscanすることで、DMA一回分のデータ量が分かったりする。<br>じゃぁglobal headerはなんなんだ？<br>これがevent数という解釈なのか？<br>なぞ。<br><br>もうひとつ。<br>現在は、clockをtriggerに入れて、同じ信号をNIM ECLで分けてからTDCにinputしている。<br>一つデータを取っている間は、<br>次のTRIGGERが来てもデータを取らないようになっているのか。<br>また同じchに一つのtime window内に信号が複数来た場合はどうなるのか、後ろは見ないのか。<br><br>たぶん、上の話は、4000がtriggerの区切りになっている気がする。<br>下の話は、v1190.shをみて判断するべきかと。<br><br>今日のところはこんなところで。<br><br>あと、bb scriptを書いとく。<br>生データから、上の0xffffffffとかを表示するスクリプト。<br><br>////////////////////////////////////////////////////////////////////<br><br>#include &lt;stdio.h&gt;<br>#include &lt;string.h&gt;<br>#include &lt;unistd.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>#define BLKSIZE 0x21000<br><br>unsigned short buff[BLKSIZE/2];<br>unsigned int data[BLKSIZE/4];<br><br>// int   4byte<br>// short 2byte<br>// char  1byte<br><br>int main(int argc, char *argv[]){<br>  FILE *fd;<br>  int mp, sz, datasz, i;<br><br>  if((fd = fopen(argv[1], "r")) == NULL){<br>    printf("Can't open %s\n", argv[1]);<br>    exit(1);<br>  }<br><br>  while(!feof(fd)){<br>    fread(buff, 2, BLKSIZE/2, fd);<br><br>    if(buff[0] != 0) continue; // skip to next block<br><br>    mp = 4;<br>    <br>    while(buff[mp] != 0xffff){<br>      sz = buff[mp] &amp; 0x7fff;<br>      printf("evtsize = %d\n", sz);<br>      memcpy((char *)data, (char *)(buff+mp+5), (sz-5)*2);<br>      //buff[mp+3]--buff[mp+sz-1]<br><br>      datasz = (sz-5)/2;   // in integer unit<br>      for(i=0;i<datasz;i++){<br />printf("0x%08x\n", data[i]);<br>      }<br><br><br>      mp += sz;<br>    }<br>    <br><br>  }<br><br><br><br>  fclose(fd);<br><br><br>  return 0;<br>}<br><br>/*<br>  8    8    0    5<br> 1000 1000 0000 0101<br><br>  7    f    f    f<br> 0111 1111 1111 1111<br><br><br> 0000 1000 0000 0101<br> 1111 1111 1111 1111<br><br>*/<br><br>///////////////////////////////////////////////////////////<br><br><br>
]]>
</description>
<link>https://ameblo.jp/mtv-daq-dev/entry-10507745258.html</link>
<pubDate>Tue, 13 Apr 2010 21:36:48 +0900</pubDate>
</item>
<item>
<title>開発ログより</title>
<description>
<![CDATA[ CAEN VME 開発ログ2010年度版<br><br>4/7　理研にて、馬場システムを用いてデータ取得を行った。<br><br>0012.rdf<br>0013.rdf<br>0014.rdf<br>0015.rdf<br>0016.rdf<br>0017.rdf<br>0018.rdf<br>0019.rdf<br>0020.rdf<br>0021.rdf<br>0022.rdf<br>0023.rdf<br>0024.rdf<br>0025.rdf<br>0026.rdf<br>0027.rdf<br>0028.rdf<br>0029.rdf<br>0030.rdf<br>0031.rdf<br>0032.rdf<br>0033.rdf<br>0034.rdf<br>0035.rdf<br>0036.rdf<br>0037.rdf<br>0038.rdf<br>0039.rdf<br><br>rdfはriken data formatの略らしい。でもほんとはv1190Ａのフォーマットになっている。中身を見てみると、<br><br>0000000 0001 0000 0000 0000 0000 0000 0000 0000<br>0000020 0000 0000 5552 2d4e 3030 3333 2020 5453<br>0000040 5241 2054 3e3d 3220 3a33 3735 353a 2037<br>0000060 5320 4f54 2050 3e3d 5820 3a58 5858 583a<br>0000100 2058 2020 7250 6e69 2074 3e2d 5820 3a58<br>0000120 5858 583a 2058 3020 2d36 7041 2d72 3031<br>0000140 0000 0000 7274 6769 6567 2072 6564 616c<br>0000160 2079 7531 2073 2020 2020 2020 2020 2020<br>0000200 2020 2020 2020 2020 2020 2020 2020 2020<br>*<br>0000400 2020 2020 0000 0000 0000 0000 0000 0000<br>0000420 0000 0000 0000 0000 0000 0000 0000 0000<br>*<br>0410000 0000 0000 0000 0000 8805 0001 0001 0802<br>0410020 0001 000a 4000 0319 0800 0002 1800 0319<br>0410040 0900 0002 1900 0319 0a00 0002 1a00 0319<br>0410060 0b00 0002 1b00 014a 8400 002a 4000 1d9b<br>0410100 0800 1002 1800 1d9b 0900 1002 1900 1d9b<br>0410120 0a00 1002 1a00 1d9b 0b00 1002 1b00 014a<br>0410140 8400 004a 4000 281d 0800 2002 1800 281d<br>0410160 0900 2002 1900 281d 0a00 2002 1a00 281d<br>0410200 0b00 2002 1b00 014a 8400 006a 4000 329f<br>0410220 0800 3002 1800 329f 0900 3002 1900 329f<br>0410240 0a00 3002 1a00 329f 0b00 3002 1b00 014a<br>0410260 8400 008a 4000 4d21 0800 4002 1800 4d21<br>0410300 0900 4002 1900 4d21 0a00 4002 1a00 4d21<br>0410320 0b00 4002 1b00 014a 8400 00aa 4000 57a3<br>0410340 0800 5002 1800 57a3 0900 5002 1900 57a3<br>0410360 0a00 5002 1a00 57a3 0b00 5002 1b00 014a<br>0410400 8400 00ca 4000 6225 0800 6002 1800 6225<br>0410420 0900 6002 1900 6225 0a00 6002 1a00 6225<br>0410440 0b00 6002 1b00 014a 8400 00ea 4000 7ca7<br>0410460 0800 7002 1800 7ca7 0900 7002 1900 7ca7<br>0410500 0a00 7002 1a00 7ca7 0b00 7002 1b00 014a<br>0410520 8400 010a 4000 8729 0800 8002 1800 8729<br>0410540 0900 8002 1900 8729 0a00 8002 1a00 8729<br>0410560 0b00 8002 1b00 014a 8400 012a 4000 91ab<br>0410600 0800 9002 1800 91ab 0900 9002 1900 91ab<br>0410620 0a00 9002 1a00 91ab 0b00 9002 1b00 014a<br>0410640 8400 014a 4000 ac2d 0800 a002 1800 ac2d<br>0410660 0900 a002 1900 ac2d 0a00 a002 1a00 ac2d<br>0410700 0b00 a002 1b00 014a 8400 016a 4000 b6af<br>0410720 0800 b002 1800 b6af 0900 b002 1900 b6af<br>0410740 0a00 b002 1a00 b6af 0b00 b002 1b00 014a<br>0410760 8400 018a 4000 c131 0800 c002 1800 c131<br>0411000 0900 c002 1900 c131 0a00 c002 1a00 c131<br>0411020 0b00 c002 1b00 014a 8400 01aa 4000 dbb3<br>0411040 0800 d002 1800 dbb3 0900 d002 1900 dbb3<br>0411060 0a00 d002 1a00 dbb3 0b00 d002 1b00 014a<br>0411100 8400 01ca 4000 e635 0800 e002 1800 e635<br>0411120 0900 e002 1900 e635 0a00 e002 1a00 e635<br>0411140 0b00 e002 1b00 014a 8400 01ea 4000 f0b6<br>0411160 0800 f002 1800 f0b6 0900 f002 1900 f0b6<br>0411200 0a00 f002 1a00 f0b6 0b00 f002 1b00 014a<br>0411220 8400 020a 4000 0b38 0801 0002 1801 0b38<br>0411240 0901 0002 1901 0b38 0a01 0002 1a01 0b38<br>0411260 0b01 0002 1b01 014a 8400 022a 4000 15ba<br>0411300 0801 1002 1801 15ba 0901 1002 1901 15ba<br>0411320 0a01 1002 1a01 15ba 0b01 23f2 0700 1003<br>0411340 1b01 016a 8400 024a 4000 203c 0801 2002<br>0411360 1801 203c 0901 2002 1901 203c 0a01 2002<br>中略<br>0427600 014a 8400 0c4a 4000 2c08 0806 2002 1806<br>0427620 2c08 0906 2002 1906 2c08 0a06 2002 1a06<br>0427640 2c08 0b06 2002 1b06 014a 8400 0c6a 4000<br>0427660 368a 0806 3002 1806 368a 0906 3002 1906<br>0427700 368a 0a06 3002 1a06 368a 0b06 3002 1b06<br>0427720 014a 8400 0c8a 4000 410c 0806 4002 1806<br>0427740 410c 0906 4002 1906 410c 0a06 4002 1a06<br>0427760 410c 0b06 4002 1b06 014a 8400 0caa 4000<br>0430000 5b8e 0806 5002 1806 5b8e 0906 5002 1906<br>0430020 5b8e 0a06 5002 1a06 5b8e 0b06 ffff ffff<br>0430040 0000 0000 0000 0000 0000 0000 0000 0000<br>*<br>1020000 ffff 0000 0000 0000 0000 0000 0000 0000<br>1020020 0000 0000 5552 2d4e 3030 3333 2020 5453<br>1020040 5241 2054 3e3d 3220 3a33 3735 353a 2037<br>1020060 5320 4f54 2050 3e3d 3020 3a39 3030 303a<br>1020100 2030 2020 7250 6e69 2074 3e2d 5820 3a58<br>1020120 5858 583a 2058 3020 2d31 614a 2d6e 3037<br>1020140 0000 0000 7274 6769 6567 2072 6564 616c<br>1020160 2079 7531 2073 2020 2020 2020 2020 2020<br>1020200 2020 2020 2020 2020 2020 2020 2020 2020<br>*<br>1020260 2020 2020 6e65 2064 2020 2020 2020 2020<br>1020300 2020 2020 2020 2020 2020 2020 2020 2020<br>*<br>1020400 2020 2020 0000 0000 0000 0000 0000 0000<br>1020420 0000 0000 0000 0000 0000 0000 0000 0000<br>*<br>1430000<br><br>こうなってる。<br>赤で記しをつけたところが、DMA転送をした印っぽい。<br>その前の000aとかが番号かな？<br>でも、今回はevent by eventじゃないから、あんまりこの数字は意味なさそう。<br><br>↓にv1190フォルダの中身のファイルを書いとく。<br><br><br>Makefile.24<br>Makefile.26<br>babirldrvcaen.c<br>babirldrvcaen.c~<br>babirldrvcaen.h<br>babirldrvcaen.h~<br>bb-camac.h<br>bb-cc77.h<br>bb-k2915.h<br>bb-vme.h<br>bbdaq.c<br>bbmodules.h<br>bbmodules.h.auto<br>bbmodules.h~<br>bbrl.c<br>bbuniverse.h<br>ccnetevt.c<br>clear.c<br>clear.c.auto<br>clear.c~<br>common.h<br>datalist.0407.txt<br>def-advme.h<br>def-cc77.h<br>def-ccnet.h<br>def-k2915.h<br>def-sbs620.h<br>def-univ.h<br>def-v2718.h<br>def-vmemm.h<br>evt.c<br>evt.c.auto<br>evt.c~<br>filelist.txt<br>hddir.txt~<br>hdlist.txt<br>hdlist.txt~<br>iwadaq.c<br>nbbqctrl.h<br>nbbqdrv.c<br>nbbqdrv.c~<br>nbbqdrv.h<br>nbbqdrv.o<br>nbbqio.h<br>rpv130.c<br>rpv130.h<br>runcounter.txt<br>runinfo.txt<br>sca.c<br>sca.c.auto<br>sis3300.c<br>sis3300.h<br>startup.c<br>startup.c.auto<br>startup.c~<br>stop.c<br>stop.c.auto<br>stop.c~<br>univdma.c<br>univfunc.c<br>univfunc.c~<br>v1190.h<br>v1190.sh<br>v1190.sh~<br>v767.c<br>v767.h<br>v775.c<br>v775.h<br>v785.c<br>v785.h<br>v792.c<br>v792.h<br><br>緑のv1190hはv1190aを使う際のセットアップをしている。<br><br>#!/bin/sh<br><br>echo "load v1190 settings ..."<br><br># set geometry<br>/usr/nbbq/bin/cmdvme -ww 0x0000100e 10<br>sleep 1<br><br># Hardware Reset<br>/usr/nbbq/bin/cmdvme -ww 0x00001014 1<br>sleep 0<br><br># Software Reset<br>/usr/nbbq/bin/cmdvme -ww 0x00001016 1<br>sleep 1<br><br># compansation enbale(0x0020)/disable(0x0000)<br># empty evt (0x0008)      : Write global header when there are no data<br># event fifo ena (0x0100) : Can read word count in one event <br># comp. disable + empty evt + event fifo ena = 0x0108<br># comp. enable  + empty evt + event fifo ena = 0x0128<br># comp. enable  + empty evt + event fifo dis = 0x0028<br>#/usr/nbbq/bin/cmdvme -ww 0x00001000 0x0000<br>#/usr/nbbq/bin/cmdvme -ww 0x00001000 0x0128<br>/usr/nbbq/bin/cmdvme -ww 0x00001000 0x0028<br>sleep 0<br><br># Interrupt Level = 1  --&gt; startup<br>/usr/nbbq/bin/cmdvme -ww 0x0000100a 0<br>#sleep 0<br><br># Almost Full Level for the interrupt<br>/usr/nbbq/bin/cmdvme -ww 0x00001022 0<br>#sleep 0<br><br><br># Set Triger Matching Mode<br>/usr/nbbq/bin/cmdvme -qn 0x00000000 0x0000<br>sleep 1<br><br># Set Coutinus strage Mode<br>#/usr/nbbq/bin/cmdvme -qn 0x00000000 0x0100<br>#sleep 1<br><br># Set Window Width (1=25ns, 16=400ns, 40=1000ns, 80=2000ns)<br>/usr/nbbq/bin/cmdvme -qw 0x00000000 0x1000 80<br>sleep 1<br><br># Set Window Offset (-2048 to +40, 1=25ns, -4=-100ns)<br>/usr/nbbq/bin/cmdvme -qw 0x00000000 0x1100 -50<br>sleep 1<br><br># Set Edge Detection (1=trailing, 2=leading, 3=both)<br>/usr/nbbq/bin/cmdvme -qw 0x00000000 0x2200 3<br>sleep 1<br><br># Set Extra Search Margin (1=25ns, default=8)<br>/usr/nbbq/bin/cmdvme -qw 0x00000000 0x1200 8<br>sleep 1<br><br># Set Reject Margin (1=25ns, default=4)<br>/usr/nbbq/bin/cmdvme -qw 0x00000000 0x1300 2<br>sleep 1<br><br># Enable Subtraction of Trigger Time<br>/usr/nbbq/bin/cmdvme -qn 0x00000000 0x1400<br>sleep 1<br><br>## set maximum number of hits per event<br>#/usr/nbbq/bin/cmdvme -qw 0x00000000 0x3300 0x0111<br>#sleep 1<br><br># disable TDC Header, Trailer<br>#/usr/nbbq/bin/cmdvme -qn 0x00000000 0x0000<br>#sleep 1<br><br># enable TDC Header, Trailer<br>#/usr/nbbq/bin/cmdvme -qn 0x00000000 0x3000<br>#sleep 0<br><br>ところどころにsleepがはいっているのは、何かをセットアップした際に時間を置いた方がいいため。<br>これは馬場さんの経験則によりsleepが入っている。<br>理解する必要あり。<br><br>ファイルリストの赤文字は、ＤＡＱシステムの大事な部分。<br>modulesが各設定、startupが開始、evtがdma転送の部分。<br>この辺はまた後日記述予定。<br>
]]>
</description>
<link>https://ameblo.jp/mtv-daq-dev/entry-10502914945.html</link>
<pubDate>Thu, 08 Apr 2010 02:40:32 +0900</pubDate>
</item>
<item>
<title>test</title>
<description>
<![CDATA[ 本日より、<br>CAEN VME DAQ開発ログをブログにて付けていこうと思います、。<br><br>よろしくお願いいたします。
]]>
</description>
<link>https://ameblo.jp/mtv-daq-dev/entry-10502636250.html</link>
<pubDate>Wed, 07 Apr 2010 21:11:54 +0900</pubDate>
</item>
</channel>
</rss>
