コード例 #1
0
ファイル: CAENVMEDemoVme.c プロジェクト: bianle/daq
void CaenVmeRead(int32_t BHandle, man_par_t *man)
{
    uint32_t            i,old_data=0 ;
    CVErrorCodes        ret,old_ret=cvSuccess;


    if(man->dtsize == cvD64)
    {
        con_printf(" Can't execute a D64 Read Cycle");
        return ;
    }

    if(man->ncyc == 0)                          // Infinite Loop
        con_printf_xy(X_COMM,Y_COMM+2," Running ...    Press any key to stop.");

    for (i=0; ((man->ncyc==0) || (i<man->ncyc)) && !con_kbhit(); i++)
    {

        ret = CAENVME_ReadCycle(BHandle,man->addr,&man->data,man->am,man->dtsize);

        if((i==0) || (ret != old_ret))
        {
            gotoxy(X_COMM,Y_COMM) ;

            switch (ret)
            {
            case cvSuccess   : con_printf(" Cycle(s) completed normally\n");
                if((i==0) || (old_data != man->data))  
                {                    
                    if( man->dtsize == cvD32 )
                        con_printf(" Data Read : %08X",man->data);
                    if( man->dtsize == cvD16 )
                        con_printf(" Data Read : %04X",man->data & 0xffff);
                    if( man->dtsize == cvD8 )
                        con_printf(" Data Read : %02X",man->data & 0xff);
                }
                break ;
            case cvBusError      : con_printf(" Bus Error !!!");
                break ;                            
            case cvCommError : con_printf(" Communication Error !!!");
                break ;
            default          : con_printf(" Unknown Error !!!");
                break ;
            }
        }

        old_data = man->data;
        old_ret = ret;

        if(man->autoinc)
        {
            man->addr += man->dtsize;                       // Increment address (+1 or +2 or +4)       
            con_printf_xy(X_ADDR,Y_ADDR,"%08X]",man->addr);     // Update the screen
        }
    }
    
    if(man->ncyc == 0)
        clear_line(Y_COMM+2);
}
コード例 #2
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read T5 Register @ BA + 0x16 (T5 = Clock to Convert Delay)
// t5 = 40 + T5*20 ns , 2<=T5<=511
CVErrorCodes V551_Sequencer::ReadT5Register (unsigned int &T5)
{
    uint16_t pattern = 0;
    CVErrorCodes droopy = CAENVME_ReadCycle (controllerHandle, baseAddress + 0x16, &pattern, cvA32_U_DATA, cvD16);
    if (droopy != cvSuccess)
        return droopy;

    T5 = pattern & 0x1FF;
    return droopy;
}
コード例 #3
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read Number of channels @ BA + 0xC
CVErrorCodes V551_Sequencer::ReadNumberOfChannels (unsigned int &numberOfChannels)
{
    uint16_t pattern = 0;
    CVErrorCodes droopy = CAENVME_ReadCycle (controllerHandle, baseAddress + 0xC, &pattern,
                                             cvA32_U_DATA, cvD16);
    if (droopy != cvSuccess)
        return droopy;

    numberOfChannels = pattern & 0x7FF;	//0x7FF = (dec) 2047 = (bin) 11111111111
    return droopy;
}
コード例 #4
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read T2 Register @ BA + 0x10 (T2 = Hold to Sequence Delay)
// t2 = 130 + T2*20 (+/-) 10 ns , 10<=T2<=511
CVErrorCodes V551_Sequencer::ReadT2Register (unsigned int &T2)
{
    uint16_t pattern = 0;

    CVErrorCodes droopy = CAENVME_ReadCycle (controllerHandle, baseAddress + 0x10, &pattern, cvA32_U_DATA, cvD16);
    if (droopy != cvSuccess)
        return droopy;

    T2 = pattern & 0x1FF;	// 0x1FF = (dec) 511 = (bin) 111111111

    return droopy;
}
コード例 #5
0
	CAENVME_API parse_and_call_CAENVME_ReadCycle( char* arguments ){
		// parse string, call CAENVMElib function
		CAENVME_API caen_api_return_value;
		uint32_t address;
		// uint16_t value;
		char bytes_to_read[2]; // 16 bits
		// printf("Got arguments:\n%s\n", arguments);
		sscanf (arguments, "%x", &address);
		printf("Reading address: %x\n", address);
		caen_api_return_value = CAENVME_ReadCycle( bridge_handler, address, bytes_to_read, cvA32_U_DATA, cvD16 );
		printf("Read value: %02x%02x\n", bytes_to_read[1], bytes_to_read[0]);
		return caen_api_return_value;
	}
コード例 #6
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read Test Register @ BA+0xA
CVErrorCodes V551_Sequencer::ReadTestRegister (bool & testMode, bool & clockLevel, bool & shiftInLevel, bool & testPulseLevel)
{
    uint16_t pattern = 0;
    CVErrorCodes droopy = CAENVME_ReadCycle (controllerHandle, baseAddress + 0xA, &pattern, cvA32_U_DATA, cvD16);
    if (droopy != cvSuccess)
        return droopy;

    testMode = pattern & 0x1;
    clockLevel = pattern & 0x2;
    shiftInLevel = pattern & 0x4;
    testPulseLevel = pattern & 0x8;

    return droopy;

}
コード例 #7
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read Status Register @ BA+0x8
CVErrorCodes V551_Sequencer::ReadStatusRegister (bool & internalDelay, bool & veto, bool & autoTrigger, bool & dataReady, bool & busy, bool & activeSequence)
{
    uint16_t pattern = 0;	//initialize 16bit pattern by filling it with zeros and get the pattern from...

    CVErrorCodes droopy = CAENVME_ReadCycle (controllerHandle, baseAddress + 0x8, &pattern, cvA32_U_DATA, cvD16);
    if (droopy != cvSuccess)
        return droopy;

    //Now check with bitwise "AND" if each bit is set:
    internalDelay = pattern & 0x1;	//checks LSB
    veto = pattern & 0x2;
    autoTrigger = pattern & 0x4;
    dataReady = pattern & 0x8;
    busy = pattern & 0x10;
    activeSequence = pattern & 0x20;

    return droopy;
}
コード例 #8
0
ファイル: CAEN_V814.cpp プロジェクト: cmsromadaq/H4DAQ
int CAEN_V814::Init()
{
  int status=0;
  ostringstream s; s << "[CAEN_V814]::[INFO]::++++++ CAEN V814 INIT ++++++";
  Log(s.str(),1);
  if (handle_<0)
    return ERR_CONF_NOT_FOUND;
  if (!IsConfigured())
    return ERR_CONF_NOT_FOUND;

  //Read Version to check connection
  WORD data=0;
  status |= CAENVME_ReadCycle(handle_,configuration_.baseAddress+CAEN_V814_VERSION_ADD,&data,CAEN_V814_ADDRESSMODE,CAEN_V814_DATAWIDTH);
  if (status)
    {
      s.str(""); s << "[CAEN_V814]::[ERROR]::Cannot open V814 board @0x" << std::hex << configuration_.baseAddress << std::dec << " " << status; 
      Log(s.str(),1);
      return ERR_OPEN;
    }    

  int version = (data&0xF000)>>12;
  int serial =  (data&0x0FFF);

  s.str(""); s << "[CAEN_V814]::[INFO]::Open V814 board @0x" << std::hex << configuration_.baseAddress << std::dec << " Version " << version << " S/N " << serial; 
  Log(s.str(),1);

  status |= SetPatternInhibit();

#ifdef CAEN_V814_VERBOSE
  s.str(""); s << "[CAEN_V814]::[INFO]::Pattern Mask has been set to " << configuration_.patternMask;
  Log(s.str(),1);
#endif
  status |= SetThreshold(-1);
#ifdef CAEN_V814_VERBOSE
  s.str(""); s << "[CAEN_V814]::[INFO]::All Thresholds have been set";
  Log(s.str(),1);
#endif

  for (unsigned i=0;i<CAEN_V814_CHANNELS;++i)
    if (configuration_.chThreshold[i]>0)
      {
	status |= SetThreshold(i);
#ifdef CAEN_V814_VERBOSE
	s.str(""); s << "[CAEN_V814]::[INFO]::Set specific threshold for Ch" <<i << " to 0x" << configuration_.chThreshold[i];
	Log(s.str(),1);
#endif
      }

  status|=SetMajorityThreshold(); // single 0x6 double 0x13 triple 0x1F

#ifdef CAEN_V814_VERBOSE
  s.str(""); s << "[CAEN_V814]::[INFO]::Majority Threshold has been set to 0x" << configuration_.majorityThreshold;
  Log(s.str(),1);
#endif

  status|=SetOutputWidth();

#ifdef CAEN_V814_VERBOSE
  s.str(""); s << "[CAEN_V814]::[INFO]::Output Width has been set to 0x" << configuration_.outputWidth;
  Log(s.str(),1);
#endif

  if (status)
    {
      s.str(""); s << "[CAEN_V814]::[ERROR]::Cannot config V814 @0x" << std::hex << configuration_.baseAddress << std::dec; 
      Log(s.str(),1);
      return ERR_OPEN;
    }    
  
  s.str(""); s << "[CAEN_V814]::[INFO]::++++++ CAEN V814 CONFIGURED ++++++";  
  Log(s.str(),1);
  
  return 0;
}
コード例 #9
0
ファイル: handle_trg.cpp プロジェクト: gtortone/vme2net
int bs_read(void) {

   int data;
   CAENVME_ReadCycle(BHandle, BASEADDR + 0x108, &data, cvA32_U_DATA, cvD16);
   return(data);
}
コード例 #10
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
//	Read Version and Serial number of Module @ BA + FE
CVErrorCodes V551_Sequencer::ReadModuleVersionSerial (uint16_t & moduleVersionSerial)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFE, &moduleVersionSerial, cvA32_U_DATA, cvD16);
}
コード例 #11
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read Manufacturer's Specs of Module @ BA + FC
CVErrorCodes V551_Sequencer::ReadModuleManufacturerSpecs (uint16_t & moduleManufacturerSpecs)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFC, &moduleManufacturerSpecs, cvA32_U_DATA, cvD16);
}
コード例 #12
0
ファイル: V551_Sequencer.cpp プロジェクト: nkarast/NTUADAQ
// Read Fixed Code of Module @ BA + 0xFA
CVErrorCodes V551_Sequencer::ReadModuleFixedCode (uint16_t & moduleFixedCode)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFA, &moduleFixedCode, cvA32_U_DATA, cvD16);
}
コード例 #13
0
ファイル: V6521M.c プロジェクト: brandonelman/vme_daq
CVErrorCodes read_from_v6521m(uint32_t vme_addr){
  CVDataWidth data_size = cvD16;
  CVAddressModifier addr_mode = cvA32_U_DATA;
  vme_addr = vme_addr + V6521M_BASE_ADDRESS;
  return CAENVME_ReadCycle(handle, vme_addr, &hv_data, addr_mode, data_size);
}
コード例 #14
0
// Read Version and Serial number of Module @ BA + FE
CVErrorCodes V462_GateGenerator::ReadModuleVersionSerial (uint16_t &moduleVersionSerial)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFE, &moduleVersionSerial, cvA24_U_DATA, cvD16);
}
コード例 #15
0
// Read Manufacturer's Specs of Module @ BA + FC
CVErrorCodes V462_GateGenerator::ReadModuleManufacturerSpecs (uint16_t &moduleManufacturerSpecs)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFC, &moduleManufacturerSpecs, cvA24_U_DATA, cvD16);
}
コード例 #16
0
// Read Fixed Code of Module @ BA + 0xFA
CVErrorCodes V462_GateGenerator::ReadModuleFixedCode (uint16_t &moduleFixedCode)
{
    return CAENVME_ReadCycle (controllerHandle, baseAddress + 0xFA, &moduleFixedCode, cvA24_U_DATA, cvD16);
}