]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
MU has sparsely filled address space, need several VME Windows on
authorhades <hades>
Sun, 21 May 2000 09:08:42 +0000 (09:08 +0000)
committerhades <hades>
Sun, 21 May 2000 09:08:42 +0000 (09:08 +0000)
up to date CPU

hadaq/hwtrig.c

index 290fa5645e00491be440b1bba070d89bd79cbbd8..1c64093cbadbb882742d01e03a35a659e9d34c17 100644 (file)
@@ -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));