Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 59 → Rev 60

/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
/cvi/instr/CAENV673A/v673a.pdf
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property