v1740drv.h File Reference

Go to the source code of this file.

Functions

uint32_t v1740_RegisterRead (MVME_INTERFACE *mvme, uint32_t a32base, int offset)
uint32_t v1740_BufferFreeRead (MVME_INTERFACE *mvme, uint32_t a32base)
uint32_t v1740_BufferOccupancy (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t channel)
uint32_t v1740_BufferFree (MVME_INTERFACE *mvme, uint32_t base, int nbuffer)
void v1740_AcqCtl (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t operation)
void v1740_GroupCtl (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t reg, uint32_t mask)
void v1740_TrgCtl (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t reg, uint32_t mask)
void v1740_RegisterWrite (MVME_INTERFACE *mvme, uint32_t a32base, int offset, uint32_t value)
void v1740_Reset (MVME_INTERFACE *mvme, uint32_t a32base)
void v1740_GroupThreshold (MVME_INTERFACE *mvme, uint32_t base, uint16_t group, uint16_t threshold)
void v1740_GroupDAC (MVME_INTERFACE *mvme, uint32_t base, uint16_t group, uint16_t dac)
void v1740_Status (MVME_INTERFACE *mvme, uint32_t a32base)
int v1740_Setup (MVME_INTERFACE *mvme, uint32_t a32base, int mode)
void v1740_info (MVME_INTERFACE *mvme, uint32_t a32base, int *nch, uint32_t *n32w)
uint32_t v1740_DataRead (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t *pdata, uint32_t n32w)
uint32_t v1740_DataBlockRead (MVME_INTERFACE *mvme, uint32_t a32base, uint32_t *pdest, uint32_t *nentry)


Function Documentation

void v1740_AcqCtl ( MVME_INTERFACE mvme,
uint32_t  a32base,
uint32_t  operation 
)

Definition at line 91 of file v1740.c.

00092 {
00093   uint32_t reg;
00094   
00095   reg = regRead(mvme, base, V1740_ACQUISITION_CONTROL);  
00096   switch (operation) {
00097   case V1740_RUN_START:
00098     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg | 0x4));
00099     break;
00100   case V1740_RUN_STOP:
00101     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg & ~(0x4)));
00102     break;
00103   case V1740_REGISTER_RUN_MODE:
00104     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg & ~(0x3)));
00105     break;
00106   case V1740_SIN_RUN_MODE:
00107     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg | 0x01));
00108     break;
00109   case V1740_SIN_GATE_RUN_MODE:
00110     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg | 0x02));
00111     break;
00112   case V1740_MULTI_BOARD_SYNC_MODE:
00113     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg | 0x03));
00114     break;
00115   case V1740_COUNT_ACCEPTED_TRIGGER:
00116     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg | 0x08));
00117     break;
00118   case V1740_COUNT_ALL_TRIGGER:
00119     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg & ~(0x08)));
00120     break;
00121   case V1740_DOWNSAMPLE_ENABLE:
00122     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg & 0x10));
00123     break;
00124   case V1740_DOWNSAMPLE_DISABLE:
00125     regWrite(mvme, base, V1740_ACQUISITION_CONTROL, (reg & ~(0x10)));
00126     break;
00127   default:
00128     break;
00129   }
00130 }

uint32_t v1740_BufferFree ( MVME_INTERFACE mvme,
uint32_t  base,
int  nbuffer 
)

Definition at line 163 of file v1740.c.

00164 {
00165   int mode;
00166 
00167   mode = regRead(mvme, base, V1740_BUFFER_ORGANIZATION);
00168   if (nbuffer <= (1<< mode) ) {
00169     regWrite(mvme, base, V1740_BUFFER_FREE, nbuffer);
00170     return mode;
00171   } else
00172     return mode;
00173 }

uint32_t v1740_BufferFreeRead ( MVME_INTERFACE mvme,
uint32_t  a32base 
)

Definition at line 176 of file v1740.c.

00177 {
00178   return regRead(mvme, base, V1740_BUFFER_FREE);
00179 }

uint32_t v1740_BufferOccupancy ( MVME_INTERFACE mvme,
uint32_t  a32base,
uint32_t  channel 
)

Definition at line 154 of file v1740.c.

00155 {
00156   uint32_t reg;
00157   reg = V1740_GROUP_BUFFER_OCCUPANCY + (group<<16);
00158   return regRead(mvme, base, reg);
00159 }

uint32_t v1740_DataBlockRead ( MVME_INTERFACE mvme,
uint32_t  base,
uint32_t *  pdest,
uint32_t *  nentry 
)

v1740_DataBlockRead Read N entries (32bit)

Parameters:
mvme vme structure
base base address
pdest Destination pointer
Returns:
nentry

Definition at line 209 of file v1740.c.

00210 {
00211   int status, ngroups;
00212 
00213   mvme_set_am(  mvme, MVME_AM_A32);
00214   mvme_set_dmode(  mvme, MVME_DMODE_D32);
00215   v1740_info(mvme, base, &ngroups, nentry);
00216   // *nentry = 0xFFFFFF & regRead(mvme, base, V1740_EVENT_READOUT_BUFFER);
00217   printf("DataBlockRead n32w:%d 0x%x\n", *nentry, *nentry);
00218   mvme_set_blt(  mvme, MVME_BLT_MBLT64);
00219   mvme_set_blt(  mvme, 0);
00220   //
00221   // Transfer in MBLT64 (8bytes), nentry is in 32bits
00222   status = mvme_read(mvme, pdest, base+V1740_EVENT_READOUT_BUFFER, *nentry<<2);
00223   if (status != MVME_SUCCESS)
00224     return 0;
00225 
00226   return (*nentry);
00227 }

uint32_t v1740_DataRead ( MVME_INTERFACE mvme,
uint32_t  a32base,
uint32_t *  pdata,
uint32_t  n32w 
)

Definition at line 182 of file v1740.c.

00183 {
00184   uint32_t i;
00185 
00186   mvme_set_am(  mvme, MVME_AM_A32);
00187   mvme_set_dmode(  mvme, MVME_DMODE_D32);
00188   n32w = 0xFFFFFF & regRead(mvme, base, V1740_EVENT_READOUT_BUFFER);
00189   //  printf("DataRead n32w:%d 0x%x\n", n32w, n32w);
00190   *pdata++ = n32w;
00191   for (i=0;i<n32w-1;i++) {
00192     *pdata = regRead(mvme, base, V1740_EVENT_READOUT_BUFFER);
00193     if (*pdata != 0xffffffff)
00194       pdata++;
00195     else
00196       break;
00197   }
00198   return i+1;
00199 }

void v1740_GroupCtl ( MVME_INTERFACE mvme,
uint32_t  a32base,
uint32_t  reg,
uint32_t  mask 
)

Definition at line 67 of file v1740.c.

00068 {
00069   regWrite(mvme, base, reg, mask);
00070 }

void v1740_GroupDAC ( MVME_INTERFACE mvme,
uint32_t  base,
uint16_t  group,
uint16_t  dac 
)

Definition at line 82 of file v1740.c.

00083 {
00084   uint32_t reg;
00085   
00086   reg = V1740_GROUP_DAC | (group << 8);
00087   regWrite(mvme, base, reg, (dac & 0xFFFF));
00088 }

void v1740_GroupThreshold ( MVME_INTERFACE mvme,
uint32_t  base,
uint16_t  group,
uint16_t  threshold 
)

Definition at line 73 of file v1740.c.

00074 {
00075   uint32_t reg;
00076   
00077   reg = V1740_GROUP_THRESHOLD | (group << 8);
00078   regWrite(mvme, base, reg, (threshold & 0xFFF));
00079 }

void v1740_info ( MVME_INTERFACE mvme,
uint32_t  a32base,
int *  nch,
uint32_t *  n32w 
)

Definition at line 133 of file v1740.c.

Referenced by v1740_DataBlockRead().

00134 {
00135   int i, grpmask;
00136 
00137   // Evaluate the event size
00138   // Number of samples per group (8 channels)
00139   *n32word = 8 * V1740_NSAMPLES_MODE[regRead(mvme, base, V1740_BUFFER_ORGANIZATION)];
00140 
00141   // times the number of active group
00142   grpmask = 0xff & regRead(mvme, base, V1740_GROUP_EN_MASK); 
00143   *ngroups = 0;
00144   for (i=0;i<8;i++) {
00145     if (grpmask & (1<<i))
00146       *ngroups += 1;
00147   }
00148   
00149   *n32word = *n32word * *ngroups * 12 / 32;  // 12bit/Sample , 32bits/DW
00150   *n32word += 4;    // Headers
00151 }

uint32_t v1740_RegisterRead ( MVME_INTERFACE mvme,
uint32_t  a32base,
int  offset 
)

Definition at line 43 of file v1740.c.

00044 {
00045   return regRead(mvme, base, offset);
00046 }

void v1740_RegisterWrite ( MVME_INTERFACE mvme,
uint32_t  a32base,
int  offset,
uint32_t  value 
)

Definition at line 49 of file v1740.c.

00050 {
00051   regWrite(mvme, base, offset, value);
00052 }

void v1740_Reset ( MVME_INTERFACE mvme,
uint32_t  a32base 
)

Definition at line 55 of file v1740.c.

00056 {
00057   regWrite(mvme, base, V1740_SW_RESET, 0);
00058 }

int v1740_Setup ( MVME_INTERFACE mvme,
uint32_t  base,
int  mode 
)

Sets all the necessary paramters for a given configuration. The configuration is provided by the mode argument. Add your own configuration in the case statement. Let me know your setting if you want to include it in the distribution.

Parameters:
*mvme VME structure
base Module base address
mode Configuration mode number
Returns:
0: OK. -1: Bad

Definition at line 254 of file v1740.c.

00255 {
00256   switch (mode) {
00257   case 0x0:
00258     printf("--------------------------------------------\n");
00259     printf("Setup Skip\n");
00260     printf("--------------------------------------------\n");
00261   case 0x1:
00262     printf("--------------------------------------------\n");
00263     printf("Trigger from FP, 8 group, 1Ks, postTrigger 800\n");
00264     printf("--------------------------------------------\n");
00265     regWrite(mvme, base, V1740_ACQUISITION_CONTROL,   0x00);   // Reset Acq Control
00266     regWrite(mvme, base, V1740_BUFFER_ORGANIZATION,  0x0A);    // 1K Nbuffers=1024, bufferSize=192
00267     regWrite(mvme, base, V1740_TRIG_SRCE_EN_MASK,    0x4000);  // External Trigger
00268     regWrite(mvme, base, V1740_GROUP_EN_MASK,      0xFF);    // 8grp enable
00269     regWrite(mvme, base, V1740_POST_TRIGGER_SETTING, 800);     // PreTrigger (1K-800)
00270     printf("\n");
00271     break;
00272   case 0x2:
00273     printf("--------------------------------------------\n");
00274     printf("Trigger from LEMO\n");
00275     printf("--------------------------------------------\n");
00276     regWrite(mvme, base, V1740_BUFFER_ORGANIZATION, 1);
00277     printf("\n");
00278     break;
00279   default:
00280     printf("Unknown setup mode\n");
00281     return -1;
00282   }
00283   v1740_Status(mvme, base);
00284   return 0;
00285 }

void v1740_Status ( MVME_INTERFACE mvme,
uint32_t  a32base 
)

Definition at line 231 of file v1740.c.

Referenced by v1740_Setup().

00232 {
00233   printf("================================================\n");
00234   printf("V1740 at A32 0x%x\n", (int)base);
00235   printf("Board ID             : 0x%x\n", regRead(mvme, base, V1740_BOARD_ID));
00236   printf("Board Info           : 0x%x\n", regRead(mvme, base, V1740_BOARD_INFO));
00237   printf("Acquisition status   : 0x%8.8x\n", regRead(mvme, base, V1740_ACQUISITION_STATUS));
00238   printf("================================================\n");
00239 }

void v1740_TrgCtl ( MVME_INTERFACE mvme,
uint32_t  a32base,
uint32_t  reg,
uint32_t  mask 
)

Definition at line 61 of file v1740.c.

00062 {
00063   regWrite(mvme, base, reg, mask);
00064 }


Midas DOC Version 3.0.0 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Sergio Ballestrero - Suzannah Daviel - Doxygen - Peter Green - Qing Gu - Greg Hackman - Gertjan Hofman - Paul Knowles - Exaos Lee - Rudi Meier - Glenn Moloney - Dave Morris - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Tamsen Schurman - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk