0,0 → 1,96 |
#include <stdlib.h> |
#include <stdio.h> |
#include "CAENV262.h" |
#include "CAENV262_DEF.h" |
#include "vme.h" |
|
|
static unsigned int ModuleAddress[10]; |
static unsigned short m_OutputMaskEcl; |
static unsigned short m_OutputMaskLevel; |
static unsigned short m_InputMaskLevel; |
int _VI_FUNC V262_Map (int ModuleNumber, |
unsigned long ModuleOffset, int dprint) |
{ |
unsigned short vsr, mmt, fix; |
printf("CAEN V262 offset = 0x%08x print=%d\n", ModuleOffset, dprint); |
ModuleAddress[ModuleNumber] = ModuleOffset; |
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_FIX, &fix); |
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_MMT, &mmt); |
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_VSR, &vsr); |
//if (dprint !=0) { |
printf("CAEN V262 offset = 0x%08x\n", ModuleOffset); |
printf("CAEN V262 fixed code = 0x%04x\n", fix); |
printf("CAEN V262 manufacturer number = %i\n", MANUFACTURER(mmt)); |
printf("CAEN V262 module type = %i\n", MODULE_TYPE(mmt)); |
printf("CAEN V262 version = %i\n", VERSION(vsr)); |
printf("CAEN V262 serial no. = %i\n", SERIAL(vsr)); |
//} |
if ((fix != CAEN_FIX_CODE) || (mmt != CAENV262_MMT_VALUE)) return -1; |
return 0; |
} |
|
int _VI_FUNC V262_Init (int ModuleNumber) |
{ |
m_OutputMaskEcl=0; |
m_OutputMaskLevel=0; |
|
V262_MaskOut(ModuleNumber,CAENV262_NIMOUT,m_OutputMaskLevel); |
V262_MaskOut(ModuleNumber,CAENV262_ECLOUT,m_OutputMaskEcl); |
|
|
m_InputMaskLevel = V262_MaskIn(ModuleNumber); |
|
printf("V262_init : value of NIM inputs=%02x\n",m_InputMaskLevel); |
|
return 0; |
} |
|
|
int _VI_FUNC V262_MaskOut(int ModuleNumber, unsigned long shft, unsigned short mask) |
{ |
VME_A24D16_W(ModuleAddress[ModuleNumber] + shft,mask); |
return 0; |
} |
|
|
|
unsigned short _VI_FUNC V262_MaskIn(int ModuleNumber) |
{ |
unsigned long mask=0; |
VME_A24D16_R(ModuleAddress[ModuleNumber] + CAENV262_NIMIN,&mask); |
//printf("V262_MaskIn %04x\n", mask); |
return mask; |
} |
|
|
int _VI_FUNC V262_LevelInput(int ModuleNumber, int input) |
{ |
if((input < 0) || (input > 3)) return 0; |
return (V262_MaskIn(ModuleNumber) & (1<<input)); |
} |
|
int _VI_FUNC V262_PulseOutput(int ModuleNumber, int output) |
{ |
if((output < 0) || (output > 3)) return -1; |
return V262_MaskOut(ModuleNumber,CAENV262_SHPOUT, 1 << output); |
} |
|
|
int _VI_FUNC V262_LevelOutput(int ModuleNumber, int output, int level) |
{ |
if((output < 0) || (output > 3)) return -1; |
if (level) m_OutputMaskLevel |= (1 << output); |
else m_OutputMaskLevel &= ~(1 << output); |
return V262_MaskOut(ModuleNumber,CAENV262_NIMOUT, m_OutputMaskLevel ); |
} |
|
int _VI_FUNC V262_EclOutput(int ModuleNumber, int output, int level) |
{ |
if((output < 0) || (output > 16)) return -1; |
if (level) m_OutputMaskEcl |= (1 << output); |
else m_OutputMaskEcl &= ~(1 << output); |
return V262_MaskOut(ModuleNumber,CAENV262_ECLOUT, m_OutputMaskEcl ); |
} |
|
|