From: hades Date: Sun, 12 Nov 2000 14:40:20 +0000 (+0000) Subject: TOF and MDC test running X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=90c47e7e51be4aa907cf292c4c95144ed2060ef3;p=daqdata.git TOF and MDC test running --- diff --git a/hadaq/hwmdc.c b/hadaq/hwmdc.c index 3fee468..6d49270 100644 --- a/hadaq/hwmdc.c +++ b/hadaq/hwmdc.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.6 2000-11-08 07:53:23 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/Attic/hwmdc.c,v 6.7 2000-11-12 14:40:20 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -12,12 +12,12 @@ static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/had #include "subevt.h" #include "hwsam.h" -#define NSAMS 1 +#define NSAMS 10 +#define SAMMASK ((1 << NSAMS) - 1) struct HardwareS { size_t maxSubEvtSize; HwSam *sam[NSAMS]; - unsigned samToRead; }; #include "hardware.h" @@ -38,18 +38,13 @@ Hardware *newHardware(void) Param paramS, *param = ¶mS; int i; -#if 0 - system("cd /home/hades/ht99/slow; mdc init >/dev/null 2>&1"); -#endif - if (0 > conParam(param)) { msglog(LOG_DEBUG, "%s:%d:%s\n", __FILE__, __LINE__, strerror(errno)); return NULL; } my = allocMem(sizeof(Hardware)); - my->maxSubEvtSize = SubEvt_hdrSize() + (2564 * sizeof(UInt4)); - my->samToRead = 0; + my->maxSubEvtSize = SubEvt_hdrSize() + (NSAMS * 2564 * sizeof(UInt4)); for (i = 0; i < NSAMS; i++) { char buf[16]; @@ -79,25 +74,62 @@ void deleteHardware(Hardware *my) freeMem(my); } -void Hardware_waitForTrigger(Hardware *my, void *subEvt) +void Hardware_waitForTrigger(Hardware *my, void *partEvt) { - if (HwSam_isEmpty(my->sam[my->samToRead])) { - HwSam_requestBuffer(my->sam[my->samToRead]); - while (HwSam_isBusy(my->sam[my->samToRead])) { + int i; + unsigned long anySamIsBusy; + + for (i = 0; i < NSAMS; i++) { + if (HwSam_isEmpty(my->sam[i])) { + HwSam_requestBuffer(my->sam[i]); + } + } + + /* make shure that all SAMS can deliver at least one sub event */ + anySamIsBusy = SAMMASK; + do { + for (i = 0; i < NSAMS; i++) { + if ((anySamIsBusy & (1 << i)) && !HwSam_isBusy(my->sam[i])) { + anySamIsBusy &= ~(1 << i); + } else { #if 0 - 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 + } } - } + } while (anySamIsBusy); } -void Hardware_readout(Hardware *my, void *subEvt) +void Hardware_readout(Hardware *my, void *partEvt) { - HwSam_readSubEvt(my->sam[my->samToRead], subEvt); - if (++my->samToRead == NSAMS ) { - my->samToRead = 0; + int i; + void *subEvt = SubEvt_data(partEvt); + static UInt4 trigNr = 0; + UInt4 trigTag; + + /* init partial event, necessary for SubEvt_next() */ + SubEvt_setDecoding(partEvt, SubEvtDecoding_SubEvts); + SubEvt_setId(partEvt, 0); + + /* read all sams, check for common trigger tag */ + for (i = 0; i < NSAMS; i++) { + + HwSam_readSubEvt(my->sam[i], 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->sam[i]->name,trigTag, SubEvt_trigNr(subEvt)); + } + } + subEvt = SubEvt_next(partEvt, subEvt); } + + SubEvt_setTrigNr(partEvt, trigNr << 8 | trigTag); + SubEvt_setSize(partEvt, (char *)subEvt - (char *)partEvt); + trigNr++; } diff --git a/hadaq/hwsam.c b/hadaq/hwsam.c index d5b932d..73521a5 100644 --- a/hadaq/hwsam.c +++ b/hadaq/hwsam.c @@ -27,18 +27,6 @@ static int endOfData(HwSam *my) { return i + LVme_getL(my->cram, i); } -static void standbyMode(HwSam *my) { - LVme_clrBitL(my->regs, KSR, 0); - do { - LVme_setL(my->cram, CRR, 0); - } while (LVme_getL(my->cram, CRR) != 0); - my->currAddr = BUFSIZE; -} - -static void acquireMode(HwSam *my) { - LVme_setBitL(my->regs, KSR, 0); -} - int conHwSam(HwSam * my, const char *name, const Param *param) { unsigned long cardBase; @@ -66,16 +54,13 @@ int conHwSam(HwSam * my, const char *name, const Param *param) msglog(LOG_ERR, "HwSam on %p not found\n", cardBase); return -1; } - my->trigNr = 0; + my->currAddr = BUFSIZE; - standbyMode(my); - acquireMode(my); return 0; } void desHwSam(HwSam * my) { - standbyMode(my); desLVme(my->regs); desLVme(my->cram); } @@ -109,14 +94,13 @@ void *HwSam_readSubEvt(HwSam *my, void *subEvt) { UInt4 *data = (UInt4 *)subEvt; int firstAddr; int size; - UInt1 trigTag; msglog(LOG_DEBUG, "readSubEvt in\n"); size = LVme_getL(my->cram, my->currAddr); msglog(LOG_DEBUG, "readSubEvt currAddr: 0x%08x\n", my->currAddr); if (my->currAddr + size > endOfData(my)) { - msglog(LOG_EMERG,"subEvt throw away : %d, %d\n", size, endOfData(my) - my->currAddr); + msglog(LOG_CRIT,"subEvt throw away : %d, %d\n", size, endOfData(my) - my->currAddr); /* create impossible subEvt */ SubEvt_setSize(subEvt, SubEvt_hdrSize()); SubEvt_setDecoding(subEvt, SubEvtDecoding_16bitData); @@ -128,22 +112,7 @@ void *HwSam_readSubEvt(HwSam *my, void *subEvt) { for (firstAddr = my->currAddr; my->currAddr - firstAddr < size; my->currAddr += 4) { *data++ = LVme_getL(my->cram, my->currAddr); } - msglog(LOG_DEBUG, "readSubEvt subevt: %s\n", SubEvt_2charP(subEvt)); - - /* normal extension of trigger tag */ - trigTag = SubEvt_trigNr(subEvt); - - /* BUGBUG if soft & hardware trigNr differ, HW gets precedence */ - if (trigTag != (my->trigNr & 0xff)) { - msglog(LOG_EMERG,"readSubEvt trigTag differ : 0x%08x, 0x%02x\n",my->trigNr, trigTag); - } - if (trigTag < (my->trigNr & 0xff)) { - my->trigNr += 0x100; - } - my->trigNr = (my->trigNr & 0xffffff00) | trigTag; - SubEvt_setTrigNr(subEvt, my->trigNr << 8 | trigTag); - my->trigNr++; } msglog(LOG_DEBUG, "readSubEvt out\n"); diff --git a/hadaq/hwsam.h b/hadaq/hwsam.h index 42396a1..876f036 100644 --- a/hadaq/hwsam.h +++ b/hadaq/hwsam.h @@ -11,7 +11,6 @@ typedef struct HwSamS { LVme *regs; int bufSize; int currAddr; - int trigNr; } HwSam; diff --git a/hadaq/param.tcl b/hadaq/param.tcl index ce077dd..6ca545e 100644 --- a/hadaq/param.tcl +++ b/hadaq/param.tcl @@ -17,6 +17,16 @@ set readout(file) ./daq_readout set readout(stndln) 0 set readout(priority) -2 +set sam0(cardbase) 0x1C000000 +set sam1(cardbase) 0x2C000000 +set sam2(cardbase) 0x3C000000 +set sam3(cardbase) 0x5C000000 +set sam4(cardbase) 0x8C000000 +set sam5(cardbase) 0x9C000000 +set sam6(cardbase) 0xaC000000 +set sam7(cardbase) 0xbC000000 +set sam8(cardbase) 0xdC000000 +set sam9(cardbase) 0xec000000 set soft(size) 1024 set dtu(cardbase) 0x44100000 diff --git a/hadaq/readout.c b/hadaq/readout.c index bcb6816..806bbb9 100644 --- a/hadaq/readout.c +++ b/hadaq/readout.c @@ -1,4 +1,4 @@ -static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.12 2000-11-12 14:40:20 hades Exp $"; +static char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/readout.c,v 6.13 2000-11-12 14:42:08 hades Exp $"; #define _POSIX_C_SOURCE 199309L #include @@ -133,18 +133,19 @@ void main(int argc, char *argv[]) Worker_initEnd(worker); while (setjmp(terminateJmp) == 0) { + int n = 0; void *hadTu; HadTuQueue *hadTuQueue; Worker_dump(worker, 1); - hadTu = ShmTrans_alloc(shmTrans, 192 * 1024); + hadTu = ShmTrans_alloc(shmTrans, 60 * 1024); #ifndef NDEBUG msglog(LOG_DEBUG, "shmTrans: %p = hadTu: %s\n", hadTu, HadTu_2charP(hadTu)); #endif hadTuQueue = allocMem(HadTuQueue_sizeOf()); - conHadTuQueue(hadTuQueue, hadTu, 192 * 1024); - while (NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) { + conHadTuQueue(hadTuQueue, hadTu, 60 * 1024); + while (n++ < 100 && NULL != (subEvt = HadTuQueue_alloc(hadTuQueue, Hardware_maxSubEvtSize(hw)))) { Hardware_waitForTrigger(hw, subEvt); Hardware_readout(hw, subEvt);