/cvi/instr/CAENV673A/CAENV673A.fp |
Cannot display: file marked as a binary type.
|
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
## -0,0 +1 ## |
+application/octet-stream |
\ No newline at end of property |
Index: cvi/instr/CAENV673A/CAENV673A_DEF.h |
=================================================================== |
--- cvi/instr/CAENV673A/CAENV673A_DEF.h (nonexistent) |
+++ cvi/instr/CAENV673A/CAENV673A_DEF.h (revision 60) |
@@ -0,0 +1,69 @@ |
+#define CAENV673A_IVLR 0x000 |
+#define CAENV673A_BSR 0x002 |
+#define CAENV673A_REQEVR 0x008 |
+#define CAENV673A_CLALLB 0x078 |
+#define CAENV673A_INTSTP 0x088 |
+#define CAENV673A_BEGDLL 0x110 |
+#define CAENV673A_RMRBLK 0x180 |
+#define CAENV673A_RESDLL 0x190 |
+#define CAENV673A_CLRTDC 0x1F0 |
+#define CAENV673A_FIX 0x1FA |
+#define CAENV673A_MMT 0x1FC |
+#define CAENV673A_VSR 0x1FE |
+ |
+#define CAENV673A_MCR0 0x012 |
+#define CAENV673A_MCR1 0x016 |
+#define CAENV673A_CRR0 0x01A |
+#define CAENV673A_CRR1 0x01E |
+#define CAENV673A_ENR0 0x022 |
+#define CAENV673A_ENR1 0x026 |
+#define CAENV673A_TCR0 0x02A |
+#define CAENV673A_TCR1 0x02E |
+#define CAENV673A_MR0L 0x032 |
+#define CAENV673A_MR0H 0x036 |
+#define CAENV673A_MR1L 0x0B2 |
+#define CAENV673A_MR1H 0x0B6 |
+#define CAENV673A_EFR0 0x03A |
+#define CAENV673A_EFR1 0x0BA |
+ |
+#define CAENV673A_ENR0B0 0x05A |
+#define CAENV673A_ENR1B0 0x05E |
+#define CAENV673A_ENR0B1 0x0DA |
+#define CAENV673A_ENR1B1 0x0DE |
+#define CAENV673A_ENR0B2 0x15A |
+#define CAENV673A_ENR1B2 0x15E |
+#define CAENV673A_ENR0B3 0x1DA |
+#define CAENV673A_ENR1B3 0x1DE |
+ |
+#define CAENV673A_COR0B0 0x062 |
+#define CAENV673A_COR1B0 0x066 |
+#define CAENV673A_COR0B1 0x0E2 |
+#define CAENV673A_COR1B1 0x0E6 |
+#define CAENV673A_COR0B2 0x162 |
+#define CAENV673A_COR1B2 0x166 |
+#define CAENV673A_COR0B3 0x1E2 |
+#define CAENV673A_COR1B3 0x1E6 |
+ |
+#define CAENV673A_CLRCB0 0x06A |
+#define CAENV673A_CLRCB1 0x06E |
+ |
+#define CAENV673A_PTR0 0x072 |
+#define CAENV673A_PTR1 0x076 |
+ |
+#define CAENV673A_CLKCR0 0x092 |
+#define CAENV673A_CLKCR1 0x096 |
+ |
+#define CAENV673A_SEQ0 0x104 |
+#define CAENV673A_SEQ1 0x10C |
+ |
+#define CAEN_FIX_CODE 0xFAF5 |
+#define CAENV673A_MMT_VALUE 0x092D |
+ |
+#define VERSION(x) (((x)>>12) & 0xf) |
+#define SERIAL(x) ((x) & 0xfff) |
+#define MANUFACTURER(x) (((x)>>10) & 0x3f) |
+#define MODULE_TYPE(x) ((x) & 0x3ff) |
+ |
+#define VME_D8(x) ( *((unsigned char *) (x))) |
+#define VME_D16(x) ( *((unsigned short *) (x))) |
+#define VME_D32(x) ( *((unsigned long *) (x))) |
Index: cvi/instr/CAENV673A/CAENV673A.h |
=================================================================== |
--- cvi/instr/CAENV673A/CAENV673A.h (nonexistent) |
+++ cvi/instr/CAENV673A/CAENV673A.h (revision 60) |
@@ -0,0 +1,24 @@ |
+#include <cvidef.h> |
+ |
+int V673A_map (int moduleNumber, |
+ unsigned long moduleOffset, int print); |
+ |
+int V673A_init (int ModuleNumber); |
+ |
+int V673A_status (int ModuleNumber); |
+ |
+int V673A_ntrig (int ModuleNumber); |
+ |
+int V673A_read0 (int ModuleNumber, unsigned long whereto[], int size); |
+ |
+int V673A_read1 (int ModuleNumber, unsigned long whereto[], int size); |
+ |
+int V673A_firstevnt (int ModuleNumber); |
+ |
+int V673A_getevnt (int ModuleNumber, int env, unsigned long whereto[], int size); |
+ |
+int V673A_clallb (int ModuleNumber); |
+ |
+int V673A_getreg (int ModuleNumber, int reg); |
+ |
+void V673A_setreg (int ModuleNumber, int reg, int set); |
Index: cvi/instr/CAENV673A/CAENV673A.c |
=================================================================== |
--- cvi/instr/CAENV673A/CAENV673A.c (nonexistent) |
+++ cvi/instr/CAENV673A/CAENV673A.c (revision 60) |
@@ -0,0 +1,279 @@ |
+#include <ansi_c.h> |
+#include "CAENV673A.h" |
+#include "CAENV673A_DEF.h" |
+//#include "pcivme_dll.h" |
+#ifdef SISVME |
+#include "sisvme_dll.h" |
+#endif |
+#ifdef WIENVME |
+#include "wienvme_dll.h" |
+#endif |
+#ifdef WUSBVME |
+#include "wusbvme_dll.h" |
+#endif |
+ |
+unsigned int ModuleAddress[10]; |
+static const unsigned short bufevnum[2][4]= |
+ {CAENV673A_ENR0B0, CAENV673A_ENR0B1, CAENV673A_ENR0B2, CAENV673A_ENR0B3, |
+ CAENV673A_ENR1B0, CAENV673A_ENR1B1, CAENV673A_ENR1B2, CAENV673A_ENR1B3}; |
+ |
+int V673A_map (int ModuleNumber, |
+ unsigned long ModuleOffset, int print) |
+{ |
+ unsigned long vsr, mmt, fix; |
+ |
+ ModuleAddress[ModuleNumber] = ModuleOffset; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_FIX, &fix); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_MMT, &mmt); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_VSR, &vsr); |
+ if (print) { |
+ printf("fixed code = 0x%04x\n", fix); |
+ printf("manufacturer number = %i\n", MANUFACTURER(mmt)); |
+ printf("module type = %i\n", MODULE_TYPE(mmt)); |
+ printf("version = %i\n", VERSION(vsr)); |
+ printf("serial no. = %i\n", SERIAL(vsr)); |
+ } |
+ if ((fix != CAEN_FIX_CODE) || (mmt != CAENV673A_MMT_VALUE)) return -1; |
+ return 0; |
+} |
+ |
+int V673A_init (int ModuleNumber) |
+{ |
+ unsigned long dum16; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLRTDC, &dum16); |
+ |
+ dum16= 0xF77F; |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MCR0,dum16); |
+ dum16= 0xF77F; |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MCR1, dum16); |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLALLB, &dum16); |
+ /* range 2**(NBITS+1)*1.0416s |
+ NBITS = |
+ 4 32 ns |
+ 5 64 |
+ 6 128 |
+ 7 256 |
+ 8 512 |
+ 9 1024 |
+ A 2048 |
+ B 4096 |
+ C 8200 |
+ D 16400 |
+ E 32000 |
+ */ |
+ dum16=0x003A;// RANGE 2048 ns |
+ //dum16=0x003E; //range 32us |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_CRR0, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_CRR1, dum16); |
+ |
+ dum16=0x001A; |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_CLKCR0, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_CLKCR1, dum16); |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BEGDLL, &dum16); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLALLB, &dum16); |
+ |
+ dum16=0xF35F; // both edges + stop mode |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MCR0, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MCR1, dum16); |
+ |
+ dum16=0xFFFF; |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MR0L, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MR0H, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MR1L, dum16); |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + CAENV673A_MR1H, dum16); |
+ |
+ return 0; |
+} |
+ |
+int V673A_status (int ModuleNumber) |
+{ |
+ unsigned long dum16; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &dum16); |
+ return dum16; |
+} |
+ |
+int V673A_ntrig (int ModuleNumber) |
+{ |
+ unsigned long ntr[2]; |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_ENR0, &ntr[0] ); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_ENR1, &ntr[1] ); |
+ |
+ if (ntr[0] == ntr[1]) return ntr[0]; |
+ else printf ("CAENV673A [%d] ENR0=%04x ENR1=%04x\n",ModuleNumber, ntr[0],ntr[1]); |
+ return -1; |
+} |
+ |
+int V673A_read0 (int ModuleNumber, unsigned long whereto[], int size) |
+{ |
+ unsigned long status, ndata; |
+ unsigned int data; |
+ |
+ ndata = 0; |
+ if (size<=0) return 0; |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & (1<<5))) { |
+ //printf ("CAENV673A BSR STATUS=%04x\n",status); |
+ return 0; |
+ } |
+ VME_A24D32_R(ModuleAddress[ModuleNumber] + CAENV673A_SEQ0, &data ); |
+ *whereto= data; |
+ if ((*whereto) & (1<<23)) { |
+ ndata++; |
+ do { |
+ VME_A24D32_R(ModuleAddress[ModuleNumber] + CAENV673A_SEQ0, &data); |
+ *(++whereto) = data; |
+ ndata++; |
+ } while (!((*whereto) & ((1<<30) | (1<<31))) && ndata<size); |
+ if (ndata>=size) { |
+ |
+ printf("V673A_read0 Increase buffer size ndata=%d\ndata=0x%x\n", ndata,data); |
+ return ndata; |
+ } |
+ if (!((*whereto) & (1<<31))) return ndata; |
+ } |
+ |
+ return 0; |
+ |
+} |
+ |
+int V673A_read1 (int ModuleNumber, unsigned long whereto[], int size) |
+{ |
+ unsigned long status, ndata; |
+ unsigned int data; |
+ |
+ ndata = 0; |
+ if (size<=0) return 0; |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & (1<<7))) return 0; |
+ |
+ |
+ VME_A24D32_R(ModuleAddress[ModuleNumber] + CAENV673A_SEQ1, &data); |
+ *whereto = data; |
+ if ((*whereto) & (1<<23)) { |
+ ndata++; |
+ do { |
+ VME_A24D32_R(ModuleAddress[ModuleNumber] + CAENV673A_SEQ1, &data); |
+ *(++whereto) = data; |
+ ndata++; |
+ } while (!((*whereto) & ((1<<30) | (1<<31))) && ndata<size); |
+ if (ndata>=size) { |
+ printf("V673A_read1 Increase buffer size ndata=%d\ndata=0x%x\n", ndata,data); |
+ return ndata; |
+ } |
+ if (!((*whereto) & (1<<31))) return ndata; |
+ } |
+ |
+ return 0; |
+ |
+} |
+ |
+int V673A_firstevnt (int ModuleNumber) |
+{ |
+ unsigned long status, ptr; |
+ int evn[2]; |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & 0x8000)) return -1; |
+ |
+ if (status & 0x0020) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_PTR0, &ptr); |
+ ptr &= 0x3; |
+ evn[0]=0; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + bufevnum[0][ptr], &evn[0]); |
+ } else { |
+ evn[0]=0x10000; |
+ } |
+ if (status & 0x0080) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_PTR1, &ptr); |
+ ptr &= 0x3; |
+ evn[1]=0; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + bufevnum[1][ptr], &evn[1]); |
+ } else { |
+ evn[1]=0x10000; |
+ } |
+ //printf ("first event [%d] evn: %d %d \n",ModuleNumber ,evn[0]&0xffff,evn[1]&0xffff); |
+ if (evn[0] < evn[1]) { |
+ return evn[0]; |
+ } else { |
+ return evn[1]; |
+ } |
+} |
+ |
+int V673A_getevnt (int ModuleNumber, int evn, unsigned long whereto[], int size) |
+{ |
+ unsigned long dum16; |
+ unsigned long status, bptr, bevn, ndata; |
+ int msize=size; |
+ ndata=0; |
+ |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & 0x8000)) return -1; |
+ |
+ while (1) { |
+ if (status & 0x0020) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_PTR0, &bptr); |
+ bptr &= 0x3; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + bufevnum[0][bptr], &bevn); |
+ if (bevn == evn) { |
+ ndata += V673A_read0(ModuleNumber, whereto, msize); |
+ msize-=ndata; |
+ whereto += ndata; |
+ break; |
+ } else if (bevn < evn) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLRCB0, &dum16); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & 0x8000)) return ndata; |
+ } else { |
+ break; |
+ } |
+ } else { |
+ break; |
+ } |
+ } |
+ while (1) { |
+ if (status & 0x0080) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_PTR1, &bptr); |
+ bptr &= 0x3; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + bufevnum[1][bptr], &bevn); |
+ if (bevn == evn) { |
+ ndata += V673A_read1(ModuleNumber, whereto, msize); |
+ msize-=ndata; |
+ break; |
+ } else if (bevn < evn) { |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLRCB1, &dum16); |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_BSR, &status); |
+ if (!(status & 0x8000)) return ndata; |
+ } else { |
+ break; |
+ } |
+ } else { |
+ break; |
+ } |
+ } |
+ return ndata; |
+} |
+ |
+ |
+ |
+int V673A_clallb (int ModuleNumber){ |
+ unsigned long dum16; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV673A_CLALLB, &dum16); |
+ return 0; |
+} |
+ |
+int V673A_getreg (int ModuleNumber, int reg){ |
+ unsigned long dum16; |
+ VME_A24D16_R(ModuleAddress[ModuleNumber] + reg, &dum16); |
+ return dum16; |
+} |
+ |
+void V673A_setreg (int ModuleNumber, int reg, int set){ |
+ unsigned long dum16=set; |
+ VME_A24D16_W(ModuleAddress[ModuleNumber] + reg, dum16); |
+ return; |
+} |
Index: cvi/instr/CAENV673A/v673a.pdf |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |