00001
00002
00010
00011
00013
00015 #include <memory.h>
00016 #include <string.h>
00017 #include "cvt_V1724.h"
00018
00019
00020
00021 void delay( int msec);
00022
00024
00026
00028
00030
00032
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
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
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
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
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
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
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
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
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
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
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
00197
00199
00201
00203
00204
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
00216 if( !cvt_board_open( &p_data->m_common_data, base_address, vme_handle, CVT_V1724_REG_TABLE))
00217 return FALSE;
00218
00219 p_data->m_common_data.set_MCST_CBLT= ( BOOL (*)( void*, UINT8, MCST_CBLT_board_pos))cvt_V1724_set_MCST_CBLT;
00220
00221
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
00228
00229
00230
00231
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
00256
00258
00259
00261
00262
00263
00265
00267
00268
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
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
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
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], ®_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
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
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, ®_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
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
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, ®_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
00434
00435
00436
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
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
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
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
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
00500 set_msk16|= ( ch_trigger_enable_msk)? CVT_V1724_TRGEN_ENABLE_MSK: 0;
00501
00502
00503
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
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
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
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
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
00543 if( clear_msk16)
00544 {
00545
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
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
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
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
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
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
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
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, ®_value))
00692 {
00693 TRACE( "V1724 CVT_V1724_INT_LEVEL write failed !\n");
00694 return FALSE;
00695 }
00696
00697
00698 reg_value= vector;
00699 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_INT_VECTOR_INDEX, ®_value))
00700 {
00701 TRACE( "V1724 CVT_V1724_INT_VECTOR write failed !\n");
00702 return FALSE;
00703 }
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
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
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
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
00747 if( clear_msk)
00748 {
00749
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
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
00775 UINT16 reg_value= 0;
00776 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_RESET_INDEX, ®_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
00791 UINT16 reg_value= 0;
00792 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_CLEAR_INDEX, ®_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
00819
00820
00821
00822 CVT_V1724_SET_CH_DAC_CONF( reg_value_A, offset_value);
00823 reg_value_A|= CVT_V1724_CHDAC_SET_A_MSK;
00824
00825
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
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
00839 BOOL trash;
00840 BOOL is_dac_busy= TRUE;
00841 while( is_dac_busy)
00842 {
00843
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)? ®_value_B: ®_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
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], ®_value))
00903 {
00904 TRACE( "V1724 CH TRIGGER THRESHOLD write failed !\n");
00905 return FALSE;
00906 }
00907 }
00908 }
00909 }
00910
00911
00912
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], ®_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
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
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
00957 if( clear_msk)
00958 {
00959
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
00977 reg_value= 1;
00978 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_SW_TRIGGER_INDEX, ®_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
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
01015 if( !cvt_read_reg( &p_data->m_common_data, CH_STATUS[ ch_index], ®_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
01045 if( !cvt_read_reg( &p_data->m_common_data, CVT_V1724_FW_REV_INDEX, ®_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
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
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
01080 reg_value= address;
01081 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_MCST_CBLT_ADDRESS_INDEX, ®_value))
01082 {
01083 TRACE( "V1724 CVT_V1724_MCST_CBLT_ADDRESS write failed !\n");
01084 return FALSE;
01085 }
01086
01087
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, ®_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
01124 reg_value= 0;
01125 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_value))
01126 {
01127 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01128 return FALSE;
01129 }
01130
01131
01132 reg_value= CVT_V1724_FOP_PAGE_PROG_TH_BUF1;
01133 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_value))
01134 {
01135 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01136 ret_val= FALSE;
01137 goto exit_point;
01138 }
01139
01140 reg_value= (unsigned char)( flash_addr>> 16);
01141 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_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, ®_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, ®_value))
01156 {
01157 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01158 ret_val= FALSE;
01159 goto exit_point;
01160 }
01161
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, ®_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
01175 reg_value= 1;
01176 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_value))
01177 {
01178 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01179 ret_val= FALSE;
01180 }
01181
01182
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
01200 reg_value= 0;
01201 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_value))
01202 {
01203 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01204 return FALSE;
01205 }
01206
01207
01208 reg_value= CVT_V1724_FOP_PAGE_READ;
01209 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_value))
01210 {
01211 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01212 ret_val= FALSE;
01213 goto exit_point;
01214 }
01215
01216 reg_value= (unsigned char)( flash_addr>> 16);
01217 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_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, ®_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, ®_value))
01232 {
01233 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01234 ret_val= FALSE;
01235 goto exit_point;
01236 }
01237
01238
01239
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, ®_value))
01244 {
01245 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01246 ret_val= FALSE;
01247 goto exit_point;
01248 }
01249 }
01250
01251
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, ®_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
01265 reg_value= 1;
01266 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_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
01287 reg_value= 0;
01288 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_value))
01289 {
01290 TRACE( "V1724 CVT_V1724_FLASH_EN write failed !\n");
01291 return FALSE;
01292 }
01293
01294
01295 reg_value= CVT_V1724_FOP_PAGE_ERASE;
01296 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_value))
01297 {
01298 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01299 ret_val= FALSE;
01300 goto exit_point;
01301 }
01302
01303 reg_value= (unsigned char)( flash_addr>> 16);
01304 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_INDEX, ®_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, ®_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, ®_value))
01319 {
01320 TRACE( "V1724 CVT_V1724_FLASH write failed !\n");
01321 ret_val= FALSE;
01322 goto exit_point;
01323 }
01324 exit_point:
01325
01326 reg_value= 1;
01327 if( !cvt_write_reg( &p_data->m_common_data, CVT_V1724_FLASH_EN_INDEX, ®_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:
01348 case CVT_V1724_FB_BACKUP:
01349 break;
01350 default:
01351 TRACE( "V1724 cvt_V1724_fw_upgrade Invalid flash bank!\n");
01352 return FALSE;
01353 }
01354
01355
01356 while( tot_bytes< data_size)
01357 {
01358 int i;
01359
01360 for( i= 0; ( i< V1724_FLASH_PAGE_SIZE)&& ( tot_bytes< data_size); i++)
01361 {
01362
01363 tmp_page_w[ i]= cvt_swap_bits( data_buff[ tot_bytes++]);
01364 }
01365
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
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
01378 if( memcmp( tmp_page_r, tmp_page_w, V1724_FLASH_PAGE_SIZE))
01379 {
01380
01381 TRACE( "V1724 cvt_V1724_fw_upgrade page verify failure!\n");
01382 return FALSE;
01383 }
01384 ++flash_bank;
01385 }
01386
01387 return TRUE;
01388 }