From 0887400a734cec564723e3f9d5027904640a7b5c Mon Sep 17 00:00:00 2001 From: hades Date: Sun, 21 May 2000 09:08:42 +0000 Subject: [PATCH] MU has sparsely filled address space, need several VME Windows on up to date CPU --- hadaq/hwtrig.c | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/hadaq/hwtrig.c b/hadaq/hwtrig.c index 290fa56..1c64093 100644 --- a/hadaq/hwtrig.c +++ b/hadaq/hwtrig.c @@ -8,12 +8,14 @@ #include "subevt.h" #include "param.h" -#define MU_FIFO 0x04000000UL -#define MU_EVT_COUNT 0x000e8014UL -#define MU_FIFO_STATUS 0x06000008UL +#define MU_EVT_COUNT 0x0e8014UL +#define MU_FIFO 0x0000UL +#define MU_FIFO_STATUS 0x0008UL struct HardwareS { - LVme *lvme; + LVme *lvme0; + LVme *lvme4; + LVme *lvme6; LVme_L evtCount; LVme_L old_evtCount; size_t maxSubEvtSize; @@ -50,8 +52,18 @@ Hardware *newHardware(void) cardBase = Param_getVal(param, "mu", "cardbase"); desParam(param); - my->lvme = allocMem(sizeof(LVme)); - if (0 > conLVme(my->lvme, cardBase, 0x8000000UL, 0x09UL, 0, 0)) { + 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); + return NULL; + } + my->lvme4 = allocMem(sizeof(LVme)); + if (0 > conLVme(my->lvme4, cardBase + 0x4000000, 0x10000UL, 0x09UL, 0, 0)) { + msglog(LOG_ERR, "MU on %p not found\n", cardBase); + return NULL; + } + my->lvme6 = allocMem(sizeof(LVme)); + if (0 > conLVme(my->lvme6, cardBase + 0x6000000, 0x10000UL, 0x09UL, 0, 0)) { msglog(LOG_ERR, "MU on %p not found\n", cardBase); return NULL; } @@ -61,8 +73,12 @@ Hardware *newHardware(void) void deleteHardware(Hardware *my) { - desLVme(my->lvme); - freeMem(my->lvme); + desLVme(my->lvme6); + freeMem(my->lvme6); + desLVme(my->lvme4); + freeMem(my->lvme4); + desLVme(my->lvme0); + freeMem(my->lvme0); freeMem(my); } @@ -80,7 +96,7 @@ void Hardware_waitForTrigger(Hardware *my, void *partEvt) return; } - my->old_evtCount=LVme_getL(my->lvme, MU_EVT_COUNT); + my->old_evtCount=LVme_getL(my->lvme0, MU_EVT_COUNT); while (my->evtCount == my->old_evtCount) { #if 1 struct timespec tS, *t = &tS; @@ -88,7 +104,7 @@ void Hardware_waitForTrigger(Hardware *my, void *partEvt) t->tv_sec = 0; t->tv_nsec = 400000000UL; nanosleep(t, NULL); - my->old_evtCount=LVme_getL(my->lvme, MU_EVT_COUNT); + my->old_evtCount=LVme_getL(my->lvme0, MU_EVT_COUNT); #endif } @@ -104,18 +120,18 @@ void readoutTrig(Hardware *my, void *subEvt) data = SubEvt_begin(subEvt); - if (! ((LVme_getW(my->lvme, MU_FIFO_STATUS) >> 3) &0x1) ) { - LVme_getW(my->lvme, MU_FIFO); + if (! ((LVme_getW(my->lvme6, MU_FIFO_STATUS) >> 3) &0x1) ) { + LVme_getW(my->lvme4, MU_FIFO); } - *data++ = LVme_getW(my->lvme, MU_FIFO) & 0xffff; - *data++ = LVme_getW(my->lvme, MU_FIFO) & 0xffff; - *data++ = LVme_getW(my->lvme, MU_FIFO) & 0xffff; - *data++ = LVme_getW(my->lvme, MU_FIFO) & 0xffff; + *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; + *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; + *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; + *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; SubEvt_setDecoding(subEvt, SubEvtDecoding_32bitData); while (data < SubEvt_end(subEvt)) { - *data++ = LVme_getW(my->lvme, MU_FIFO) & 0xffff; + *data++ = LVme_getW(my->lvme4, MU_FIFO) & 0xffff; } msglog(LOG_DEBUG, "subEvt: %s\n", SubEvt_2charP(subEvt)); -- 2.43.0