# HG changeset patch # User paul # Date 2015-01-15 14:35:30 # Node ID 3fe0b645620cc2d376545c937a98c95311fb1920 # Parent f0fdfd2b8c4c2b5139740ff3455092715e69f163 sync with LFR_basic-parameters diff --git a/.hgsubstate b/.hgsubstate --- a/.hgsubstate +++ b/.hgsubstate @@ -1,2 +1,2 @@ -a309a930a482e851061936696121f4a1cf7005de LFR_basic-parameters -2b5dc338fb623046072d6eb98c26ad884e17f95e header/lfr_common_headers +d896e23033404156cdc95f5bf66e038de84de04b LFR_basic-parameters +5cfb4f574403f86583ac510d5921709548a9c902 header/lfr_common_headers diff --git a/FSW-qt/fsw-qt.pro b/FSW-qt/fsw-qt.pro --- a/FSW-qt/fsw-qt.pro +++ b/FSW-qt/fsw-qt.pro @@ -2,7 +2,7 @@ TEMPLATE = app # CONFIG += console v8 sim # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** vhdl_dev *** debug_tch # lpp_dpu_destid -CONFIG += console verbose lpp_dpu_destid +CONFIG += console verbose lpp_dpu_destid cpu_usage_report CONFIG -= qt include(./sparc.pri) @@ -28,7 +28,7 @@ contains( CONFIG, lpp_dpu_destid ) { contains( CONFIG, debug_tch ) { DEFINES += DEBUG_TCH } -DEFINES += LSB_FIRST_TCH +DEFINES += MSB_FIRST_TCH contains( CONFIG, vhdl_dev ) { DEFINES += VHDL_DEV diff --git a/src/processing/avf0_prc0.c b/src/processing/avf0_prc0.c --- a/src/processing/avf0_prc0.c +++ b/src/processing/avf0_prc0.c @@ -193,8 +193,6 @@ rtems_task prc0_task( rtems_task_argumen bp_packet packet_sbm_bp2; ring_node *current_ring_node_to_send_asm_f0; - unsigned long long int localTime; - // init the ring of the averaged spectral matrices which will be transmitted to the DPU init_ring( ring_to_send_asm_f0, NB_RING_NODES_ASM_F0, (volatile int*) buffer_asm_f0, TOTAL_SIZE_SM ); current_ring_node_to_send_asm_f0 = ring_to_send_asm_f0; @@ -261,8 +259,6 @@ rtems_task prc0_task( rtems_task_argumen incomingMsg = (asm_msg*) incomingData; - localTime = getTimeAsUnsignedLongLongInt( ); - //**************** //**************** // BURST SBM1 SBM2 @@ -328,46 +324,6 @@ rtems_task prc0_task( rtems_task_argumen BP_send( (char *) &packet_norm_bp2, queue_id, PACKET_LENGTH_TM_LFR_SCIENCE_NORM_BP2_F0 + PACKET_LENGTH_DELTA, SID_NORM_BP2_F0); - - // < TMP DATA> -#define INDEX_COMPRESSED 1 - unsigned int signif; - float significand; - unsigned int nbitexp = 6; - unsigned int nbitsig = 16 - nbitexp; // number of bits for the significand - unsigned int rangesig = (1 << nbitsig)-1; // == 2^nbitsig - 1 - int expmax = 32; - int expmin = expmax - ((int) (1 << nbitexp)) + 1; - int exponent; - float auto_a0; - exponent = ( (int) ( (packet_norm_bp2.data[INDEX_COMPRESSED * NB_BYTES_PER_BP2] & 0xfc) >> 2) ) + expmin; // [1111 1100] - printf("exponent = %x, computed with exp = %x, expmin = %d\n", - exponent, - (packet_norm_bp2.data[INDEX_COMPRESSED * NB_BYTES_PER_BP2] & 0xfc) >> 2, - expmin); - signif = ( (packet_norm_bp2.data[INDEX_COMPRESSED * NB_BYTES_PER_BP2] & 0x3) << 8 ) + packet_norm_bp2.data[INDEX_COMPRESSED * NB_BYTES_PER_BP2+1]; - significand = ( ( (float) signif ) / ( (float) rangesig) + 1) / 2; - auto_a0 = significand * pow(2,exponent); - printf("(BP2) [%d] compressed = %f *** AUTO A0 = %x, %x, exponent = %x, significand = %f ===> %f\n", - INDEX_COMPRESSED, - compressed_sm_norm_f0[INDEX_COMPRESSED * NB_VALUES_PER_SM], - packet_norm_bp2.data[ INDEX_COMPRESSED * NB_BYTES_PER_BP2], - packet_norm_bp2.data[ INDEX_COMPRESSED * NB_BYTES_PER_BP2 + 1], - exponent, significand, auto_a0 ); -// printf("(BP2) 0 = %f, 1 = %f, 2 = %f, 3 = %f, 4 = %f, 5 = %f, 6 = %f, 7 = %f, 8 = %f, 9 = %f, 10 = %f,\n", -// compressed_sm_norm_f0[0 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[1 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[2 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[3 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[4 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[5 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[6 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[7 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[8 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[9 * NB_VALUES_PER_SM], -// compressed_sm_norm_f0[10 * NB_VALUES_PER_SM]); - // - } } @@ -383,27 +339,11 @@ rtems_task prc0_task( rtems_task_argumen current_ring_node_to_send_asm_f0->fineTime = incomingMsg->fineTimeNORM; current_ring_node_to_send_asm_f0->sid = SID_NORM_ASM_F0; - // < TMP DATA> -#define INDEX_TO_LOOK_AT 31 - float b11; - unsigned char *b11_charPtr; - b11_charPtr = (unsigned char*) &b11; - b11_charPtr[0] = ((unsigned char *) current_ring_node_to_send_asm_f0->buffer_address)[(INDEX_TO_LOOK_AT * NB_VALUES_PER_SM) * 2]; - b11_charPtr[1] = ((unsigned char *) current_ring_node_to_send_asm_f0->buffer_address)[(INDEX_TO_LOOK_AT * NB_VALUES_PER_SM) * 2 +1]; - b11_charPtr[2] = 0x00; - b11_charPtr[3] = 0x00; - printf("(ASM) initial = %f, reorganized and divided = %f, converted = %f\n", - incomingMsg->norm->matrix[INDEX_TO_LOOK_AT], // 32 * 96 = 3072 Hz - asm_f0_reorganized[ INDEX_TO_LOOK_AT * NB_VALUES_PER_SM ], - b11); - // - // 3) send the spectral matrix packets status = rtems_message_queue_send( queue_id, ¤t_ring_node_to_send_asm_f0, sizeof( ring_node* ) ); // change asm ring node current_ring_node_to_send_asm_f0 = current_ring_node_to_send_asm_f0->next; } - } } @@ -449,50 +389,3 @@ void init_k_coefficients_f0( void ) init_k_coefficients( k_coeff_intercalib_f0_norm, NB_BINS_COMPRESSED_SM_F0 ); init_k_coefficients( k_coeff_intercalib_f0_sbm, NB_BINS_COMPRESSED_SM_SBM_F0); } - -void test_TCH( void ) -{ -#define NB_BINS_COMPRESSED_MATRIX_TCH 1 - - unsigned char LFR_BP1_f0[NB_BINS_COMPRESSED_MATRIX_TCH*NB_BYTES_BP1]; - unsigned char LFR_BP2_f0[NB_BINS_COMPRESSED_MATRIX_TCH*NB_BYTES_BP2]; - float k_coefficients[NB_BINS_COMPRESSED_MATRIX_TCH * NB_K_COEFF_PER_BIN]; - - float compressed_spectral_matrix_TCH[ NB_BINS_COMPRESSED_MATRIX_TCH * NB_VALUES_PER_SPECTRAL_MATRIX ] = { - 1.02217712e+06, - -8.58216250e+04, - -3.22199043e+04, - 1.01597820e+05, - 8.10333875e+05, - 1.19030141e+05, - -8.69636688e+05, - 5.01504031e+05, - -1.01948547e+05, - 1.35475020e+04, - -3.67825469e+04, - -1.10950273e+05, - 2.10715000e+04, - 4.49727383e+04, - -4.37282031e+04, - 3.83337695e+03, - 1.05317175e+06, - -4.04155312e+05, - -1.32987891e+05, - 1.49277250e+05, - -4.39122625e+05, - 9.46006250e+05, - 2.64386625e+05, - 3.71843125e+05, - 3.39770000e+05 - }; - - init_k_coefficients( k_coefficients, NB_BINS_COMPRESSED_MATRIX_TCH ); - - printf("\n"); - - BP1_set(compressed_spectral_matrix_TCH, k_coefficients, NB_BINS_COMPRESSED_MATRIX_TCH, LFR_BP1_f0); - - printf("\n"); - - BP2_set(compressed_spectral_matrix_TCH, NB_BINS_COMPRESSED_MATRIX_TCH, LFR_BP2_f0); -} diff --git a/src/processing/fsw_processing.c b/src/processing/fsw_processing.c --- a/src/processing/fsw_processing.c +++ b/src/processing/fsw_processing.c @@ -57,6 +57,7 @@ void spectral_matrices_isr_f0( void ) { unsigned char status; rtems_status_code status_code; + ring_node *full_ring_node; status = spectral_matrix_regs->status & 0x03; // [0011] get the status_ready_matrix_f0_x bits @@ -70,40 +71,42 @@ void spectral_matrices_isr_f0( void ) status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_11 ); break; case 1: - ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0->previous; + full_ring_node = current_ring_node_sm_f0->previous; current_ring_node_sm_f0 = current_ring_node_sm_f0->next; - ring_node_for_averaging_sm_f0->coarseTime = spectral_matrix_regs->f0_0_coarse_time; - ring_node_for_averaging_sm_f0->fineTime = spectral_matrix_regs->f0_0_fine_time; spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->buffer_address; - spectral_matrix_regs->status = 0x01; // [0000 0001] // if there are enough ring nodes ready, wake up an AVFx task nb_sm_f0 = nb_sm_f0 + 1; if (nb_sm_f0 == NB_SM_BEFORE_AVF0) { + ring_node_for_averaging_sm_f0 = full_ring_node; + ring_node_for_averaging_sm_f0->coarseTime = spectral_matrix_regs->f0_0_coarse_time; + ring_node_for_averaging_sm_f0->fineTime = spectral_matrix_regs->f0_0_fine_time; if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); } nb_sm_f0 = 0; } + spectral_matrix_regs->status = 0x01; // [0000 0001] break; case 2: - ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0->previous; + full_ring_node = current_ring_node_sm_f0->previous; current_ring_node_sm_f0 = current_ring_node_sm_f0->next; - ring_node_for_averaging_sm_f0->coarseTime = spectral_matrix_regs->f0_1_coarse_time; - ring_node_for_averaging_sm_f0->fineTime = spectral_matrix_regs->f0_1_fine_time; - spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->buffer_address; - spectral_matrix_regs->status = 0x02; // [0000 0010] + spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address; // if there are enough ring nodes ready, wake up an AVFx task nb_sm_f0 = nb_sm_f0 + 1; if (nb_sm_f0 == NB_SM_BEFORE_AVF0) { + ring_node_for_averaging_sm_f0 = full_ring_node; + ring_node_for_averaging_sm_f0->coarseTime = spectral_matrix_regs->f0_1_coarse_time; + ring_node_for_averaging_sm_f0->fineTime = spectral_matrix_regs->f0_1_fine_time; if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); } nb_sm_f0 = 0; } + spectral_matrix_regs->status = 0x02; // [0000 0010] break; } } @@ -112,6 +115,7 @@ void spectral_matrices_isr_f1( void ) { rtems_status_code status_code; unsigned char status; + ring_node *full_ring_node; status = (spectral_matrix_regs->status & 0x0c) >> 2; // [1100] get the status_ready_matrix_f0_x bits @@ -125,40 +129,42 @@ void spectral_matrices_isr_f1( void ) status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_11 ); break; case 1: - ring_node_for_averaging_sm_f1 = current_ring_node_sm_f1->previous; + full_ring_node = current_ring_node_sm_f1->previous; current_ring_node_sm_f1 = current_ring_node_sm_f1->next; - ring_node_for_averaging_sm_f1->coarseTime = spectral_matrix_regs->f1_0_coarse_time; - ring_node_for_averaging_sm_f1->fineTime = spectral_matrix_regs->f1_0_fine_time; spectral_matrix_regs->f1_0_address = current_ring_node_sm_f1->buffer_address; - spectral_matrix_regs->status = 0x04; // [0000 0100] // if there are enough ring nodes ready, wake up an AVFx task nb_sm_f1 = nb_sm_f1 + 1; if (nb_sm_f1 == NB_SM_BEFORE_AVF1) { + ring_node_for_averaging_sm_f1 = full_ring_node; + ring_node_for_averaging_sm_f1->coarseTime = spectral_matrix_regs->f1_0_coarse_time; + ring_node_for_averaging_sm_f1->fineTime = spectral_matrix_regs->f1_0_fine_time; if (rtems_event_send( Task_id[TASKID_AVF1], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); } nb_sm_f1 = 0; } + spectral_matrix_regs->status = 0x04; // [0000 0100] break; case 2: - ring_node_for_averaging_sm_f1 = current_ring_node_sm_f1->previous; + full_ring_node = current_ring_node_sm_f1->previous; current_ring_node_sm_f1 = current_ring_node_sm_f1->next; - ring_node_for_averaging_sm_f1->coarseTime = spectral_matrix_regs->f1_1_coarse_time; - ring_node_for_averaging_sm_f1->fineTime = spectral_matrix_regs->f1_1_fine_time; spectral_matrix_regs->f1_1_address = current_ring_node_sm_f1->buffer_address; - spectral_matrix_regs->status = 0x08; // [1000 0000] // if there are enough ring nodes ready, wake up an AVFx task nb_sm_f1 = nb_sm_f1 + 1; if (nb_sm_f1 == NB_SM_BEFORE_AVF1) { + ring_node_for_averaging_sm_f1 = full_ring_node; + ring_node_for_averaging_sm_f1->coarseTime = spectral_matrix_regs->f1_1_coarse_time; + ring_node_for_averaging_sm_f1->fineTime = spectral_matrix_regs->f1_1_fine_time; if (rtems_event_send( Task_id[TASKID_AVF1], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); } nb_sm_f1 = 0; } + spectral_matrix_regs->status = 0x08; // [1000 0000] break; } } @@ -329,9 +335,9 @@ void SM_reset_current_ring_nodes( void ) current_ring_node_sm_f1 = sm_ring_f1[0].next; current_ring_node_sm_f2 = sm_ring_f2[0].next; - ring_node_for_averaging_sm_f0 = sm_ring_f0; - ring_node_for_averaging_sm_f1 = sm_ring_f1; - ring_node_for_averaging_sm_f2 = sm_ring_f2; + ring_node_for_averaging_sm_f0 = NULL; + ring_node_for_averaging_sm_f1 = NULL; + ring_node_for_averaging_sm_f2 = NULL; } //***************** diff --git a/src/wf_handler.c b/src/wf_handler.c --- a/src/wf_handler.c +++ b/src/wf_handler.c @@ -796,7 +796,7 @@ void init_ring(ring_node ring[], unsigne //***** // NEXT - ring[nbNodes-1].next = (ring_node*) &ring[ 0 ]; + ring[ nbNodes - 1 ].next = (ring_node*) &ring[ 0 ]; for(i=0; i