From dab756b85d8ead5e3404cb01c86d94affe851095 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 11 Apr 2001 13:13:54 +0000 Subject: [PATCH] *** empty log message *** --- hadaq/hwtrig.c | 83 ++++++++++++++++++++++++++++++++++++++++++------- hadaq/makeenv | 2 +- hadaq/param.tcl | 2 +- 3 files changed, 73 insertions(+), 14 deletions(-) diff --git a/hadaq/hwtrig.c b/hadaq/hwtrig.c index a21c228..e49090d 100644 --- a/hadaq/hwtrig.c +++ b/hadaq/hwtrig.c @@ -1,14 +1,19 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtrig.c,v 6.12 2001-04-11 10:56:05 hades Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwtrig.c,v 6.13 2001-04-11 13:13:54 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include +#include +#include #include +#include #include #include "subevt.h" -#include +#include "hwtip.h" + +#define NCRATES 3 /* Number of TOF crates */ #define MU_EVT_COUNT 0x0e8014UL #define MU_FIFO 0x0000UL @@ -20,6 +25,7 @@ struct HardwareS { LVme *lvme6; LVme_L evtCount; LVme_L old_evtCount; + HwTip *tip; size_t maxSubEvtSize; }; @@ -45,7 +51,8 @@ Hardware *newHardware(void) Param *param; my = allocMem(sizeof(Hardware)); - my->maxSubEvtSize = 3 * SubEvt_hdrSize() + 10 * sizeof(UInt4); + my->maxSubEvtSize = (SubEvt_hdrSize() + 2 * 500 * sizeof(UInt4)) /* MU */ + + (SubEvt_hdrSize() + (NCRATES * 620 * sizeof(UInt4))); /* CONC */ my->evtCount = 0; my->old_evtCount = 0; @@ -59,8 +66,6 @@ Hardware *newHardware(void) cardBase = 0; } - desParam(param); - my->lvme0 = allocMem(sizeof(LVme)); if (0 > conLVme(my->lvme0, cardBase, 0x100000UL, 0x09UL, 0, 0)) { msglog(LOG_ERR, "MU on %p not found\n", cardBase); @@ -77,11 +82,22 @@ Hardware *newHardware(void) return NULL; } + my->tip = allocMem(sizeof(HwTip)); + if (0 > conHwTip(my->tip, "conc", param)) { + msglog(LOG_ERR, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); + return NULL; + } + + desParam(param); + return my; } void deleteHardware(Hardware *my) { + desHwTip(my->tip); + freeMem(my->tip); + desLVme(my->lvme6); freeMem(my->lvme6); desLVme(my->lvme4); @@ -94,6 +110,25 @@ void deleteHardware(Hardware *my) void Hardware_waitForTrigger(Hardware *my, void *partEvt) { +/* +* check if CONC is ready +*/ + + if (HwTip_isEmpty(my->tip)) { + HwTip_requestBuffer(my->tip); + while (HwTip_isBusy(my->tip)) { + /* wait for some time for not disturbing the DSP */ + struct timespec tS, *t = &tS; + t->tv_sec = 0; + t->tv_nsec = 100000000; + nanosleep(t, NULL); + } + } + +/* +* check if MU is ready +*/ + /* only read the Matching Unit Count register, when all pending events are processed. This is recommended, because it is very @@ -107,14 +142,12 @@ void Hardware_waitForTrigger(Hardware *my, void *partEvt) my->old_evtCount=LVme_getL(my->lvme0, MU_EVT_COUNT); while (my->evtCount == my->old_evtCount) { -#if 1 + /* wait for some time for not disturbing the DSP */ struct timespec tS, *t = &tS; - t->tv_sec = 0; - t->tv_nsec = 400000000UL; + t->tv_nsec = 100000000UL; nanosleep(t, NULL); my->old_evtCount=LVme_getL(my->lvme0, MU_EVT_COUNT); -#endif } my->evtCount++; @@ -124,7 +157,6 @@ void readoutTrig(Hardware *my, void *subEvt) { UInt4 *data; size_t size; - int i; data = SubEvt_begin(subEvt); @@ -139,7 +171,7 @@ void readoutTrig(Hardware *my, void *subEvt) *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); - while (data < SubEvt_end(subEvt)) { + while ((void *)data < SubEvt_end(subEvt)) { *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; } @@ -154,11 +186,36 @@ void Hardware_readout(Hardware *my, void *partEvt) static unsigned long trigNr = 0; UInt1 trigTag; UInt1 trigCode; + int i; SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); +/* +* read out CONC +*/ + + for (i = 0; i < NCRATES; i++) { + HwTip_readSubEvt(my->tip, subEvt); + if (i == 0) { + trigTag = SubEvt_trigNr(subEvt); + } else { + if (trigTag != SubEvt_trigNr(subEvt)) { + msglog(LOG_ERR, "(%s)Trigger tag mismatch: 0x%08x != 0x%08x\n", + my->tip->name, trigTag, SubEvt_trigNr(subEvt)); + } + } + subEvt = SubEvt_next(partEvt, subEvt); + } + +/* +* read out MU +*/ + readoutTrig(my, subEvt); - trigTag = SubEvt_trigNr(subEvt); + if (trigTag != SubEvt_trigNr(subEvt)) { + msglog(LOG_ERR, "(MU)Trigger tag mismatch: 0x%08x != 0x%08x\n", + trigTag, SubEvt_trigNr(subEvt)); + } trigCode = SubEvt_dataValue(subEvt, 0); subEvt = SubEvt_next(partEvt, subEvt); @@ -166,6 +223,8 @@ void Hardware_readout(Hardware *my, void *partEvt) SubEvt_setId(partEvt, trigCode); SubEvt_setTrigNr(partEvt, (trigNr << 8) | trigTag); trigNr++; + + assert(SubEvt_size(partEvt) <= my->maxSubEvtSize); #ifndef NDEBUG msglog(LOG_DEBUG, "partEvt: %s\n", SubEvt_2charP(partEvt)); #endif diff --git a/hadaq/makeenv b/hadaq/makeenv index 7d7e81e..974d413 100644 --- a/hadaq/makeenv +++ b/hadaq/makeenv @@ -84,7 +84,7 @@ then export HW_OBJS="hwtbus.o hwdtu.o" elif test $HW_CONF = "TRIG" then - export HW_OBJS="hwtrig.o" + export HW_OBJS="hwtrig.o hwtip.o" else echo "Unknown HW_CONF: $HW_CONF, not set." >&2 fi diff --git a/hadaq/param.tcl b/hadaq/param.tcl index c88f61c..55da14c 100644 --- a/hadaq/param.tcl +++ b/hadaq/param.tcl @@ -49,7 +49,7 @@ set race0(cardbase) 0x00000000 set race1(cardbase) 0x10000000 set race2(cardbase) 0x20000000 set race3(cardbase) 0x30000000 -set tip0(cardbase) 0x10000000 +set conc(cardbase) 0x10000000 set mu(cardbase) 0xd0000000 set tdc0(cardbase) 0x22000000 -- 2.43.0