• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

beamtime/gsi-aug12/get4v10/mbs/vftxlib.h (r4864/r3846)

Go to the documentation of this file.
00001 //            VFTX 10ps FPGA TDC: 
00002 //         FPGA based TDC with 16-32 channels
00003 //           ======
00004 //        include file
00005 //       (for implementation cf source file)
00006 //
00007 //  P.-A. Loizeau (PI, Uni-HD) June 2012
00008 //  Based on "vulomdef_tdc.h" P.-A. Loizeau (PI, Uni-HD) June 2010
00009 //  Based on "f_user.c" by N.Kurz (EE, GSI) 8 July 2010
00010 //  Based on "vulom3def.h" by J. Frühauf (GSI) November  2009
00011 //
00012 //-----------------------------------------------------------
00013 #ifndef VFTX_DEF_TDC
00014 #define VFTX_DEF_TDC
00015 
00016 #ifdef GSI_MBS // N.Kurz, EE, GSI, 4-Sep-2007
00017  #define printf printm
00018 #endif // MBS_MBS
00019 
00020 //#define TDC_DEBUG
00021 
00022 #define TDC_N_CHA        32 
00023 
00024 /**************** FPGA TDC **********************/
00025 #define TDC_CHAN_ENABLE    0x00   // r/w 32b
00026 #define TDC_TRIGGER_ENABLE 0x04   // r/w 32b 
00027 #define TDC_POSS_RESET     0x08   // r/w  1b ?+  8b?
00028    #define TDC_PR_POSSRST       0x00000001    // 1st bit is poss reset
00029    #define TDC_PR_VERSION_MAJOR 0xF0000000    // last hex is X of vX.Y
00030    #define TDC_PR_VERSION_MAJOR_SHIFT 28
00031    #define TDC_PR_VERSION_MINOR 0x0F000000    // prev hex is Y of vX.Y
00032    #define TDC_PR_VERSION_MINOR_SHIFT 24
00033 #define TDC_READY_RESET    0x0C   // r/w  1b
00034 #define TDC_RESET          0x10   // r/w  32b
00035 #define TDC_STATUS         0x14   // r    3b + 16b
00036    #define TDC_STATUS_READY          0x00000001
00037    #define TDC_STATUS_POSS           0x00000002
00038    #define TDC_STATUS_POSS_SHIFT            1
00039    #define TDC_STATUS_RESET          0x00000004
00040    #define TDC_STATUS_RESET_SHIFT           2
00041    #define TDC_STATUS_EVT_SIZE       0x00001FF0  // Mask for 16 channels!!!!!
00042    #define TDC_STATUS_EVT_SIZE_SHIFT        4
00043 #define TDC_TRIGGER_WINDOW 0x18   // r/w 11b + (4*'0') +  1b + 12b + (4*'0')
00044    #define TDC_TRIGWIN_STOP          0x000007FF
00045    #define TDC_TRIGWIN_FUTURE_F      0x00008000 
00046    #define TDC_TRIGWIN_START         0x0FFF0000
00047    #define TDC_TRIGWIN_START_MASK    0x00000FFF
00048    #define TDC_TRIGWIN_START_SHIFT         16
00049 #define TDC_DATA_FIFO      0x1C   // r   32b
00050    #define TDC_FIFO_FINE_CT          0x000007FF
00051    #define TDC_FIFO_COARSE_CT        0x01FFF800    // Coarse counter value
00052    #define TDC_FIFO_COARSE_CT_SHIFT        11
00053    #define TDC_FIFO_FUTURE_BIT       0x02000000    // Flag for hits after trigger
00054    #define TDC_FIFO_FUTURE_BIT_SHIFT       25
00055    #define TDC_FIFO_DATA_CHAN        0x7C000000
00056    #define TDC_FIFO_DATA_CHAN_SHIFT        26
00057    
00058    #define TDC_FIFO_HEADER_DATA_CNT  0x000000FF    // Data count
00059    #define TDC_FIFO_HEADER_TRIG_TYPE 0x60000000    // Trigger Type
00060    #define TDC_FIFO_HEADER_TRIG_TYPE_SHIFT 29
00061    #define TDC_FIFO_MESSAGE_TYPE     0x80000000    // Message Type 
00062    #define TDC_FIFO_MESSAGE_TYPE_SHIFT     31      // (1 = header, 0 = data)
00063 
00064 typedef struct
00065 {
00066    char name[20] ;
00067    int  moduleIndex ;
00068 
00069    long  volatile *pl_chan_ena;
00070    long  volatile *pl_trg_ena;
00071    long  volatile *pl_poss_rst;
00072    long  volatile *pl_ready_rst;
00073    long  volatile *pl_reset;
00074    long  volatile *pl_status;
00075    long  volatile *pl_trg_wind;
00076    long  volatile *pl_dat_fifo;
00077 
00078    long  volatile *pl_dat_save;
00079    long  volatile *p32_tmp;
00080 }
00081 s_vftx ;
00082 
00083 int  VFTX_TDC_SetName( s_vftx* ps_vTdc, char* newName, int newModuleIndex );
00084 
00085 // Init Pointer
00086 int  VFTX_TDC_GetPointers( s_vftx* ps_vTdc, long vTDC_VME_virt_addr );
00087 int  VFTX_TDC_PrintPointersAll( s_vftx* ps_vTdc );
00088 
00089 // Reset the triggered event scaler for all channels
00090 int  VFTX_TDC_Reset( s_vftx* ps_vTdc );
00091 int  VFTX_TDC_Reset_ChanPattern( s_vftx* ps_vTdc, unsigned channels);
00092 int  VFTX_TDC_Reset_Chan( s_vftx* ps_vTdc, unsigned char channel);
00093 // Reset Ready
00094 int  VFTX_TDC_ResetReady( s_vftx* ps_vTdc );
00095 // Reset Poss 
00096 int  VFTX_TDC_ResetPoss( s_vftx* ps_vTdc );
00097 
00098 // Set the trigger window
00099 int  VFTX_TDC_SetTriggerWindow( s_vftx* ps_vTdc, unsigned windowStart,
00100                                  unsigned windowStop, unsigned char futureFlag);
00101 
00102 // Enable/Disable channels, by block or individually
00103 int  VFTX_TDC_SetChanEnablePattern( s_vftx* ps_vTdc, unsigned channels);
00104 int  VFTX_TDC_ChannelEnable(  s_vftx* ps_vTdc, unsigned char channel );
00105 int  VFTX_TDC_ChannelDisable( s_vftx* ps_vTdc, unsigned char channel );
00106 
00107 // Enable/Disable channels/trigger, by block or individually (Pos. edge trigger)
00108 // not sure of implementation for those 2, code has to be checked again!!!!!!
00109 int  VFTX_TDC_SetTrigEnablePattern( s_vftx* ps_vTdc, unsigned channel  );
00110 int  VFTX_TDC_TriggerEnable( s_vftx* ps_vTdc, unsigned char channel  );
00111 int  VFTX_TDC_TriggerDisable( s_vftx* ps_vTdc, unsigned char channel  );
00112 
00113 int  VFTX_TDC_GetVersion( s_vftx* ps_vTdc, int* major, int* minor );
00114 int  VFTX_TDC_GetReady( s_vftx* ps_vTdc );
00115 int  VFTX_TDC_GetPoss( s_vftx* ps_vTdc );
00116 int  VFTX_TDC_GetEventSize( s_vftx* ps_vTdc );
00117 unsigned VFTX_TDC_GetChanEnablePattern( s_vftx* ps_vTdc );
00118 unsigned VFTX_TDC_GetTrigEnablePattern( s_vftx* ps_vTdc );
00119 unsigned long  VFTX_TDC_GetTriggerWindow( s_vftx* ps_vTdc );
00120 
00121 int  VFTX_TDC_PrintVersion( s_vftx* ps_vTdc );
00122 int  VFTX_TDC_PrintResetsReg( s_vftx* ps_vTdc );
00123 int  VFTX_TDC_PrintStatus( s_vftx* ps_vTdc );
00124 int  VFTX_TDC_PrintChanEnablePattern( s_vftx* ps_vTdc );
00125 int  VFTX_TDC_PrintTriggerWindow( s_vftx* ps_vTdc );
00126 
00127 int VFTX_TDC_InitTdc(s_vftx* ps_vTdc);
00128 
00129 int VFTX_TDC_ReadEvent( s_vftx*  ps_vTdc,
00130                         long  *  pl_dat);
00131 
00132 #endif // VFTX_DEF_TDC

Generated on Tue Dec 10 2013 04:52:21 for ROCsoft by  doxygen 1.7.1