cvt_V1724.c

Go to the documentation of this file.
00001 
00002 
00010 
00011 
00013 // File includes
00015 #include <memory.h>
00016 #include <string.h>
00017 #include "cvt_V1724.h"
00018 
00019 //
00020 // CAENVMELib function prototype
00021 void delay( int msec);
00022 
00024 // File local defines
00026 
00028 // Output buffer macros
00030 
00032 // Output buffer macros
00034 #define V1724_DATA_TYPE_MSK                             0xf8000000              
00036 #define V1724_GLOBAL_HEADER                             0x40000000              
00037 #define V1724_GLOBAL_TRAILER                    0x80000000              
00038 #define V1724_TDC_HEADER                                0x08000000              
00039 #define V1724_TDC_MEASURE                               0x00000000              
00040 #define V1724_TDC_ERROR                                 0x20000000              
00041 #define V1724_TDC_TRAILER                               0x18000000              
00042 #define V1724_GLOBAL_TRIGGER_TIME               0x88000000              
00043 #define V1724_FILLER                                    0xc0000000              
00045 #define IS_GLOBAL_HEADER(data)                  ((data& V1724_DATA_TYPE_MSK)== V1724_GLOBAL_HEADER)                     
00046 #define IS_GLOBAL_TRAILER(data)                 ((data& V1724_DATA_TYPE_MSK)== V1724_GLOBAL_TRAILER)            
00047 #define IS_TDC_HEADER(data)                             ((data& V1724_DATA_TYPE_MSK)== V1724_TDC_HEADER)                        
00048 #define IS_TDC_MEASURE(data)                    ((data& V1724_DATA_TYPE_MSK)== V1724_TDC_MEASURE)                       
00049 #define IS_TDC_ERROR(data)                              ((data& V1724_DATA_TYPE_MSK)== V1724_TDC_ERROR)                         
00050 #define IS_TDC_TRAILER(data)                    ((data& V1724_DATA_TYPE_MSK)== V1724_TDC_TRAILER)                       
00051 #define IS_GLOBAL_TRIGGER_TIME(data)    ((data& V1724_DATA_TYPE_MSK)== V1724_GLOBAL_TRIGGER_TIME)       
00052 #define IS_FILLER(data)                                 ((data& V1724_DATA_TYPE_MSK)== V1724_FILLER)                            
00054 #define GET_EVENT_COUNT(data)                   ((UINT32)((((UINT32)data)>>5)& 0x003fffff))                                     
00059 
00060 // Static variables declaration
00061 
00062 
00064 
00069 
00070 static const cvt_reg_table CVT_V1724_REG_TABLE[]=
00071 {
00072 //
00073 // Channel broadcast registers
00074         {CVT_V1724_BROAD_CH_CTRL_ADD,                   CVT_V1724_BROAD_CH_CTRL_AM,                     CVT_V1724_BROAD_CH_CTRL_DATA_SIZE},                             
00075         {CVT_V1724_BROAD_CH_SET_CTRL_ADD,               CVT_V1724_BROAD_CH_SET_CTRL_AM,         CVT_V1724_BROAD_CH_SET_CTRL_DATA_SIZE},                 
00076         {CVT_V1724_BROAD_CH_CLEAR_CTRL_ADD,             CVT_V1724_BROAD_CH_CLEAR_CTRL_AM,       CVT_V1724_BROAD_CH_CLEAR_CTRL_DATA_SIZE},               
00077         {CVT_V1724_BROAD_CH_BLKSIZE_ADD,                CVT_V1724_BROAD_CH_BLKSIZE_AM,          CVT_V1724_BROAD_CH_BLKSIZE_DATA_SIZE},                  
00078         {CVT_V1724_BROAD_CH_BLK_REM_NUM_ADD,    CVT_V1724_BROAD_CH_BLK_REM_NUM_AM,      CVT_V1724_BROAD_CH_BLK_REM_NUM_DATA_SIZE},              
00079         {CVT_V1724_BROAD_CH_READ_CONF_ADD,              CVT_V1724_BROAD_CH_READ_CONF_AM,        CVT_V1724_BROAD_CH_READ_CONF_DATA_SIZE},                
00080 //
00081 // VME registers
00082         {CVT_V1724_CONTROL_ADD,                                 CVT_V1724_CONTROL_AM,                           CVT_V1724_CONTROL_DATA_SIZE},                                   
00083         {CVT_V1724_STATUS_ADD,                                  CVT_V1724_STATUS_AM,                            CVT_V1724_STATUS_DATA_SIZE},                                    
00084         {CVT_V1724_INT_LEVEL_ADD,                               CVT_V1724_INT_LEVEL_AM,                         CVT_V1724_INT_LEVEL_DATA_SIZE},                                 
00085         {CVT_V1724_INT_VECTOR_ADD,                              CVT_V1724_INT_VECTOR_AM,                        CVT_V1724_INT_VECTOR_DATA_SIZE},                                
00086         {CVT_V1724_GEO_ADDRESS_ADD,                             CVT_V1724_GEO_ADDRESS_AM,                       CVT_V1724_GEO_ADDRESS_DATA_SIZE},                               
00087         {CVT_V1724_MCST_CBLT_ADDRESS_ADD,               CVT_V1724_MCST_CBLT_ADDRESS_AM,         CVT_V1724_MCST_CBLT_ADDRESS_DATA_SIZE},                 
00088         {CVT_V1724_MCST_CBLT_CTRL_ADD,                  CVT_V1724_MCST_CBLT_CTRL_AM,            CVT_V1724_MCST_CBLT_CTRL_DATA_SIZE},                    
00089         {CVT_V1724_SW_RESET_ADD,                                CVT_V1724_SW_RESET_AM,                          CVT_V1724_SW_RESET_DATA_SIZE},                                  
00090         {CVT_V1724_SW_CLEAR_ADD,                                CVT_V1724_SW_CLEAR_AM,                          CVT_V1724_SW_CLEAR_DATA_SIZE},                                  
00091         {CVT_V1724_SW_TRIGGER_ADD,                              CVT_V1724_SW_TRIGGER_AM,                        CVT_V1724_SW_TRIGGER_DATA_SIZE},                                
00092         {CVT_V1724_TRIGGER_ENABLE_ADD,                  CVT_V1724_TRIGGER_ENABLE_AM,            CVT_V1724_TRIGGER_ENABLE_DATA_SIZE},                    
00093         {CVT_V1724_BLT_EVENT_NUM_ADD,                   CVT_V1724_BLT_EVENT_NUM_AM,                     CVT_V1724_BLT_EVENT_NUM_DATA_SIZE},                             
00094         {CVT_V1724_FW_REV_ADD,                                  CVT_V1724_FW_REV_AM,                            CVT_V1724_FW_REV_DATA_SIZE},                                    
00095         {CVT_V1724_TEST_REG_ADD,                                CVT_V1724_TEST_REG_AM,                          CVT_V1724_TEST_REG_DATA_SIZE},                                  
00096         {CVT_V1724_FLASH_EN_ADD,                                CVT_V1724_FLASH_EN_AM,                          CVT_V1724_FLASH_EN_DATA_SIZE},                                  
00097         {CVT_V1724_FLASH_ADD,                                   CVT_V1724_FLASH_AM,                                     CVT_V1724_FLASH_DATA_SIZE},                                             
00098         {CVT_V1724_DUMMY16_ADD,                                 CVT_V1724_DUMMY16_AM,                           CVT_V1724_DUMMY16_DATA_SIZE},                                   
00099         {CVT_V1724_DUMMY32_ADD,                                 CVT_V1724_DUMMY32_AM,                           CVT_V1724_DUMMY32_DATA_SIZE},                                   
00100         {CVT_V1724_POST_TRIG_ADD,                               CVT_V1724_POST_TRIG_AM,                         CVT_V1724_POST_TRIG_DATA_SIZE},                                 
00101         {CVT_V1724_FRONT_PANEL_IO_ADD,                  CVT_V1724_FRONT_PANEL_IO_AM,            CVT_V1724_FRONT_PANEL_IO_DATA_SIZE},                    
00102         {CVT_V1724_FRONT_PANEL_IO_CTRL_ADD,             CVT_V1724_FRONT_PANEL_IO_CTRL_AM,       CVT_V1724_FRONT_PANEL_IO_CTRL_DATA_SIZE},               
00103 //
00104 // CH 0
00105         {CVT_V1724_CH0_THRESHOLD_ADD,                   CVT_V1724_CH0_THRESHOLD_AM,                     CVT_V1724_CH0_THRESHOLD_DATA_SIZE},                             
00106         {CVT_V1724_CH0_THR_SAMPLE_ADD,                  CVT_V1724_CH0_THR_SAMPLE_AM,            CVT_V1724_CH0_THR_SAMPLE_DATA_SIZE},                    
00107         {CVT_V1724_CH0_STATUS_ADD,                              CVT_V1724_CH0_STATUS_AM,                        CVT_V1724_CH0_STATUS_DATA_SIZE},                                
00108         {CVT_V1724_CH0_FW_REV_ADD,                              CVT_V1724_CH0_FW_REV_AM,                        CVT_V1724_CH0_FW_REV_DATA_SIZE},                                
00109         {CVT_V1724_CH0_READ_BLK_TRIG_ADD,               CVT_V1724_CH0_READ_BLK_TRIG_AM,         CVT_V1724_CH0_READ_BLK_TRIG_DATA_SIZE},                 
00110         {CVT_V1724_CH0_BLK_WRI_NUM_ADD,                 CVT_V1724_CH0_BLK_WRI_NUM_AM,           CVT_V1724_CH0_BLK_WRI_NUM_DATA_SIZE},                   
00111         {CVT_V1724_CH0_DAC_CONF_ADD,                    CVT_V1724_CH0_DAC_CONF_AM,                      CVT_V1724_CH0_DAC_CONF_DATA_SIZE},                              
00112         {CVT_V1724_CH0_CONF_ADD,                                CVT_V1724_CH0_CONF_AM,                          CVT_V1724_CH0_CONF_DATA_SIZE},                                  
00113         {CVT_V1724_CH0_DEBUG_ADD,                               CVT_V1724_CH0_DEBUG_AM,                         CVT_V1724_CH0_DEBUG_DATA_SIZE},                                 
00114 //
00115 // CH 1
00116         {CVT_V1724_CH1_THRESHOLD_ADD,                   CVT_V1724_CH1_THRESHOLD_AM,                     CVT_V1724_CH1_THRESHOLD_DATA_SIZE},                             
00117         {CVT_V1724_CH1_THR_SAMPLE_ADD,                  CVT_V1724_CH1_THR_SAMPLE_AM,            CVT_V1724_CH1_THR_SAMPLE_DATA_SIZE},                    
00118         {CVT_V1724_CH1_STATUS_ADD,                              CVT_V1724_CH1_STATUS_AM,                        CVT_V1724_CH1_STATUS_DATA_SIZE},                                
00119         {CVT_V1724_CH1_FW_REV_ADD,                              CVT_V1724_CH1_FW_REV_AM,                        CVT_V1724_CH1_FW_REV_DATA_SIZE},                                
00120         {CVT_V1724_CH1_READ_BLK_TRIG_ADD,               CVT_V1724_CH1_READ_BLK_TRIG_AM,         CVT_V1724_CH1_READ_BLK_TRIG_DATA_SIZE},                 
00121         {CVT_V1724_CH1_BLK_WRI_NUM_ADD,                 CVT_V1724_CH1_BLK_WRI_NUM_AM,           CVT_V1724_CH1_BLK_WRI_NUM_DATA_SIZE},                   
00122         {CVT_V1724_CH1_DAC_CONF_ADD,                    CVT_V1724_CH1_DAC_CONF_AM,                      CVT_V1724_CH1_DAC_CONF_DATA_SIZE},                              
00123         {CVT_V1724_CH1_CONF_ADD,                                CVT_V1724_CH1_CONF_AM,                          CVT_V1724_CH1_CONF_DATA_SIZE},                                  
00124         {CVT_V1724_CH1_DEBUG_ADD,                               CVT_V1724_CH1_DEBUG_AM,                         CVT_V1724_CH1_DEBUG_DATA_SIZE},                                 
00125 //
00126 // CH 2
00127         {CVT_V1724_CH2_THRESHOLD_ADD,                   CVT_V1724_CH2_THRESHOLD_AM,                     CVT_V1724_CH2_THRESHOLD_DATA_SIZE},                             
00128         {CVT_V1724_CH2_THR_SAMPLE_ADD,                  CVT_V1724_CH2_THR_SAMPLE_AM,            CVT_V1724_CH2_THR_SAMPLE_DATA_SIZE},                    
00129         {CVT_V1724_CH2_STATUS_ADD,                              CVT_V1724_CH2_STATUS_AM,                        CVT_V1724_CH2_STATUS_DATA_SIZE},                                
00130         {CVT_V1724_CH2_FW_REV_ADD,                              CVT_V1724_CH2_FW_REV_AM,                        CVT_V1724_CH2_FW_REV_DATA_SIZE},                                
00131         {CVT_V1724_CH2_READ_BLK_TRIG_ADD,               CVT_V1724_CH2_READ_BLK_TRIG_AM,         CVT_V1724_CH2_READ_BLK_TRIG_DATA_SIZE},                 
00132         {CVT_V1724_CH2_BLK_WRI_NUM_ADD,                 CVT_V1724_CH2_BLK_WRI_NUM_AM,           CVT_V1724_CH2_BLK_WRI_NUM_DATA_SIZE},                   
00133         {CVT_V1724_CH2_DAC_CONF_ADD,                    CVT_V1724_CH2_DAC_CONF_AM,                      CVT_V1724_CH2_DAC_CONF_DATA_SIZE},                              
00134         {CVT_V1724_CH2_CONF_ADD,                                CVT_V1724_CH2_CONF_AM,                          CVT_V1724_CH2_CONF_DATA_SIZE},                                  
00135         {CVT_V1724_CH2_DEBUG_ADD,                               CVT_V1724_CH2_DEBUG_AM,                         CVT_V1724_CH2_DEBUG_DATA_SIZE},                                 
00136 //
00137 // CH 3
00138         {CVT_V1724_CH3_THRESHOLD_ADD,                   CVT_V1724_CH3_THRESHOLD_AM,                     CVT_V1724_CH3_THRESHOLD_DATA_SIZE},                             
00139         {CVT_V1724_CH3_THR_SAMPLE_ADD,                  CVT_V1724_CH3_THR_SAMPLE_AM,            CVT_V1724_CH3_THR_SAMPLE_DATA_SIZE},                    
00140         {CVT_V1724_CH3_STATUS_ADD,                              CVT_V1724_CH3_STATUS_AM,                        CVT_V1724_CH3_STATUS_DATA_SIZE},                                
00141         {CVT_V1724_CH3_FW_REV_ADD,                              CVT_V1724_CH3_FW_REV_AM,                        CVT_V1724_CH3_FW_REV_DATA_SIZE},                                
00142         {CVT_V1724_CH3_READ_BLK_TRIG_ADD,               CVT_V1724_CH3_READ_BLK_TRIG_AM,         CVT_V1724_CH3_READ_BLK_TRIG_DATA_SIZE},                 
00143         {CVT_V1724_CH3_BLK_WRI_NUM_ADD,                 CVT_V1724_CH3_BLK_WRI_NUM_AM,           CVT_V1724_CH3_BLK_WRI_NUM_DATA_SIZE},                   
00144         {CVT_V1724_CH3_DAC_CONF_ADD,                    CVT_V1724_CH3_DAC_CONF_AM,                      CVT_V1724_CH3_DAC_CONF_DATA_SIZE},                              
00145         {CVT_V1724_CH3_CONF_ADD,                                CVT_V1724_CH3_CONF_AM,                          CVT_V1724_CH3_CONF_DATA_SIZE},                                  
00146         {CVT_V1724_CH3_DEBUG_ADD,                               CVT_V1724_CH3_DEBUG_AM,                         CVT_V1724_CH3_DEBUG_DATA_SIZE},                                 
00147 //
00148 // CH 4
00149         {CVT_V1724_CH4_THRESHOLD_ADD,                   CVT_V1724_CH4_THRESHOLD_AM,                     CVT_V1724_CH4_THRESHOLD_DATA_SIZE},                             
00150         {CVT_V1724_CH4_THR_SAMPLE_ADD,                  CVT_V1724_CH4_THR_SAMPLE_AM,            CVT_V1724_CH4_THR_SAMPLE_DATA_SIZE},                    
00151         {CVT_V1724_CH4_STATUS_ADD,                              CVT_V1724_CH4_STATUS_AM,                        CVT_V1724_CH4_STATUS_DATA_SIZE},                                
00152         {CVT_V1724_CH4_FW_REV_ADD,                              CVT_V1724_CH4_FW_REV_AM,                        CVT_V1724_CH4_FW_REV_DATA_SIZE},                                
00153         {CVT_V1724_CH4_READ_BLK_TRIG_ADD,               CVT_V1724_CH4_READ_BLK_TRIG_AM,         CVT_V1724_CH4_READ_BLK_TRIG_DATA_SIZE},                 
00154         {CVT_V1724_CH4_BLK_WRI_NUM_ADD,                 CVT_V1724_CH4_BLK_WRI_NUM_AM,           CVT_V1724_CH4_BLK_WRI_NUM_DATA_SIZE},                   
00155         {CVT_V1724_CH4_DAC_CONF_ADD,                    CVT_V1724_CH4_DAC_CONF_AM,                      CVT_V1724_CH4_DAC_CONF_DATA_SIZE},                              
00156         {CVT_V1724_CH4_CONF_ADD,                                CVT_V1724_CH4_CONF_AM,                          CVT_V1724_CH4_CONF_DATA_SIZE},                                  
00157         {CVT_V1724_CH4_DEBUG_ADD,                               CVT_V1724_CH4_DEBUG_AM,                         CVT_V1724_CH4_DEBUG_DATA_SIZE},                                 
00158 //
00159 // CH 5
00160         {CVT_V1724_CH5_THRESHOLD_ADD,                   CVT_V1724_CH5_THRESHOLD_AM,                     CVT_V1724_CH5_THRESHOLD_DATA_SIZE},                             
00161         {CVT_V1724_CH5_THR_SAMPLE_ADD,                  CVT_V1724_CH5_THR_SAMPLE_AM,            CVT_V1724_CH5_THR_SAMPLE_DATA_SIZE},                    
00162         {CVT_V1724_CH5_STATUS_ADD,                              CVT_V1724_CH5_STATUS_AM,                        CVT_V1724_CH5_STATUS_DATA_SIZE},                                
00163         {CVT_V1724_CH5_FW_REV_ADD,                              CVT_V1724_CH5_FW_REV_AM,                        CVT_V1724_CH5_FW_REV_DATA_SIZE},                                
00164         {CVT_V1724_CH5_READ_BLK_TRIG_ADD,               CVT_V1724_CH5_READ_BLK_TRIG_AM,         CVT_V1724_CH5_READ_BLK_TRIG_DATA_SIZE},                 
00165         {CVT_V1724_CH5_BLK_WRI_NUM_ADD,                 CVT_V1724_CH5_BLK_WRI_NUM_AM,           CVT_V1724_CH5_BLK_WRI_NUM_DATA_SIZE},                   
00166         {CVT_V1724_CH5_DAC_CONF_ADD,                    CVT_V1724_CH5_DAC_CONF_AM,                      CVT_V1724_CH5_DAC_CONF_DATA_SIZE},                              
00167         {CVT_V1724_CH5_CONF_ADD,                                CVT_V1724_CH5_CONF_AM,                          CVT_V1724_CH5_CONF_DATA_SIZE},                                  
00168         {CVT_V1724_CH5_DEBUG_ADD,                               CVT_V1724_CH5_DEBUG_AM,                         CVT_V1724_CH5_DEBUG_DATA_SIZE},                                 
00169 //
00170 // CH 6
00171         {CVT_V1724_CH6_THRESHOLD_ADD,                   CVT_V1724_CH6_THRESHOLD_AM,                     CVT_V1724_CH6_THRESHOLD_DATA_SIZE},                             
00172         {CVT_V1724_CH6_THR_SAMPLE_ADD,                  CVT_V1724_CH6_THR_SAMPLE_AM,            CVT_V1724_CH6_THR_SAMPLE_DATA_SIZE},                    
00173         {CVT_V1724_CH6_STATUS_ADD,                              CVT_V1724_CH6_STATUS_AM,                        CVT_V1724_CH6_STATUS_DATA_SIZE},                                
00174         {CVT_V1724_CH6_FW_REV_ADD,                              CVT_V1724_CH6_FW_REV_AM,                        CVT_V1724_CH6_FW_REV_DATA_SIZE},                                
00175         {CVT_V1724_CH6_READ_BLK_TRIG_ADD,               CVT_V1724_CH6_READ_BLK_TRIG_AM,         CVT_V1724_CH6_READ_BLK_TRIG_DATA_SIZE},                 
00176         {CVT_V1724_CH6_BLK_WRI_NUM_ADD,                 CVT_V1724_CH6_BLK_WRI_NUM_AM,           CVT_V1724_CH6_BLK_WRI_NUM_DATA_SIZE},                   
00177         {CVT_V1724_CH6_DAC_CONF_ADD,                    CVT_V1724_CH6_DAC_CONF_AM,                      CVT_V1724_CH6_DAC_CONF_DATA_SIZE},                              
00178         {CVT_V1724_CH6_CONF_ADD,                                CVT_V1724_CH6_CONF_AM,                          CVT_V1724_CH6_CONF_DATA_SIZE},                                  
00179         {CVT_V1724_CH6_DEBUG_ADD,                               CVT_V1724_CH6_DEBUG_AM,                         CVT_V1724_CH6_DEBUG_DATA_SIZE},                                 
00180 //
00181 // CH 7
00182         {CVT_V1724_CH7_THRESHOLD_ADD,                   CVT_V1724_CH7_THRESHOLD_AM,                     CVT_V1724_CH7_THRESHOLD_DATA_SIZE},                             
00183         {CVT_V1724_CH7_THR_SAMPLE_ADD,                  CVT_V1724_CH7_THR_SAMPLE_AM,            CVT_V1724_CH7_THR_SAMPLE_DATA_SIZE},                    
00184         {CVT_V1724_CH7_STATUS_ADD,                              CVT_V1724_CH7_STATUS_AM,                        CVT_V1724_CH7_STATUS_DATA_SIZE},                                
00185         {CVT_V1724_CH7_FW_REV_ADD,                              CVT_V1724_CH7_FW_REV_AM,                        CVT_V1724_CH7_FW_REV_DATA_SIZE},                                
00186         {CVT_V1724_CH7_READ_BLK_TRIG_ADD,               CVT_V1724_CH7_READ_BLK_TRIG_AM,         CVT_V1724_CH7_READ_BLK_TRIG_DATA_SIZE},                 
00187         {CVT_V1724_CH7_BLK_WRI_NUM_ADD,                 CVT_V1724_CH7_BLK_WRI_NUM_AM,           CVT_V1724_CH7_BLK_WRI_NUM_DATA_SIZE},                   
00188         {CVT_V1724_CH7_DAC_CONF_ADD,                    CVT_V1724_CH7_DAC_CONF_AM,                      CVT_V1724_CH7_DAC_CONF_DATA_SIZE},                              
00189         {CVT_V1724_CH7_CONF_ADD,                                CVT_V1724_CH7_CONF_AM,                          CVT_V1724_CH7_CONF_DATA_SIZE},                                  
00190         {CVT_V1724_CH7_DEBUG_ADD,                               CVT_V1724_CH7_DEBUG_AM,                         CVT_V1724_CH7_DEBUG_DATA_SIZE},                                 
00192 };
00193 
00195 // Static methods declaration
00197 
00199 // Global visible variables declaration
00201 
00203 //
00204 //     B O A R D S   H A N D L I N G
00205 //
00207 
00209 // 
00211 BOOL cvt_V1724_open( cvt_V1724_data* p_data, UINT16 base_address, long vme_handle)
00212 {
00213         memset( p_data, 0, sizeof( cvt_V1724_data));
00214 
00215         // basic data initialization
00216         if( !cvt_board_open( &p_data->m_common_data, base_address, vme_handle, CVT_V1724_REG_TABLE))
00217                 return FALSE;
00218         // board specific data initialization
00219         p_data->m_common_data.set_MCST_CBLT= ( BOOL (*)( void*, UINT8, MCST_CBLT_board_pos))cvt_V1724_set_MCST_CBLT;
00220 
00221         // preallocate a suitable memory chunck for sample temporary storage
00222         p_data->m_tmp_sample_buffer_size= 16*1024;
00223         p_data->m_tmp_sample_buffer= malloc( p_data->m_tmp_sample_buffer_size* sizeof( UINT32));
00224 
00225         // HACK: to be debugged
00228         //if( !cvt_V1724_software_reset( p_data))
00229         //{
00230         //      TRACE( "cvt_V1724_open: error resetting board !\n");
00231         //      return FALSE;
00232         //}
00233 
00234         return TRUE;
00235 }
00236 
00238 // 
00240 BOOL cvt_V1724_close( cvt_V1724_data* p_data)
00241 {
00242         if( p_data->m_tmp_sample_buffer)
00243         {
00244                 free( p_data->m_tmp_sample_buffer);
00245                 p_data->m_tmp_sample_buffer= NULL;
00246                 p_data->m_tmp_sample_buffer_size= 0;
00247         }
00248         if( !cvt_board_close( &p_data->m_common_data))
00249                 return FALSE;
00250         return TRUE;
00251 }
00252 
00254 //
00255 //     L E V E L   0   A P I s
00256 //
00258 
00259 
00261 //
00262 //     L E V E L   1   A P I s
00263 //
00265 
00267 //
00268 //     L E V E L   2   A P I s
00269 //
00271 
00272 
00274 // 
00276 BOOL cvt_V1724_read_buffer( cvt_V1724_data* p_data, UINT8 ch_index, UINT16* p_buff, UINT32* p_buff_size)
00277 {
00278         static const UINT16 READ_BLK_TRIG[ CVT_V1724_MAX_CHANNEL]=
00279         {
00280                 CVT_V1724_CH0_READ_BLK_TRIG_INDEX,                              
00281                 CVT_V1724_CH1_READ_BLK_TRIG_INDEX,                              
00282                 CVT_V1724_CH2_READ_BLK_TRIG_INDEX,                              
00283                 CVT_V1724_CH3_READ_BLK_TRIG_INDEX,                              
00284                 CVT_V1724_CH4_READ_BLK_TRIG_INDEX,                              
00285                 CVT_V1724_CH5_READ_BLK_TRIG_INDEX,                              
00286                 CVT_V1724_CH6_READ_BLK_TRIG_INDEX,                              
00287                 CVT_V1724_CH7_READ_BLK_TRIG_INDEX,                              
00288         };
00289 
00290         static const UINT16 BLK_WRI_NUM[ CVT_V1724_MAX_CHANNEL]=
00291         {
00292                 CVT_V1724_CH0_BLK_WRI_NUM_INDEX,                                
00293                 CVT_V1724_CH1_BLK_WRI_NUM_INDEX,                                
00294                 CVT_V1724_CH2_BLK_WRI_NUM_INDEX,                                
00295                 CVT_V1724_CH3_BLK_WRI_NUM_INDEX,                                
00296                 CVT_V1724_CH4_BLK_WRI_NUM_INDEX,                                
00297                 CVT_V1724_CH5_BLK_WRI_NUM_INDEX,                                
00298                 CVT_V1724_CH6_BLK_WRI_NUM_INDEX,                                
00299                 CVT_V1724_CH7_BLK_WRI_NUM_INDEX,                                
00300         };
00301 
00302         UINT32 reg_value= 0;
00303         UINT32 num_blocks= 0;
00304 
00305         //
00306         // input param check
00307         if( ch_index>= CVT_V1724_MAX_CHANNEL)
00308         {
00309                 TRACE1( "V1724 cvt_V1724_read_buffer bad channel '%d'!\n", ch_index);
00310                 return FALSE;
00311         }
00312         //
00313         // read the number of events ready
00314         if( !cvt_read_reg( &p_data->m_common_data, BLK_WRI_NUM[ ch_index], &num_blocks))
00315         {
00316                 TRACE1( "V1724 cvt_V1724_read_buffer BLK_WRI_NUM[%d] read failed !\n", ch_index);
00317                 return FALSE;
00318         }
00319         if( !num_blocks)
00320         {
00321                 *p_buff_size= 0;
00322                 return TRUE;
00323         }
00324         //
00325         // read the number of entries ready 
00326 #define __FIFO_BLT
00327 #ifdef __FIFO_BLT
00328         {
00329                 UINT32 samples_to_read= 0;
00330                 UINT32 read= 0;
00331                 UINT32 i; 
00332                 if( !cvt_FIFO_BLT_read_reg( &p_data->m_common_data, READ_BLK_TRIG[ ch_index], &reg_value, 1* sizeof( UINT32), &read))
00333                 {
00334                         TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00335                         return FALSE;
00336                 }
00337                 if( !read)
00338                 {
00339                         *p_buff_size= 0;
00340                         return TRUE;
00341                 }
00342                 // Get the samples' number (16bit word)
00343                 samples_to_read= reg_value<< 1;
00344                 if( !samples_to_read)
00345                 {
00346                         *p_buff_size= 0;
00347                         return TRUE;
00348                 }
00349                 if( samples_to_read> 1024*1024)
00350                 {
00351                         // ????
00352                         // Remove blocks
00353                         if( !cvt_write( &p_data->m_common_data, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_address, &num_blocks, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_am, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_data_size))
00354                         {
00355                                 TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00356                         }
00357                         return FALSE;
00358                 }
00359                 if( ( samples_to_read>>1 )> p_data->m_tmp_sample_buffer_size)
00360                 {
00361                         p_data->m_tmp_sample_buffer_size= samples_to_read>> 1;
00362                         p_data->m_tmp_sample_buffer= realloc( p_data->m_tmp_sample_buffer, p_data->m_tmp_sample_buffer_size* sizeof( UINT32));
00363                 }
00364                 if( !cvt_FIFO_BLT_read_reg( &p_data->m_common_data, READ_BLK_TRIG[ ch_index], p_data->m_tmp_sample_buffer, samples_to_read* sizeof( UINT16), &read))
00365                 {
00366                         TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00367                         return FALSE;
00368                 }
00369                 if( !read)
00370                 {
00371                         *p_buff_size= 0;
00372                         return TRUE;
00373                 }
00374                 read>>= 1;
00375                 if( *p_buff_size> read)
00376                 {
00377                         *p_buff_size= read;
00378                 }
00379                 for( i= 0; i< ((*p_buff_size)>> 1); i++)
00380                 {
00381                         p_buff[ i<< 1]= p_data->m_tmp_sample_buffer[i]& 0xffff;
00382                         p_buff[ (i<< 1)+ 1]= (p_data->m_tmp_sample_buffer[i]>> 16)& 0xffff;
00383                 }
00384         }
00385 #else
00386         if( !cvt_read( &p_data->m_common_data, p_data->m_common_data.m_p_reg_table[ READ_BLK_TRIG[ ch_index]].m_address, &reg_value, cvA32_S_DATA, cvD32))
00387         {
00388                 TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00389                 return FALSE;
00390         }
00391         {
00392                 UINT32 samples_to_read= 0;
00393                 UINT32 read= 0;
00394                 UINT32 i; 
00395                 // Get the samples' number (16bit word)
00396                 samples_to_read= reg_value<< 1;
00397                 if( !samples_to_read)
00398                 {
00399                         *p_buff_size= 0;
00400                         return TRUE;
00401                 }
00402                 if( samples_to_read> 128*1024)
00403                 {
00404                         // ????
00405                         // Remove blocks
00406                         if( !cvt_write( &p_data->m_common_data, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_address, &num_blocks, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_am, p_data->m_common_data.m_p_reg_table[ CVT_V1724_BROAD_CH_BLK_REM_NUM_INDEX].m_data_size))
00407                         {
00408                                 TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00409                         }
00410                         return FALSE;
00411                 }
00412                 if( samples_to_read> p_data->m_tmp_sample_buffer_size)
00413                 {
00414                         p_data->m_tmp_sample_buffer_size= samples_to_read;
00415                         p_data->m_tmp_sample_buffer= realloc( p_data->m_tmp_sample_buffer, p_data->m_tmp_sample_buffer_size* sizeof( UINT32));
00416                 }
00417 
00418                 if( *p_buff_size> samples_to_read)
00419                 {
00420                         *p_buff_size= samples_to_read;
00421                 }
00422                 for( i= 0; ( i< samples_to_read); i+= 2)
00423                 {
00424                         if( !cvt_read( &p_data->m_common_data, p_data->m_common_data.m_p_reg_table[ READ_BLK_TRIG[ ch_index]].m_address, &reg_value, cvA32_S_DATA, cvD32))
00425                         {
00426                                 TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00427                                 return FALSE;
00428                         }
00429                         if( i>= (*p_buff_size- 1))
00430                                 continue;
00431                         p_buff[ i]= reg_value& 0xffff;
00432                         p_buff[ i+ 1]= (reg_value>> 16)& 0xffff;
00433                         //if( !cvt_read( &p_data->m_common_data, p_data->m_common_data.m_p_reg_table[ READ_BLK_TRIG[ ch_index]].m_address, &p_buff[ i], cvA32_S_DATA, cvD32))
00434                         //{
00435                         //      TRACE1( "V1724 cvt_V1724_read_buffer READ_BLK_TRIG[%d] read failed !\n", ch_index);
00436                         //      return FALSE;
00437                         //}
00438                 }
00439         }
00440 #endif
00441         return TRUE;
00442 }
00443 
00445 //
00447 BOOL cvt_V1724_set_trigger_mode( cvt_V1724_data* p_data, BOOL falling_edge_enable, BOOL trigger_in_enable, BOOL trigger_out_enable, BOOL ext_trigger_enable, BOOL sw_trigger_enable, UINT8 ch_trigger_enable_msk, BOOL trigger_overlap_enable, UINT32 post_trigger)
00448 {
00449         static const UINT16 CH_TRIGGER_MSK[ CVT_V1724_MAX_CHANNEL]=
00450         {
00451                 CVT_V1724_TRGEN_CH0_MSK,                
00452                 CVT_V1724_TRGEN_CH1_MSK,                
00453                 CVT_V1724_TRGEN_CH2_MSK,                
00454                 CVT_V1724_TRGEN_CH3_MSK,                
00455                 CVT_V1724_TRGEN_CH4_MSK,                
00456                 CVT_V1724_TRGEN_CH5_MSK,                
00457                 CVT_V1724_TRGEN_CH6_MSK,                
00458                 CVT_V1724_TRGEN_CH7_MSK,                
00459         };
00460 
00461         UINT16 set_msk16= 0;
00462         UINT16 clear_msk16= 0;
00463         UINT32 set_msk32= 0;
00464         UINT32 clear_msk32= 0;
00465 
00466         //
00467         // falling/rising edge enable ( Over/Under threshold)
00468         set_msk32|= ( !falling_edge_enable)? 0: CVT_V1724_CHCTRL_TRG_OUT_UNDER_EN_MSK;
00469         clear_msk32|= ( !falling_edge_enable)? CVT_V1724_CHCTRL_TRG_OUT_UNDER_EN_MSK: 0;
00470         //
00471         // trigger input enable
00472         set_msk32|= ( trigger_in_enable)? CVT_V1724_CHCTRL_TRG_IN_EN_MSK: 0;
00473         clear_msk32|= ( trigger_in_enable)? 0: CVT_V1724_CHCTRL_TRG_IN_EN_MSK;
00474         //
00475         // trigger output enable
00476         set_msk32|= ( trigger_out_enable)? CVT_V1724_CHCTRL_TRG_OUT_EN_MSK: 0;
00477         clear_msk32|= ( trigger_out_enable)? 0: CVT_V1724_CHCTRL_TRG_OUT_EN_MSK;
00478         
00479         //
00480         // setup each channel
00481         if( set_msk32)
00482         {
00483                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BROAD_CH_SET_CTRL_INDEX, &set_msk32))
00484                 {
00485                         TRACE( "V1724 BROADCAST CH CTRL write failed !\n");
00486                         return FALSE;
00487                 }
00488         }
00489         if( clear_msk32)
00490         {
00491                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BROAD_CH_CLEAR_CTRL_INDEX, &clear_msk32))
00492                 {
00493                         TRACE( "V1724 BROADCAST CH CTRL write failed !\n");
00494                         return FALSE;
00495                 }
00496         }
00497 
00498         //
00499         // Global Channel trigger enable
00500         set_msk16|= ( ch_trigger_enable_msk)? CVT_V1724_TRGEN_ENABLE_MSK: 0;
00501 
00502         //
00503         // External trigger
00504         set_msk16|= ( ext_trigger_enable)? CVT_V1724_TRGEN_EXT_MSK: 0;
00505         clear_msk16|= ( ext_trigger_enable)? 0: CVT_V1724_TRGEN_EXT_MSK;
00506         //
00507         // Software trigger
00508         set_msk16|= ( sw_trigger_enable)? CVT_V1724_TRGEN_SW_MSK: 0;
00509         clear_msk16|= ( sw_trigger_enable)? 0: CVT_V1724_TRGEN_SW_MSK;
00510         // 
00511         // Trigger Overlap
00512         set_msk16|= ( trigger_overlap_enable)? CVT_V1724_CHCTRL_TRG_OVERLAP_MSK: 0;
00513         clear_msk16|= ( trigger_overlap_enable)? 0: CVT_V1724_CHCTRL_TRG_OVERLAP_MSK;
00514 
00515         //
00516         // Channels' trigger
00517         {
00518                 int i;
00519                 for( i= 0; i< CVT_V1724_MAX_CHANNEL ; i++, ch_trigger_enable_msk>>= 1)
00520                 {
00521                         if( ch_trigger_enable_msk& 0x01)
00522                         {
00523                                 set_msk16|= CH_TRIGGER_MSK[ i];
00524                         }
00525                         else
00526                         {
00527                                 clear_msk16|= CH_TRIGGER_MSK[ i];
00528                         }
00529                 }
00530         }
00531         //
00532         // bitmask set
00533         if( set_msk16)
00534         {
00535                 if( !cvt_set_bitmask_reg( &p_data->m_common_data, CVT_V1724_TRIGGER_ENABLE_INDEX, &set_msk16))
00536                 {
00537                         TRACE( "V1724 CVT_V1724_TRIGGER_ENABLE write failed !\n");
00538                         return FALSE;
00539                 }
00540         }
00541         //
00542         // bitmask clear
00543         if( clear_msk16)
00544         {
00545                 // clear the enable bit
00546                 if( !cvt_clear_bitmask_reg( &p_data->m_common_data, CVT_V1724_TRIGGER_ENABLE_INDEX, &clear_msk16))
00547                 {
00548                         TRACE( "V1724 CVT_V1724_TRIGGER_ENABLE write failed !\n");
00549                         return FALSE;
00550                 }
00551         }
00552 
00553         //
00554         // Post Trigger
00555         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_POST_TRIG_INDEX, &post_trigger))
00556         {
00557                 TRACE( "V1724 CVT_V1724_POST_TRIG write failed !\n");
00558                 return FALSE;
00559         }
00560         
00561         return TRUE;
00562 }
00563 
00565 //
00567 BOOL cvt_V1724_set_acquisition_mode( cvt_V1724_data* p_data, BOOL sample_enable, CVT_V1724_CH_BLKSIZE block_size)
00568 {
00569         UINT32 set_msk= 0;
00570         UINT32 clear_msk= 0;
00571 
00572         //
00573         // parameter checking
00574         switch( block_size)
00575         {
00576         case CVT_V1724_CHBKSZ_512:                              
00577         case CVT_V1724_CHBKSZ_1K:                               
00578         case CVT_V1724_CHBKSZ_2K:                               
00579         case CVT_V1724_CHBKSZ_4K:                               
00580         case CVT_V1724_CHBKSZ_8K:                               
00581         case CVT_V1724_CHBKSZ_16K:                              
00582         case CVT_V1724_CHBKSZ_32K:                              
00583         case CVT_V1724_CHBKSZ_64K:                              
00584         case CVT_V1724_CHBKSZ_128K:                             
00585         case CVT_V1724_CHBKSZ_256K:                             
00586         case CVT_V1724_CHBKSZ_512K:                             
00587                 break;
00588         default:
00589                 TRACE1( "V1724 Bad block size '%d'!\n", block_size);
00590                 return FALSE;
00591         }
00592         //
00593         // Sample enable
00594         set_msk|= ( sample_enable)? CVT_V1724_CHCTRL_SAMPLE_ACQ_MSK: 0;
00595         clear_msk|= ( sample_enable)? 0: CVT_V1724_CHCTRL_SAMPLE_ACQ_MSK;
00596         
00597         //
00598         // setup each channel
00599         if( set_msk)
00600         {
00601                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BROAD_CH_SET_CTRL_INDEX, &set_msk))
00602                 {
00603                         TRACE( "V1724 CH SET CONTROL write failed !\n");
00604                         return FALSE;
00605                 }
00606         }
00607         if( clear_msk)
00608         {
00609                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BROAD_CH_CLEAR_CTRL_INDEX, &clear_msk))
00610                 {
00611                         TRACE( "V1724 CH CLEAR CONTROL write failed !\n");
00612                         return FALSE;
00613                 }               
00614         }
00615         //
00616         // Block size   
00617         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BROAD_CH_BLKSIZE_INDEX, &block_size))
00618         {
00619                 TRACE( "V1724 CH BLOCK SIZE write failed !\n");
00620                 return FALSE;
00621         }               
00622         return TRUE;
00623 }
00624 
00626 //
00628 BOOL cvt_V1724_set_dither_enable( cvt_V1724_data* p_data, UINT8 ch_msk, BOOL dither_value)
00629 {
00630         static const UINT16 CH_CONF[ CVT_V1724_MAX_CHANNEL]=
00631         {
00632                 CVT_V1724_CH0_CONF_INDEX,                       
00633                 CVT_V1724_CH1_CONF_INDEX,                       
00634                 CVT_V1724_CH2_CONF_INDEX,                       
00635                 CVT_V1724_CH3_CONF_INDEX,                       
00636                 CVT_V1724_CH4_CONF_INDEX,                       
00637                 CVT_V1724_CH5_CONF_INDEX,                       
00638                 CVT_V1724_CH6_CONF_INDEX,                       
00639                 CVT_V1724_CH7_CONF_INDEX,                       
00640         };
00641         UINT16 set_msk= 0;
00642         //
00643         // Dither enable
00644         set_msk|= CVT_V1724_CHCONF_DITHER_MSK;
00645 
00646         if( dither_value)
00647         {
00648                 int i;
00649                 for( i= 0; (i< CVT_V1724_MAX_CHANNEL )&& ch_msk; i++, ch_msk>>= 1)
00650                 {
00651                         if( !(ch_msk& 0x01))
00652                                 continue;
00653                         if( !cvt_set_bitmask_reg( &p_data->m_common_data, CH_CONF[ i], &set_msk))
00654                         {
00655                                 TRACE( "V1724 CH CONF write failed !\n");
00656                                 return FALSE;
00657                         }
00658                 }
00659         }
00660         else
00661         {
00662                 int i;
00663                 for( i= 0; (i< CVT_V1724_MAX_CHANNEL )&& ch_msk; i++, ch_msk>>= 1)
00664                 {
00665                         if( !(ch_msk& 0x01))
00666                                 continue;
00667                         if( !cvt_clear_bitmask_reg( &p_data->m_common_data, CH_CONF[ i], &set_msk))
00668                         {
00669                                 TRACE( "V1724 CH CONF write failed !\n");
00670                                 return FALSE;
00671                         }
00672                 }
00673         }
00674         return TRUE;
00675 }
00676 
00678 //
00680 BOOL cvt_V1724_set_interrupt( cvt_V1724_data* p_data, UINT8 level, UINT8 vector, UINT8 event_number)
00681 {
00682         UINT16 reg_value;
00683         //
00684         // interrupt level
00685         reg_value= level& 0x07;
00686         if( level!= reg_value)
00687         {
00688                 TRACE( "V1724 bad interrupt level !\n");
00689                 return FALSE;
00690         }
00691         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_INT_LEVEL_INDEX, &reg_value))
00692         {
00693                 TRACE( "V1724 CVT_V1724_INT_LEVEL write failed !\n");
00694                 return FALSE;
00695         }
00696         //
00697         // interrupt vector
00698         reg_value= vector;
00699         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_INT_VECTOR_INDEX, &reg_value))
00700         {
00701                 TRACE( "V1724 CVT_V1724_INT_VECTOR write failed !\n");
00702                 return FALSE;
00703         }
00704 /* HACK: not jet implemented onto board fpga
00705         //
00706         // event number (event trigger register)
00707         reg_value= event_number& 0x1f;
00708         if( event_number!= reg_value)
00709         {
00710                 TRACE( "V1724 bad interrupt event number !\n");
00711                 return FALSE;
00712         }
00713         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_EVENT_TRG_INDEX, &reg_value))
00714         {
00715                 TRACE( "V1724 CVT_V1724_EVENT_TRG write failed !\n");
00716                 return FALSE;
00717         }
00718 */
00719         return TRUE;
00720 }
00721 
00723 //
00725 BOOL cvt_V1724_set_readout_mode( cvt_V1724_data* p_data, BOOL enable_bus_error, UINT16 BLT_event_number)
00726 {
00727         UINT16 set_msk= 0;
00728         UINT16 clear_msk= 0;
00729         
00730         //
00731         // Bus error
00732         set_msk|= ( enable_bus_error)? CVT_V1724_CTRL_BERR_ENABLE_MSK: 0;
00733         clear_msk|= ( enable_bus_error)? 0: CVT_V1724_CTRL_BERR_ENABLE_MSK;
00734         
00735         //
00736         // bitmask set
00737         if( set_msk)
00738         {
00739                 if( !cvt_set_bitmask_reg( &p_data->m_common_data, CVT_V1724_CONTROL_INDEX, &set_msk))
00740                 {
00741                         TRACE( "V1724 CVT_V1724_CONTROL write failed !\n");
00742                         return FALSE;
00743                 }
00744         }
00745         //
00746         // bitmask clear
00747         if( clear_msk)
00748         {
00749                 // clear the enable bit
00750                 if( !cvt_clear_bitmask_reg( &p_data->m_common_data, CVT_V1724_CONTROL_INDEX, &clear_msk))
00751                 {
00752                         TRACE( "V1724 CVT_V1724_CONTROL write failed !\n");
00753                         return FALSE;
00754                 }
00755         }
00756 
00757         // 
00758         // BLT event number
00759         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_BLT_EVENT_NUM_INDEX, &BLT_event_number))
00760         {
00761                 TRACE( "V1724 CVT_V1724_BLT_EVENT_NUM write failed !\n");
00762                 return FALSE;
00763         }
00764 
00765         return TRUE;
00766 }
00767 
00769 // 
00771 BOOL cvt_V1724_software_reset( cvt_V1724_data* p_data)
00772 {
00773         //
00774         // Write CVT_V1724_SW_RESET register
00775         UINT16 reg_value= 0;
00776         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_RESET_INDEX, &reg_value))
00777         {
00778                 TRACE( "V1724 CVT_V1724_SW_RESET write failed !\n");
00779                 return FALSE;
00780         }
00781         return TRUE;
00782 }
00783 
00785 //
00787 BOOL cvt_V1724_data_clear( cvt_V1724_data* p_data)
00788 {
00789         //
00790         // Write CVT_V1724_SW_RESET register
00791         UINT16 reg_value= 0;
00792         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_CLEAR_INDEX, &reg_value))
00793         {
00794                 TRACE( "V1724 CVT_V1724_CLEAR_RESET write failed !\n");
00795                 return FALSE;
00796         }
00797         return TRUE;
00798 }
00799 
00801 //
00803 BOOL cvt_V1724_set_channel_offset( cvt_V1724_data* p_data, UINT8 ch_msk, UINT16 offset_value)
00804 {
00805         static const UINT16 CH_DAC_CONF[ CVT_V1724_MAX_CHANNEL]=
00806         {
00807                 CVT_V1724_CH0_DAC_CONF_INDEX,           
00808                 CVT_V1724_CH1_DAC_CONF_INDEX,           
00809                 CVT_V1724_CH2_DAC_CONF_INDEX,           
00810                 CVT_V1724_CH3_DAC_CONF_INDEX,           
00811                 CVT_V1724_CH4_DAC_CONF_INDEX,           
00812                 CVT_V1724_CH5_DAC_CONF_INDEX,           
00813                 CVT_V1724_CH6_DAC_CONF_INDEX,           
00814                 CVT_V1724_CH7_DAC_CONF_INDEX,           
00815         };
00816         UINT32 reg_value_A= 0, reg_value_B= 0;
00817         //
00818         // Channel offset
00819 
00820         //
00821         // Data for DAC A ( even channels)
00822         CVT_V1724_SET_CH_DAC_CONF( reg_value_A, offset_value);
00823         reg_value_A|= CVT_V1724_CHDAC_SET_A_MSK;
00824         //
00825         // Data for DAC B ( odd channels)
00826         CVT_V1724_SET_CH_DAC_CONF( reg_value_B, offset_value);
00827         reg_value_B|= CVT_V1724_CHDAC_SET_B_MSK;
00828         
00829         //
00830         // setup each channel
00831         {
00832                 int i;
00833                 for( i= 0; (i< CVT_V1724_MAX_CHANNEL )&& ch_msk; i++, ch_msk>>= 1)
00834                 {
00835                         if( ch_msk& 0x01)
00836                         {
00837                                 //
00838                                 // Wait for DAC !busy
00839                                 BOOL trash;
00840                                 BOOL is_dac_busy= TRUE;
00841                                 while( is_dac_busy)
00842                                 {
00843                                         // HACK insert timeout here
00844 
00845                                         if( !cvt_V1724_get_channel_status( p_data, i, &is_dac_busy, &trash, &trash, &trash))
00846                                         {
00847                                                 TRACE( "V1724 set channel offset failed !\n");
00848                                                 return FALSE;
00849                                         }
00850                                 }
00851                                 if( !cvt_write_reg( &p_data->m_common_data, CH_DAC_CONF[ i], ( i& 0x01)? &reg_value_B: &reg_value_A))
00852                                 {
00853                                         TRACE( "V1724 CH DAC CONF write failed !\n");
00854                                         return FALSE;
00855                                 }
00856                         }
00857                 }
00858         }
00859 
00860         return TRUE;
00861 }
00862 
00864 //
00866 BOOL cvt_V1724_set_channel_trigger( cvt_V1724_data* p_data, UINT8 ch_msk, UINT32 trigger_threshold, UINT32 threshold_samples)
00867 {
00868         static const UINT16 CH_TRG_THR[ CVT_V1724_MAX_CHANNEL]=
00869         {
00870                 CVT_V1724_CH0_THRESHOLD_INDEX,                                  
00871                 CVT_V1724_CH1_THRESHOLD_INDEX,                                  
00872                 CVT_V1724_CH2_THRESHOLD_INDEX,                                  
00873                 CVT_V1724_CH3_THRESHOLD_INDEX,                                  
00874                 CVT_V1724_CH4_THRESHOLD_INDEX,                                  
00875                 CVT_V1724_CH5_THRESHOLD_INDEX,                                  
00876                 CVT_V1724_CH6_THRESHOLD_INDEX,                                  
00877                 CVT_V1724_CH7_THRESHOLD_INDEX,                                  
00878         };
00879 
00880         static const UINT16 CH_TRG_THR_SAMPLE[ CVT_V1724_MAX_CHANNEL]=
00881         {
00882                 CVT_V1724_CH0_THR_SAMPLE_INDEX,                         
00883                 CVT_V1724_CH1_THR_SAMPLE_INDEX,                         
00884                 CVT_V1724_CH2_THR_SAMPLE_INDEX,                         
00885                 CVT_V1724_CH3_THR_SAMPLE_INDEX,                         
00886                 CVT_V1724_CH4_THR_SAMPLE_INDEX,                         
00887                 CVT_V1724_CH5_THR_SAMPLE_INDEX,                         
00888                 CVT_V1724_CH6_THR_SAMPLE_INDEX,                         
00889                 CVT_V1724_CH7_THR_SAMPLE_INDEX,                         
00890         };
00891 
00892         //
00893         // trigger threshold
00894         {
00895                 int i;
00896                 UINT8 tmp_msk= ch_msk;
00897                 UINT32 reg_value= trigger_threshold;
00898                 for( i= 0; (i< CVT_V1724_MAX_CHANNEL )&& tmp_msk; i++, tmp_msk>>= 1)
00899                 {
00900                         if( tmp_msk& 0x01)
00901                         {
00902                                 if( !cvt_write_reg( &p_data->m_common_data, CH_TRG_THR[ i], &reg_value))
00903                                 {
00904                                         TRACE( "V1724 CH TRIGGER THRESHOLD write failed !\n");
00905                                         return FALSE;
00906                                 }
00907                         }
00908                 }
00909         }
00910 
00911         //
00912         // trigger threshold samples
00913         {
00914                 int i;
00915                 UINT8 tmp_msk= ch_msk;
00916                 UINT32 reg_value= threshold_samples;
00917                 for( i= 0; (i< CVT_V1724_MAX_CHANNEL)&& tmp_msk; i++, tmp_msk>>= 1)
00918                 {
00919                         if( tmp_msk& 0x01)
00920                         {
00921                                 if( !cvt_write_reg( &p_data->m_common_data, CH_TRG_THR_SAMPLE[ i], &reg_value))
00922                                 {
00923                                         TRACE( "V1724 CH TRIGGER THRESHOLD SAMPLES write failed !\n");
00924                                         return FALSE;
00925                                 }
00926                         }
00927                 }
00928         }
00929         return TRUE;
00930 }
00931 
00933 //
00935 BOOL cvt_V1724_set_front_panel_IO( cvt_V1724_data* p_data, BOOL use_TTL)
00936 {
00937         UINT16 set_msk= 0;
00938         UINT16 clear_msk= 0;
00939         
00940         //
00941         // Front panel control
00942         set_msk|= ( use_TTL)? CVT_V1724_FPIO_CTRL_TTL_MSK: 0;
00943         clear_msk|= ( use_TTL)? 0: CVT_V1724_FPIO_CTRL_TTL_MSK;
00944 
00945         //
00946         // bitmask set
00947         if( set_msk)
00948         {
00949                 if( !cvt_set_bitmask_reg( &p_data->m_common_data, CVT_V1724_FRONT_PANEL_IO_CTRL_INDEX, &set_msk))
00950                 {
00951                         TRACE( "V1724 CVT_V1724_FRONT_PANEL_IO_CTRL write failed !\n");
00952                         return FALSE;
00953                 }
00954         }
00955         //
00956         // bitmask clear
00957         if( clear_msk)
00958         {
00959                 // clear the enable bit
00960                 if( !cvt_clear_bitmask_reg( &p_data->m_common_data, CVT_V1724_FRONT_PANEL_IO_CTRL_INDEX, &clear_msk))
00961                 {
00962                         TRACE( "V1724 CVT_V1724_FRONT_PANEL_IO_CTRL write failed !\n");
00963                         return FALSE;
00964                 }
00965         }
00966         return TRUE;
00967 }
00968 
00970 //
00972 BOOL cvt_V1724_software_trigger( cvt_V1724_data* p_data)
00973 {
00974         UINT16 reg_value;
00975         //
00976         // software trigger
00977         reg_value= 1;
00978         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_TRIGGER_INDEX, &reg_value))
00979         {
00980                 TRACE( "V1724 CVT_V1724_SW_TRIGGER write failed !\n");
00981                 return FALSE;
00982         }
00983         return TRUE;
00984 }
00985 
00986 
00988 //
00990 BOOL cvt_V1724_get_channel_status( cvt_V1724_data* p_data, UINT8 ch_index, BOOL *p_is_dac_busy, BOOL *p_is_fifo_full, BOOL *p_is_fifo_empty, BOOL *p_is_block_remove_ok)
00991 {
00992         static const UINT16 CH_STATUS[ CVT_V1724_MAX_CHANNEL]=
00993         {
00994                 CVT_V1724_CH0_STATUS_INDEX,                                             
00995                 CVT_V1724_CH1_STATUS_INDEX,                                             
00996                 CVT_V1724_CH2_STATUS_INDEX,                                             
00997                 CVT_V1724_CH3_STATUS_INDEX,                                             
00998                 CVT_V1724_CH4_STATUS_INDEX,                                             
00999                 CVT_V1724_CH5_STATUS_INDEX,                                             
01000                 CVT_V1724_CH6_STATUS_INDEX,                                             
01001                 CVT_V1724_CH7_STATUS_INDEX,                                             
01002         };
01003 
01004         UINT32 reg_value= 0;
01005 
01006         //
01007         // input param check
01008         if( ch_index>= CVT_V1724_MAX_CHANNEL)
01009         {
01010                 TRACE1( "V1724 cvt_V1724_get_channel_status bad channel '%d'!\n", ch_index);
01011                 return FALSE;
01012         }
01013         //
01014         // read channel status register 1
01015         if( !cvt_read_reg( &p_data->m_common_data, CH_STATUS[ ch_index], &reg_value))
01016         {
01017                 TRACE1( "V1724 CH_STATUS[%d] read failed !\n", ch_index);
01018                 return FALSE;
01019         }
01020         *p_is_dac_busy= ( reg_value& CVT_V1724_CHSTS_DAC_BUSY_MSK)? TRUE: FALSE;
01021         *p_is_fifo_full= ( reg_value& CVT_V1724_CHSTS_FIFO_FULL_MSK)? TRUE: FALSE;
01022         *p_is_fifo_empty= ( reg_value& CVT_V1724_CHSTS_FIFO_EMPTY_MSK)? TRUE: FALSE;
01023         *p_is_block_remove_ok= ( reg_value& CVT_V1724_CHSTS_BLOCK_REM_OK_MSK)? TRUE: FALSE;
01024 
01025         return TRUE;
01026 }
01027 
01029 
01039 
01040 BOOL cvt_V1724_get_system_info( cvt_V1724_data* p_data, UINT16 *p_firmware_rev, UINT16 *p_serial_number)
01041 {
01042         UINT16 reg_value= 0;
01043         //
01044         // Firmware revision register
01045         if( !cvt_read_reg( &p_data->m_common_data, CVT_V1724_FW_REV_INDEX, &reg_value))
01046         {
01047                 TRACE( "V1724 CVT_V1724_FW_REV read failed !\n");
01048                 return FALSE;
01049         }
01050         *p_firmware_rev= reg_value;
01051 /*
01052         //
01053         // Serial number
01054         if( !cvt_read_reg( &p_data->m_common_data, CVT_V1724_ROM_SERIAL_LSB_INDEX, &reg_value))
01055         {
01056                 TRACE( "V1724 CVT_V1724_ROM_SERIAL_LSB read failed !\n");
01057                 return FALSE;
01058         }
01059         *p_serial_number= reg_value& 0x00ff;
01060         if( !cvt_read_reg( &p_data->m_common_data, CVT_V1724_ROM_SERIAL_MSB_INDEX, &reg_value))
01061         {
01062                 TRACE( "V1724 CVT_V1724_ROM_SERIAL_MSB read failed !\n");
01063                 return FALSE;
01064         }
01065         *p_serial_number|= (reg_value& 0x00ff)<< 8;
01066 */
01067         *p_serial_number= 0;
01068 
01069         return TRUE;
01070 }
01071 
01073 //
01075 BOOL cvt_V1724_set_MCST_CBLT( cvt_V1724_data* p_data, UINT8 address, MCST_CBLT_board_pos pos)
01076 {
01077         UINT16 reg_value;
01078         //
01079         // MCST/CBLT address register
01080         reg_value= address;
01081         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_MCST_CBLT_ADDRESS_INDEX, &reg_value))
01082         {
01083                 TRACE( "V1724 CVT_V1724_MCST_CBLT_ADDRESS write failed !\n");
01084                 return FALSE;
01085         }
01086         //
01087         // MCST/CBLT control register
01088         switch( pos)
01089         {
01090         case MCST_CBLT_board_pos_first:
01091                 reg_value= CVT_V1724_MCCTRL_FIRST_BOARD_MSK;
01092                 break;
01093         case MCST_CBLT_board_pos_mid:
01094                 reg_value= CVT_V1724_MCCTRL_MID_BOARD_MSK;
01095                 break;
01096         case MCST_CBLT_board_pos_last:
01097                 reg_value= CVT_V1724_MCCTRL_LAST_BOARD_MSK;
01098                 break;
01099         default:
01100                 TRACE1( "V1724 cvt_V1724_set_MCST_CBLT bad position indentifier '%d'!\n", pos);
01101                 return FALSE;
01102         }
01103         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_MCST_CBLT_CTRL_INDEX, &reg_value))
01104         {
01105                 TRACE( "V1724 CVT_V1724_MCST_CBLT_CTRL write failed !\n");
01106                 return FALSE;
01107         }
01108         return TRUE;
01109 }
01110 
01112 //
01114 BOOL cvt_V1724_write_flash_page( cvt_V1724_data* p_data, const UINT8* page_buff, UINT32 page_index)
01115 {
01116         int i;
01117         UINT16 reg_value;
01118         UINT32 flash_addr;
01119         BOOL ret_val= TRUE;
01120 
01121         flash_addr= page_index << 9;
01122 
01123         // enable flash (NCS = 0)
01124         reg_value= 0;
01125         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01126         {
01127                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01128                 return FALSE;
01129         }
01130 
01131         // write opcode
01132         reg_value= CVT_V1724_FOP_PAGE_PROG_TH_BUF1;
01133         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01134         {
01135                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01136                 ret_val= FALSE;
01137                 goto exit_point;
01138         }
01139         // write address
01140         reg_value= (unsigned char)( flash_addr>> 16);
01141         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01142         {
01143                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01144                 ret_val= FALSE;
01145                 goto exit_point;
01146         }
01147         reg_value= (unsigned char)( flash_addr>> 8);
01148         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01149         {
01150                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01151                 ret_val= FALSE;
01152                 goto exit_point;
01153         }
01154         reg_value= (unsigned char) flash_addr;
01155         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01156         {
01157                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01158                 ret_val= FALSE;
01159                 goto exit_point;
01160         }
01161         // write flash page
01162         for (i= 0; i< V1724_FLASH_PAGE_SIZE; i++)
01163         {
01164                 reg_value= page_buff[ i];
01165                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01166                 {
01167                         TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01168                         ret_val= FALSE;
01169                         goto exit_point;
01170                 }
01171         }
01172 
01173 exit_point:
01174         // disable flash (NCS = 1)
01175         reg_value= 1;
01176         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01177         {
01178                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01179                 ret_val= FALSE;
01180         }
01181 
01182         // wait 50ms
01183         delay( 50);
01184         return ret_val;
01185 }
01186 
01188 //
01190 BOOL cvt_V1724_read_flash_page( cvt_V1724_data* p_data, UINT8* page_buff, UINT32 page_index)
01191 {
01192         int i;
01193         UINT16 reg_value;
01194         UINT32 flash_addr;
01195         BOOL ret_val= TRUE;
01196 
01197         flash_addr= page_index<< 9;
01198 
01199         // enable flash (NCS = 0)
01200         reg_value= 0;
01201         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01202         {
01203                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01204                 return FALSE;
01205         }
01206 
01207         // write opcode
01208         reg_value= CVT_V1724_FOP_PAGE_READ;
01209         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01210         {
01211                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01212                 ret_val= FALSE;
01213                 goto exit_point;
01214         }
01215         // write address
01216         reg_value= (unsigned char)( flash_addr>> 16);
01217         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01218         {
01219                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01220                 ret_val= FALSE;
01221                 goto exit_point;
01222         }
01223         reg_value= (unsigned char)( flash_addr>> 8);
01224         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01225         {
01226                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01227                 ret_val= FALSE;
01228                 goto exit_point;
01229         }
01230         reg_value= (unsigned char) flash_addr;
01231         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01232         {
01233                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01234                 ret_val= FALSE;
01235                 goto exit_point;
01236         }
01237 
01238 
01239         // additional don't care bytes
01240         for (i=0; i<4; i++)
01241         {
01242                 reg_value= 0;
01243                 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01244                 {
01245                         TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01246                         ret_val= FALSE;
01247                         goto exit_point;
01248                 }
01249         }
01250 
01251         // read flash page
01252         for (i= 0; i< V1724_FLASH_PAGE_SIZE; i++)
01253         {
01254                 if( !cvt_read_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01255                 {
01256                         TRACE( "V1724 CVT_V1724_FLASH read failed !\n");
01257                         ret_val= FALSE;
01258                         goto exit_point;
01259                 }
01260                 page_buff[ i]= ( UINT8)reg_value;
01261         }
01262 
01263 exit_point:
01264         // disable flash (NCS = 1)
01265         reg_value= 1;
01266         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01267         {
01268                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01269                 ret_val= FALSE;
01270         }
01271 
01272         return ret_val;
01273 }
01274 
01276 //
01278 BOOL cvt_V1724_erase_flash_page( cvt_V1724_data* p_data, UINT32 page_index)
01279 {
01280         UINT16 reg_value;
01281         UINT32 flash_addr;
01282         BOOL ret_val= TRUE;
01283 
01284         flash_addr= page_index<< 9;
01285 
01286         // enable flash (NCS = 0)
01287         reg_value= 0;
01288         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01289         {
01290                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01291                 return FALSE;
01292         }
01293 
01294         // write opcode
01295         reg_value= CVT_V1724_FOP_PAGE_ERASE;
01296         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01297         {
01298                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01299                 ret_val= FALSE;
01300                 goto exit_point;
01301         }
01302         // write address
01303         reg_value= (unsigned char)( flash_addr>> 16);
01304         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01305         {
01306                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01307                 ret_val= FALSE;
01308                 goto exit_point;
01309         }
01310         reg_value= (unsigned char)( flash_addr>> 8);
01311         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01312         {
01313                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01314                 ret_val= FALSE;
01315                 goto exit_point;
01316         }
01317         reg_value= (unsigned char) flash_addr;
01318         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, &reg_value))
01319         {
01320                 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01321                 ret_val= FALSE;
01322                 goto exit_point;
01323         }
01324 exit_point:
01325         // disable flash (NCS = 1)
01326         reg_value= 1;
01327         if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, &reg_value))
01328         {
01329                 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01330                 ret_val= FALSE;
01331         }
01332 
01333         return ret_val;
01334 }
01335 
01337 //
01339 BOOL cvt_V1724_fw_upgrade( cvt_V1724_data* p_data, const UINT8* data_buff, UINT32 data_size, CVT_V1724_FLASH_BANK flash_bank)
01340 {
01341 
01342         UINT32 tot_bytes= 0;
01343         UINT8 tmp_page_w[ V1724_FLASH_PAGE_SIZE], tmp_page_r[ V1724_FLASH_PAGE_SIZE];
01344 
01345         switch( flash_bank)
01346         {
01347         case CVT_V1724_FB_STANDARD:             // Standard (boot) flash page
01348         case CVT_V1724_FB_BACKUP:               // Backup flash page
01349                 break;
01350         default:
01351                 TRACE( "V1724 cvt_V1724_fw_upgrade Invalid flash bank!\n");
01352                 return FALSE;
01353         }
01354 
01355         // Swap bits into data bytes
01356         while( tot_bytes< data_size)
01357         {
01358                 int i;
01359                 // pepare temporary page to write
01360                 for( i= 0; ( i< V1724_FLASH_PAGE_SIZE)&& ( tot_bytes< data_size); i++)
01361                 {
01362                         // bitwise byte rotation
01363                         tmp_page_w[ i]= cvt_swap_bits( data_buff[ tot_bytes++]);
01364                 }
01365                 // write page to flash
01366                 if( !cvt_V1724_write_flash_page( p_data, tmp_page_w, flash_bank))
01367                 {
01368                         TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01369                         return FALSE;
01370                 }
01371                 // read page from flash
01372                 if( !cvt_V1724_read_flash_page( p_data, tmp_page_r, flash_bank))
01373                 {
01374                         TRACE( "V1724 CVT_V1724_FLASH read failed !\n");
01375                         return FALSE;
01376                 }
01377                 // verify pages
01378                 if( memcmp( tmp_page_r, tmp_page_w, V1724_FLASH_PAGE_SIZE))
01379                 {
01380                         // read page differs from page written 
01381                         TRACE( "V1724 cvt_V1724_fw_upgrade page verify failure!\n");
01382                         return FALSE;
01383                 }
01384                 ++flash_bank;
01385         }
01386 
01387         return TRUE;
01388 }

Generated on Wed Nov 15 09:59:39 2006 for CAEVMEToolLib by  doxygen 1.4.6-NO