Difference between revisions of "CAEN VX1190A TDC"
Jump to navigation
Jump to search
| Line 60: | Line 60: | ||
</pre> | </pre> | ||
| − | + | ===TDC readout List V1=== | |
| + | |||
| + | <pre> | ||
| + | |||
| + | # | ||
| + | # General User readout list | ||
| + | # | ||
| + | # David Abbott, TJNAF 2000 | ||
| + | |||
| + | readout list GEN_USER | ||
| + | maximum 1024,512 | ||
| + | general readout | ||
| + | |||
| + | # A16 Address for SIS3610 Module | ||
| + | const TRIG_ADDR=0x3800 | ||
| + | |||
| + | # Address for TDC CAEN 1190 | ||
| + | const NC1190 = 1 | ||
| + | const C1190_ADDR = 0x210000 | ||
| + | const C1190_OFFSET = 0x10000 | ||
| + | # Maximum number of 32bit words from C1190 | ||
| + | const C1190_MAX_DATA = 128 | ||
| + | const C1190_BLOCK_READ = 1 | ||
| + | # Note that C1190_ADDR must be A32 for 2eSST, A24 okay for BLT/MBLT | ||
| + | |||
| + | extern int bigendian_out; | ||
| + | |||
| + | begin download | ||
| + | |||
| + | variable res, i | ||
| + | |||
| + | vmeOpenDefaultWindows(); | ||
| + | s3610Init(TRIG_ADDR,0,0); | ||
| + | |||
| + | # When sending to a Linux Host set bigendian_out = 0 | ||
| + | bigendian_out = 1; | ||
| + | |||
| + | log inform "Initializing TDC 1190" | ||
| + | |||
| + | |||
| + | # SETUP caen1190 | ||
| + | %% | ||
| + | tdc1190Init(C1190_ADDR,C1190_OFFSET,NC1190,1); | ||
| + | tdc1190SetTriggerMatchingMode(0); | ||
| + | tdc1190SetEdgeResolution(0,100); | ||
| + | tdc1190EventFifo(0,0); /* Must be enabled(disabled) for Linked List (direct) DMA */ | ||
| + | tdc1190SetBLTEventNumber(0,C1190_BLOCK_READ); | ||
| + | tdc1190BusError(0,C1190_BLOCK_READ); /* 1: BERR/2eTERM for block reads (DMA), 0 for SCT */ | ||
| + | /* tdc1190SetWindowWidth(0,51176); */ | ||
| + | /* tdc1190SetWindowOffset(0,-800001); */ | ||
| + | |||
| + | %% | ||
| + | |||
| + | |||
| + | |||
| + | log inform "User Download Executed" | ||
| + | |||
| + | end download | ||
| + | |||
| + | begin prestart | ||
| + | |||
| + | variable jj, adc_id | ||
| + | |||
| + | log inform "Entering User Prestart" | ||
| + | |||
| + | init trig source GEN | ||
| + | link async trig source GEN 1 to usrtrig and usrtrig_done | ||
| + | event type 1 then read GEN 1 | ||
| + | |||
| + | %% | ||
| + | tdc1190Status(0); | ||
| + | %% | ||
| + | |||
| + | log inform "User Prestart Executed" | ||
| + | |||
| + | end prestart | ||
| + | |||
| + | begin end | ||
| + | |||
| + | CDODISABLE(GEN,1,1); | ||
| + | |||
| + | log inform "User End Executed" | ||
| + | |||
| + | end end | ||
| + | |||
| + | begin pause | ||
| + | |||
| + | CDODISABLE(GEN,1,1); | ||
| + | |||
| + | log inform "User Pause Executed" | ||
| + | |||
| + | end pause | ||
| + | begin go | ||
| + | |||
| + | log inform "Entering User Go" | ||
| + | |||
| + | CDOENABLE(GEN,1,1); | ||
| + | |||
| + | end go | ||
| + | |||
| + | begin trigger usrtrig | ||
| + | |||
| + | variable ii, event_ty, event_no, datascan, imod, nwrds | ||
| + | variable evStored | ||
| + | |||
| + | rol->dabufp = (long *) 0; | ||
| + | open event type EVTYPE of BT_UI4 | ||
| + | |||
| + | %% | ||
| + | /* Check for valid data here */ | ||
| + | for(ii=0;ii<100;ii++) | ||
| + | { | ||
| + | datascan = tdc1190Dready(0); | ||
| + | if (datascan>0) | ||
| + | { | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if(datascan>0) | ||
| + | { | ||
| + | |||
| + | // Get the TDC data from all modules... rflag=1 block read, 0 for SCT | ||
| + | for(imod=0;imod<1;imod++) | ||
| + | { | ||
| + | nwrds = tdc1190ReadBlock(imod,rol->dabufp,C1190_MAX_DATA,C1190_BLOCK_READ); | ||
| + | if(nwrds < 0) | ||
| + | { | ||
| + | logMsg("ERROR: in transfer (event = %d), status = 0x%x\n", | ||
| + | event_no,nwrds); | ||
| + | *rol->dabufp++ = 0xda000bad; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | rol->dabufp += nwrds; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | evStored = tdc1190GetEventStored(0); | ||
| + | logMsg("ERROR: Data not ready in event %d evStored = %d\n",event_no,evStored); | ||
| + | *rol->dabufp++ = 0xda000bad; | ||
| + | } | ||
| + | |||
| + | %% | ||
| + | |||
| + | close event | ||
| + | |||
| + | end trigger | ||
| + | |||
| + | begin done usrtrig | ||
| + | |||
| + | end done | ||
| + | |||
| + | begin done | ||
| + | # Re-enable Trigger Source here | ||
| + | s3610IntAck(1); | ||
| + | |||
| + | end done | ||
| + | |||
| + | begin status | ||
| + | |||
| + | end status | ||
| + | |||
| + | |||
| + | |||
| + | </pre> | ||
[[VME_modules]] | [[VME_modules]] | ||
Revision as of 00:06, 6 October 2012
CAEN VX1190A multihit TDC, 96 channels
User Manual
File:VX1190A UserManualRev13.pdf
Addressing
From the picture and the above diagram it looks like the module is at the following settings
<bits 19-16>=0x01
<bits 23-20>=0x02
<bits 27-24>=0x08
<bits 31-29>=0x00
ROL initializing
# Address for TDC CAEN 1190
const NC1190 = 1
const C1190_ADDR = 0x210000
const C1190_OFFSET = 0x10000
# Maximum number of 32bit words from C1190
const C1190_MAX_DATA = 128
const C1190_BLOCK_READ = 1
# Note that C1190_ADDR must be A32 for 2eSST, A24 okay for BLT/MBLT
tdc1190Init(C1190_ADDR,C1190_OFFSET,NC1190,1);
tdc1190SetTriggerMatchingMode(i);
tdc1190SetEdgeResolution(i,100);
tdc1190EventFifo(i,0); /* Must be enabled(disabled) for Linked List (direct) DMA */
tdc1190SetBLTEventNumber(i,C1190_BLOCK_READ);
output from ROC_CODA when after download
Initialized TDC ID 0 at address 0xa6b79000 tdc1190SetEdgeResolution(0): Set Edge Resolution to 100 ps
Errors
invalid event pointer
tdc1190ReadBlock: ERROR in DMA transfer Initialization 0xffffffff jlabgefDmaSend: ERROR: the_event pointer is invalid!
TDC readout List V1
#
# General User readout list
#
# David Abbott, TJNAF 2000
readout list GEN_USER
maximum 1024,512
general readout
# A16 Address for SIS3610 Module
const TRIG_ADDR=0x3800
# Address for TDC CAEN 1190
const NC1190 = 1
const C1190_ADDR = 0x210000
const C1190_OFFSET = 0x10000
# Maximum number of 32bit words from C1190
const C1190_MAX_DATA = 128
const C1190_BLOCK_READ = 1
# Note that C1190_ADDR must be A32 for 2eSST, A24 okay for BLT/MBLT
extern int bigendian_out;
begin download
variable res, i
vmeOpenDefaultWindows();
s3610Init(TRIG_ADDR,0,0);
# When sending to a Linux Host set bigendian_out = 0
bigendian_out = 1;
log inform "Initializing TDC 1190"
# SETUP caen1190
%%
tdc1190Init(C1190_ADDR,C1190_OFFSET,NC1190,1);
tdc1190SetTriggerMatchingMode(0);
tdc1190SetEdgeResolution(0,100);
tdc1190EventFifo(0,0); /* Must be enabled(disabled) for Linked List (direct) DMA */
tdc1190SetBLTEventNumber(0,C1190_BLOCK_READ);
tdc1190BusError(0,C1190_BLOCK_READ); /* 1: BERR/2eTERM for block reads (DMA), 0 for SCT */
/* tdc1190SetWindowWidth(0,51176); */
/* tdc1190SetWindowOffset(0,-800001); */
%%
log inform "User Download Executed"
end download
begin prestart
variable jj, adc_id
log inform "Entering User Prestart"
init trig source GEN
link async trig source GEN 1 to usrtrig and usrtrig_done
event type 1 then read GEN 1
%%
tdc1190Status(0);
%%
log inform "User Prestart Executed"
end prestart
begin end
CDODISABLE(GEN,1,1);
log inform "User End Executed"
end end
begin pause
CDODISABLE(GEN,1,1);
log inform "User Pause Executed"
end pause
begin go
log inform "Entering User Go"
CDOENABLE(GEN,1,1);
end go
begin trigger usrtrig
variable ii, event_ty, event_no, datascan, imod, nwrds
variable evStored
rol->dabufp = (long *) 0;
open event type EVTYPE of BT_UI4
%%
/* Check for valid data here */
for(ii=0;ii<100;ii++)
{
datascan = tdc1190Dready(0);
if (datascan>0)
{
break;
}
}
if(datascan>0)
{
// Get the TDC data from all modules... rflag=1 block read, 0 for SCT
for(imod=0;imod<1;imod++)
{
nwrds = tdc1190ReadBlock(imod,rol->dabufp,C1190_MAX_DATA,C1190_BLOCK_READ);
if(nwrds < 0)
{
logMsg("ERROR: in transfer (event = %d), status = 0x%x\n",
event_no,nwrds);
*rol->dabufp++ = 0xda000bad;
}
else
{
rol->dabufp += nwrds;
}
}
}
else
{
evStored = tdc1190GetEventStored(0);
logMsg("ERROR: Data not ready in event %d evStored = %d\n",event_no,evStored);
*rol->dabufp++ = 0xda000bad;
}
%%
close event
end trigger
begin done usrtrig
end done
begin done
# Re-enable Trigger Source here
s3610IntAck(1);
end done
begin status
end status