]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhades <hades>
Wed, 11 Apr 2001 13:13:54 +0000 (13:13 +0000)
committerhades <hades>
Wed, 11 Apr 2001 13:13:54 +0000 (13:13 +0000)
hadaq/hwtrig.c
hadaq/makeenv
hadaq/param.tcl

index a21c228dce5ed3e82d55db9581f7e0a2a66aaec3..e49090d73e06245ba5c7e2b8123b86a4e9fcb7a2 100644 (file)
@@ -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 <unistd.h>
 
+#include <assert.h>
+#include <errno.h>
 #include <sys/time.h>
 
+#include <allParam.h>
 #include <lvme.h>
 
 #include "subevt.h"
-#include <allParam.h>
+#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
index 7d7e81ed777d604b69040ffdfd196af9bd42dcd8..974d4138884555dd9160765ef3ace12849d044b3 100644 (file)
@@ -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
index c88f61c8ff2ca139610a36ba1346795cfe833394..55da14cabf1422fe9ee85aef68a82be1fa3091ed 100644 (file)
@@ -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