| 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 ); |
| } |
| |
| |