From: hades Date: Sun, 5 Sep 1999 11:31:37 +0000 (+0000) Subject: Readout Crate ht99 beam time X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=39d4cbb88bb5c7c7ff35f1f35143a439b221e739;p=daqdata.git Readout Crate ht99 beam time --- diff --git a/hadaq/hwtof.c b/hadaq/hwtof.c index c02c4bd..037b19d 100644 --- a/hadaq/hwtof.c +++ b/hadaq/hwtof.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.5 1999-09-02 12:38:03 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtof.c,v 1.6 1999-09-05 11:31:37 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -10,6 +10,9 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had #include "param.h" #include "subevt.h" +#include "hwdtu.h" +#include "hwsis3801.h" +#include "hwv488.h" #include "hwv775.h" #include "hwv878.h" @@ -20,13 +23,19 @@ struct HardwareS { #include "hardware.h" -#define NV775S 1 -#define NV878S 1 +#define NV775S 2 +#define NV878S 4 typedef struct ModulesS { + HwDtu *dtu; + HwSis3801 *sis3801; + HwV488 *v556; + HwV488 *v488; HwV775 *v775[NV775S]; HwV878 *v878[NV878S]; -} Modules; +} + +Modules; size_t Hardware_maxSubEvtSize(const Hardware *my) { @@ -42,6 +51,10 @@ Hardware *newHardware(void) { Hardware *my; Param paramS, *param = ¶mS; + HwDtu *dtu; + HwSis3801 *sis3801; + HwV488 *v556; + HwV488 *v488; HwV775 *v775[NV775S]; HwV878 *v878[NV878S]; int i; @@ -55,8 +68,37 @@ Hardware *newHardware(void) my->maxSubEvtSize = SubEvt_hdrSize() + (NV775S * 34 * sizeof(UInt4)) - + (NV878S * 34 * sizeof(UInt4)); + + (NV878S * 34 * sizeof(UInt4)) + + (9 * sizeof(UInt2)) + + (9 * sizeof(UInt2)) + + ((1 + 2 * 32) * sizeof(UInt2)); + + dtu = allocMem(sizeof(HwDtu)); + if (0 > conHwDtu(dtu, "dtu", param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + ((Modules *) my->specific)->dtu = dtu; + + sis3801 = allocMem(sizeof(HwSis3801)); + if (0 > conHwSis3801(sis3801, "scaler0", param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + ((Modules *) my->specific)->sis3801 = sis3801; + v556 = allocMem(sizeof(HwV488)); + if (0 > conHwV488(v556, "adc0", param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + ((Modules *) my->specific)->v556 = v556; + v488 = allocMem(sizeof(HwV488)); + if (0 > conHwV488(v488, "tdc8", param)) { + msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + ((Modules *) my->specific)->v488 = v488; for (i = 0; i < NV775S; i++) { char buf[16]; @@ -80,7 +122,6 @@ Hardware *newHardware(void) ((Modules *) my->specific)->v878[i] = v878[i]; } - desParam(param); return my; } @@ -88,6 +129,10 @@ Hardware *newHardware(void) void deleteHardware(Hardware *my) { int i; + HwDtu *dtu = ((Modules *) my->specific)->dtu; + HwSis3801 *sis3801 = ((Modules *) my->specific)->sis3801; + HwV488 *v556 = ((Modules *) my->specific)->v556; + HwV488 *v488 = ((Modules *) my->specific)->v488; HwV775 **v775 = ((Modules *) my->specific)->v775; HwV878 **v878 = ((Modules *) my->specific)->v878; @@ -99,43 +144,112 @@ void deleteHardware(Hardware *my) desHwV775(v775[i]); freeMem(v775[i]); } + desHwV488(v488); + freeMem(v488); + desHwV488(v556); + freeMem(v556); + desHwSis3801(sis3801); + freeMem(sis3801); + desHwDtu(dtu); + freeMem(dtu); freeMem(my); } void Hardware_waitForTrigger(const Hardware *my, void *subEvt) { - HwV775 **v775 = ((Modules *) my->specific)->v775; + HwDtu *dtu = ((Modules *) my->specific)->dtu; + static int nextId = SubEvtId_trigCode; + static int doReadOut; static UInt1 trigTag = 0; static unsigned long trigNr = 0; - while (HwV775_isEmpty(v775[0])) { + switch (nextId) { + case SubEvtId_trigCode: + do { + while (HwDtu_isEmpty(dtu)) { #if 1 - struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 020000000; - nanosleep(t, NULL); + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 020000000; + nanosleep(t, NULL); #endif + } + HwDtu_read(dtu); + msglog(LOG_DEBUG, "Dtu: tag: 0x%02x, code: 0x%02x\n", dtu->trigTag, dtu->trigCode); + switch (dtu->trigCode) { + case 0x02: + case 0x03: + trigTag = dtu->trigTag; + doReadOut = 0; + break; + default: + doReadOut = 1; + break; + } + } while (!doReadOut); + SubEvt_setSize(subEvt, SubEvt_hdrSize()); + SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); + SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag); + SubEvt_setId(subEvt, SubEvtId_trigCode); + nextId = SubEvtId_trigInfo; + break; + case SubEvtId_trigInfo: + SubEvt_setSize(subEvt, SubEvt_hdrSize()); + SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData); + SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag); + SubEvt_setId(subEvt, SubEvtId_trigInfo); + nextId = SubEvtId_tofTest; + break; + case SubEvtId_tofTest: + SubEvt_setSize(subEvt, SubEvt_hdrSize()); + SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); + SubEvt_setTrigNr(subEvt, trigNr << 8 | trigTag); + SubEvt_setId(subEvt, SubEvtId_tofTest); + nextId = SubEvtId_trigCode; + trigTag = dtu->trigTag; + trigNr++; + break; } - SubEvt_setSize(subEvt, SubEvt_hdrSize()); - SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); - SubEvt_setTrigNr(subEvt, trigNr << 24 | trigTag); - SubEvt_setId(subEvt, SubEvtId_tofTest); +} + +static void readoutDummy(void *subEvt) +{ + UInt4 *data = SubEvt_data(subEvt); + UInt4 *first = data; - trigTag++; - trigNr++; + *data++ = 0x01; + + SubEvt_setSize(subEvt, SubEvt_size(subEvt) + sizeof(UInt4) * (data - first)); } + void Hardware_readout(const Hardware *my, void *subEvt) { int i; + HwDtu *dtu = ((Modules *) my->specific)->dtu; + HwSis3801 *sis3801 = ((Modules *) my->specific)->sis3801; + HwV488 *v556 = ((Modules *) my->specific)->v556; + HwV488 *v488 = ((Modules *) my->specific)->v488; HwV775 **v775 = ((Modules *) my->specific)->v775; HwV878 **v878 = ((Modules *) my->specific)->v878; - for (i = 0; i < NV775S; i++) { - HwV775_readData(v775[i], subEvt); - } - for (i = 0; i < NV878S; i++) { - HwV878_readData(v878[i], subEvt); + switch (SubEvt_id(subEvt)) { + case SubEvtId_trigCode: + readoutDummy(subEvt); + break; + case SubEvtId_trigInfo: + HwV488_readData(v556, subEvt); + HwV488_readData(v488, subEvt); + HwSis3801_readData(sis3801, subEvt); + break; + case SubEvtId_tofTest: + for (i = 0; i < NV775S; i++) { + HwV775_readData(v775[i], subEvt); + } + for (i = 0; i < NV878S; i++) { + HwV878_readData(v878[i], subEvt); + } + break; } } diff --git a/hadaq/hwv488.c b/hadaq/hwv488.c index 349d373..09c1588 100644 --- a/hadaq/hwv488.c +++ b/hadaq/hwv488.c @@ -1,5 +1,4 @@ -indent: Standard input: 93: Error:Stuff missing from end of file. -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.1 1999-09-02 11:20:09 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv488.c,v 1.2 1999-09-05 11:31:55 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -50,10 +49,13 @@ void desHwV488(HwV488 * my) freeMem(my->lvme); } -int HwV488_read(HwV488 * my, void *subEvt) +int HwV488_isEmpty(HwV488 *my) { + return !LVme_tstBitW(my->lvme, V488_CTRL_REG, 14); +} + +int HwV488_readData(HwV488 * my, void *subEvt) { UInt2 *data = SubEvt_end(subEvt); - UInt2 *first = data; UInt2 hdr; int nWords; UInt1 trigTag; @@ -68,17 +70,19 @@ int HwV488_read(HwV488 * my, void *subEvt) msglog(LOG_DEBUG, "V488 First word is header: 0x%04x\n", hdr); } +#if 0 trigTag = hdr & 0xff; if (trigTag != (SubEvt_trigNr(subEvt) & 0xff)) { msglog(LOG_EMERG, "%s trigNr mismatch: 0x%08x != 0x%02x \n", - v488->name, SubEvt_trigNr(subEvt), trigTag); + my->name, SubEvt_trigNr(subEvt), trigTag); } +#endif nWords = (hdr >> 12 & 0x07) + 1; while (--nWords >= 0) { *data++ = LVme_getW(my->lvme, V488_OUT_BUF); } - SubEvt_setSize(subEvt, SubEvt_size(subEvt) + (char *) data - (char *) first); - return 0; } + SubEvt_setSize(subEvt, (char *) data - (char *) subEvt); + return 0; } diff --git a/hadaq/hwv488.h b/hadaq/hwv488.h index 221096a..2635318 100644 --- a/hadaq/hwv488.h +++ b/hadaq/hwv488.h @@ -12,11 +12,9 @@ typedef struct HwV488S { unsigned long trigNr; } HwV488; -#define V488_NCHANNELS 32 - #define V488_OUT_BUF 0x18 -#define V488_STAT_REG 0x1a -#define V488_RANGE_SET 0x14 +#define V488_CTRL_REG 0x1a +#define V488_RANGE 0x14 #define V488_THRH 0x12 #define V488_THRL 0x10 #define V488_RESET 0x1c @@ -28,6 +26,6 @@ int conHwV488(HwV488 *my, const char *name, const Param *param); void desHwV488(HwV488 *my); int HwV488_isEmpty(HwV488 *my); -int HwV488_readSubEvt(HwV488 *my, void *subEvt); +int HwV488_readData(HwV488 *my, void *subEvt); #endif diff --git a/hadaq/hwv775.c b/hadaq/hwv775.c index 374a364..87b521f 100644 --- a/hadaq/hwv775.c +++ b/hadaq/hwv775.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv775.c,v 1.6 1999-09-02 12:38:03 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv775.c,v 1.7 1999-09-05 11:32:17 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -32,11 +32,10 @@ int conHwV775(HwV775 *my, const char *name, const Param *param) msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); return -1; } - LVme_setW(my->lvme, V775_BIT_SET_1, 0x0080); - LVme_setW(my->lvme, V775_BIT_CLR_1, 0x0080); + LVme_setW(my->lvme, V775_RESET, 0); LVme_setW(my->lvme, V775_BIT_SET_2, 0x0004); LVme_setW(my->lvme, V775_BIT_CLR_2, 0x0004); - LVme_setW(my->lvme, V775_CTRL_REG_2, 0x0002); + LVme_setW(my->lvme, V775_CTRL_REG_2, 0x0003); LVme_setW(my->lvme, V775_CRATE_REG, 0x0000); LVme_setW(my->lvme, V775_RANGE_SET, Param_getVal(param, my->name, "range")); LVme_setW(my->lvme, V775_VSET, Param_getVal(param, my->name, "vset")); @@ -95,6 +94,6 @@ int HwV775_readData(HwV775 *my, void *subEvt) msglog(LOG_EMERG, "%s trigNr mismatch: 0x%08x != 0x%02x \n", my->name, SubEvt_trigNr(subEvt), trigTag); } - SubEvt_setSize(subEvt, (char *) data - (char *) subevt); + SubEvt_setSize(subEvt, (char *) data - (char *) subEvt); return 0; } diff --git a/hadaq/hwv775.h b/hadaq/hwv775.h index 3778517..474a411 100644 --- a/hadaq/hwv775.h +++ b/hadaq/hwv775.h @@ -19,6 +19,7 @@ typedef struct HwV775S { #define V775_BIT_CLR_1 0x08 #define V775_STAT_REG_1 0x0e #define V775_CTRL_REG_1 0x10 +#define V775_RESET 0x18 #define V775_CTRL_REG_2 0x20 #define V775_STAT_REG_2 0x22 #define V775_RANGE_SET 0x2e diff --git a/hadaq/hwv878.c b/hadaq/hwv878.c index d3af519..f1f4c5a 100644 --- a/hadaq/hwv878.c +++ b/hadaq/hwv878.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv878.c,v 1.4 1999-09-02 12:38:03 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwv878.c,v 1.5 1999-09-05 11:32:22 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -36,10 +36,13 @@ int conHwV878(HwV878 *my, const char *name, const Param *param) LVme_setW(my->lvme, V878_BIT_CLR_1, 0x0080); LVme_setW(my->lvme, V878_BIT_SET_2, 0x0004); LVme_setW(my->lvme, V878_BIT_CLR_2, 0x0004); - LVme_setW(my->lvme, V878_BIT_SET_2, 0x8800); + LVme_setW(my->lvme, V878_BIT_SET_2, 0x9800); + LVme_setW(my->lvme, V878_BIT_CLR_2, 0x4000); LVme_setW(my->lvme, V878_CRATE_REG, 0x0000); + LVme_setW(my->lvme, V878_FCLR_WIN, Param_getVal(param, my->name, "fclr_win")); LVme_setW(my->lvme, V878_VSET, Param_getVal(param, my->name, "vset")); LVme_setW(my->lvme, V878_VOFF, Param_getVal(param, my->name, "voff")); + LVme_setW(my->lvme, V878_CLR_TIME, Param_getVal(param, my->name, "clr_time")); for (i = 0; i < V878_NCHANNELS; i++) { char buf[16]; @@ -94,6 +97,6 @@ int HwV878_readData(HwV878 *my, void *subEvt) msglog(LOG_EMERG, "%s trigNr mismatch: 0x%08x != 0x%02x \n", my->name, SubEvt_trigNr(subEvt), trigTag); } - SubEvt_setSize(subEvt, (char *) data - (char *) subevt); + SubEvt_setSize(subEvt, (char *) data - (char *) subEvt); return 0; } diff --git a/hadaq/hwv878.h b/hadaq/hwv878.h index 69d14cf..97b0067 100644 --- a/hadaq/hwv878.h +++ b/hadaq/hwv878.h @@ -19,11 +19,14 @@ typedef struct HwV878S { #define V878_BIT_CLR_1 0x1008 #define V878_STAT_REG_1 0x100e #define V878_CTRL_REG_1 0x1010 +#define V878_STAT_REG_2 0x1022 +#define V878_FCLR_WIN 0x102E #define V878_BIT_SET_2 0x1032 #define V878_BIT_CLR_2 0x1034 #define V878_CRATE_REG 0x103c #define V878_VSET 0x1060 #define V878_VOFF 0x1062 +#define V878_CLR_TIME 0x1066 #define V878_THRESH 0x1080 diff --git a/hadaq/param.tcl b/hadaq/param.tcl index 85cda89..1a44afc 100644 --- a/hadaq/param.tcl +++ b/hadaq/param.tcl @@ -1,9 +1,8 @@ set soft(size) 1024 -set dtu0(cardbase) 1148190720 ;# 0x44700000 -set dtu0(deadtime) 10 +set dtu(cardbase) 0x44500000 -set tdc0(cardbase) 3992977408 ;# 0xee000000 +set tdc0(cardbase) 0x22020000 set tdc0(threshold00) 0 set tdc0(threshold01) 0 set tdc0(threshold02) 0 @@ -36,11 +35,11 @@ set tdc0(threshold28) 0 set tdc0(threshold29) 0 set tdc0(threshold30) 0 set tdc0(threshold31) 0 -set tdc0(range) 255 -set tdc0(vset) 254 +set tdc0(range) 254 +set tdc0(vset) 255 set tdc0(voff) 0 -set tdc1(cardbase) 3993108480 ;# 0xee000000 +set tdc1(cardbase) 0x22040000 set tdc1(threshold00) 0 set tdc1(threshold01) 0 set tdc1(threshold02) 0 @@ -73,8 +72,8 @@ set tdc1(threshold28) 0 set tdc1(threshold29) 0 set tdc1(threshold30) 0 set tdc1(threshold31) 0 -set tdc1(range) 255 -set tdc1(vset) 254 +set tdc1(range) 254 +set tdc1(vset) 255 set tdc1(voff) 0 set tdc2(cardbase) 3993239552 ;# 0xee000000 @@ -151,7 +150,7 @@ set tdc3(range) 255 set tdc3(vset) 254 set tdc3(voff) 0 -set tdc4(cardbase) 3993370624 ;# 0xee000000 +set tdc4(cardbase) 0xdd000000 set tdc4(threshold00) 0 set tdc4(threshold01) 0 set tdc4(threshold02) 0 @@ -184,10 +183,12 @@ set tdc4(threshold28) 0 set tdc4(threshold29) 0 set tdc4(threshold30) 0 set tdc4(threshold31) 0 -set tdc4(vset) 254 +set tdc4(vset) 148 set tdc4(voff) 0 +set tdc4(fclr_win) 254 +set tdc4(clr_time) 0x8085 -set tdc5(cardbase) 3993370624 ;# 0xee000000 +set tdc5(cardbase) 0xdd020000 set tdc5(threshold00) 0 set tdc5(threshold01) 0 set tdc5(threshold02) 0 @@ -220,10 +221,12 @@ set tdc5(threshold28) 0 set tdc5(threshold29) 0 set tdc5(threshold30) 0 set tdc5(threshold31) 0 -set tdc5(vset) 254 +set tdc5(vset) 148 set tdc5(voff) 0 +set tdc5(fclr_win) 254 +set tdc5(clr_time) 0x8085 -set tdc6(cardbase) 3993370624 ;# 0xee000000 +set tdc6(cardbase) 0xdd040000 set tdc6(threshold00) 0 set tdc6(threshold01) 0 set tdc6(threshold02) 0 @@ -256,10 +259,12 @@ set tdc6(threshold28) 0 set tdc6(threshold29) 0 set tdc6(threshold30) 0 set tdc6(threshold31) 0 -set tdc6(vset) 254 +set tdc6(vset) 148 set tdc6(voff) 0 +set tdc6(fclr_win) 254 +set tdc6(clr_time) 0x8085 -set tdc7(cardbase) 3993370624 ;# 0xee000000 +set tdc7(cardbase) 0xdd060000 set tdc7(threshold00) 0 set tdc7(threshold01) 0 set tdc7(threshold02) 0 @@ -292,15 +297,21 @@ set tdc7(threshold28) 0 set tdc7(threshold29) 0 set tdc7(threshold30) 0 set tdc7(threshold31) 0 -set tdc7(vset) 254 +set tdc7(vset) 148 set tdc7(voff) 0 +set tdc7(fclr_win) 254 +set tdc7(clr_time) 0x8085 -set tdc8(cardbase) 2097408 ;# 0x200100 -set tdc8(lowThreshold) 1 -set tdc8(highThreshold) 198 +set tdc8(cardbase) 0x200000 +set tdc8(ctrl) 0x00ff +set tdc8(thrl) 1 +set tdc8(thrh) 198 set tdc8(range) 192 ;# 0 = 90ns, 224 = 770ns -set adc0(cardbase) 0 ;# 0 -set adc0(lowThreshold) 8 -set adc0(highThreshold) 198 +set adc0(cardbase) 0x000000 +set adc0(ctrl) 0x00ff +set adc0(thrl) 8 +set adc0(thrh) 198 set adc0(delay) 0 + +set scaler0(cardbase) 0xa0000000 diff --git a/hadaq/startacq b/hadaq/startacq index 3e33891..872a756 100644 --- a/hadaq/startacq +++ b/hadaq/startacq @@ -1,10 +1,10 @@ -#!/usr/bin/sh +: ./daq_evtbuild -p -1 -s 3 -v notice & echo $! >evtbuild.pid sleep 1; ./daq_readout -p -2 -v notice & echo $! >readout.pid sleep 1; -./daq_ctrlctu 0 & +./daq_ctrlctu -v notice & echo $! >ctrlctu.pid exit 0 diff --git a/hadaq/stopacq b/hadaq/stopacq index fb213bb..e9ec51b 100644 --- a/hadaq/stopacq +++ b/hadaq/stopacq @@ -1,8 +1,11 @@ -#!/usr/bin/sh +: kill $(cat ctrlctu.pid) rm ctrlctu.pid +sleep 1 +sleep 1 kill $(cat readout.pid) rm readout.pid +sleep 1 kill $(cat evtbuild.pid) rm evtbuild.pid exit 0