diff --git a/FSW-qt/Makefile b/FSW-qt/Makefile --- a/FSW-qt/Makefile +++ b/FSW-qt/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: bin/fsw -# Generated by qmake (2.01a) (Qt 4.8.5) on: Mon Feb 17 07:55:25 2014 +# Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Feb 19 13:04:42 2014 # Project: fsw-qt.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro @@ -10,7 +10,7 @@ CC = sparc-rtems-gcc CXX = sparc-rtems-g++ -DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=1 -DPRINT_MESSAGES_ON_CONSOLE +DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=2 -DPRINT_MESSAGES_ON_CONSOLE -DDEBUG_MESSAGES -DPRINT_TASK_STATISTICS CFLAGS = -pipe -O3 -Wall $(DEFINES) CXXFLAGS = -pipe -O3 -Wall $(DEFINES) INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters 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 @@ -1,7 +1,7 @@ TEMPLATE = app # CONFIG += console v8 sim # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report -CONFIG += console verbose +CONFIG += console verbose cpu_usage_report debug_messages CONFIG -= qt include(./sparc.pri) @@ -11,7 +11,7 @@ SWVERSION=-1-0 DEFINES += SW_VERSION_N1=1 # major DEFINES += SW_VERSION_N2=0 # minor DEFINES += SW_VERSION_N3=0 # patch -DEFINES += SW_VERSION_N4=1 # internal +DEFINES += SW_VERSION_N4=2 # internal contains( CONFIG, verbose ) { DEFINES += PRINT_MESSAGES_ON_CONSOLE diff --git a/FSW-qt/fsw-qt.pro.user b/FSW-qt/fsw-qt.pro.user --- a/FSW-qt/fsw-qt.pro.user +++ b/FSW-qt/fsw-qt.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/header/ccsds_types.h b/header/ccsds_types.h --- a/header/ccsds_types.h +++ b/header/ccsds_types.h @@ -1,6 +1,8 @@ #ifndef CCSDS_TYPES_H_INCLUDED #define CCSDS_TYPES_H_INCLUDED +#include "fsw_params_processing.h" + #define CCSDS_PROTOCOLE_EXTRA_BYTES 4 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4 #define CCSDS_TM_PKT_MAX_SIZE 4412 @@ -198,9 +200,11 @@ enum apid_destid{ #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET) #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET) #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET) -#define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET) -#define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET) -#define PACKET_LENGTH_TM_LFR_SCIENCE_ASM (TOTAL_SIZE_SM + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_HK (124 - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_PARAMETER_DUMP (36 - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0 (TOTAL_SIZE_ASM_F0 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F1 (TOTAL_SIZE_ASM_F1 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET) +#define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F2 (TOTAL_SIZE_ASM_F2 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET) #define SPARE1_PUSVERSION_SPARE2 0x10 @@ -438,10 +442,10 @@ typedef struct { // AUXILIARY HEADER unsigned char sid; unsigned char biaStatusInfo; - unsigned char cntASM; - unsigned char nrASM; + unsigned char pa_lfr_pkt_cnt_asm; + unsigned char pa_lfr_pkt_nr_asm; unsigned char acquisitionTime[6]; - unsigned char blkNr[2]; + unsigned char pa_lfr_asm_blk_nr[2]; } Header_TM_LFR_SCIENCE_ASM_t; typedef struct { @@ -599,6 +603,9 @@ typedef struct { // SBM2 PARAMETERS unsigned char sy_lfr_s2_bp_p0; unsigned char sy_lfr_s2_bp_p1; + + // SPARE + unsigned char source_data_spare; } Packet_TM_LFR_PARAMETER_DUMP_t; diff --git a/header/fsw_params.h b/header/fsw_params.h --- a/header/fsw_params.h +++ b/header/fsw_params.h @@ -17,14 +17,6 @@ typedef struct ring_node unsigned int status; } ring_node; -typedef struct ring_node_sm -{ - struct ring_node *previous; - volatile int *buffer_address; - struct ring_node *next; - unsigned int status; -} ring_node_sm; - //************************ // flight software version // this parameters is handled by the Qt project options @@ -113,14 +105,8 @@ typedef struct ring_node_sm //********** // IRQ LINES -#define IRQ_SM 9 -#define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels -#define IRQ_WF 10 -#define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels -#define IRQ_TIME1 12 -#define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels -#define IRQ_TIME2 13 -#define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels +#define IRQ_SM_SIMULATOR 9 +#define IRQ_SPARC_SM_SIMULATOR 0x19 // see sparcv8.pdf p.76 for interrupt levels #define IRQ_WAVEFORM_PICKER 14 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels #define IRQ_SPECTRAL_MATRIX 6 @@ -129,9 +115,7 @@ typedef struct ring_node_sm //***** // TIME #define CLKDIV_SM_SIMULATOR (10000 - 1) // 10 ms -#define CLKDIV_WF_SIMULATOR (10000000 - 1) // 10 000 000 * 1 us = 10 s #define TIMER_SM_SIMULATOR 1 -#define TIMER_WF_SIMULATOR 2 #define HK_PERIOD 100 // 100 * 10ms => 1sec //********** diff --git a/header/fsw_params_processing.h b/header/fsw_params_processing.h --- a/header/fsw_params_processing.h +++ b/header/fsw_params_processing.h @@ -5,10 +5,26 @@ #define NB_VALUES_PER_SM 25 // #define TOTAL_SIZE_SM 3200 // 25 * 128 #define SM_HEADER 0 // - +// +#define NB_BINS_PER_ASM_F0 88 +#define TOTAL_SIZE_ASM_F0 2200 // 25 * 88 +#define ASM_F0_INDICE_START 17 // 88 bins +#define ASM_F0_INDICE_STOP 104 // 2 packets of 44 bins +// +#define NB_BINS_PER_ASM_F1 104 +#define TOTAL_SIZE_ASM_F1 2600 // 25 * 104 +#define ASM_F1_INDICE_START 6 // 104 bins +#define ASM_F1_INDICE_STOP 109 // 2 packets of 52 bins +// +#define NB_BINS_PER_ASM_F2 96 +#define TOTAL_SIZE_ASM_F2 2400 // 25 * 96 +#define ASM_F2_INDICE_START 7 // 96 bins +#define ASM_F2_INDICE_STOP 102 // 2 packets of 48 bins +// #define NB_BINS_COMPRESSED_SM_F0 11 #define NB_BINS_COMPRESSED_SM_F1 13 #define NB_BINS_COMPRESSED_SM_F2 12 +// #define TOTAL_SIZE_COMPRESSED_MATRIX_f0 (NB_BINS_COMPRESSED_SM_F0 * NB_VALUES_PER_SM) #define NB_AVERAGE_NORMAL_f0 96*4 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8 diff --git a/header/fsw_processing.h b/header/fsw_processing.h --- a/header/fsw_processing.h +++ b/header/fsw_processing.h @@ -26,11 +26,11 @@ extern spectral_matrix_regs_t *spectral_ extern rtems_name misc_name[5]; extern rtems_id Task_id[20]; /* array of task ids */ -// void init_sm_rings( void ); void reset_current_sm_ring_nodes( void ); // ISR +void reset_nb_sm_f0( void ); rtems_isr spectral_matrices_isr( rtems_vector_number vector ); rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ); diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -87,7 +87,7 @@ rtems_task Init( rtems_task_argument ign PRINTF1("** %d.", SW_VERSION_N1) PRINTF1("%d.", SW_VERSION_N2) PRINTF1("%d.", SW_VERSION_N3) - PRINTF1("%d\n", SW_VERSION_N4) + PRINTF1("%d **\n", SW_VERSION_N4) PRINTF("*************************\n") PRINTF("\n\n") @@ -167,12 +167,11 @@ rtems_task Init( rtems_task_argument ign PRINTF1("in INIT *** in suspend_science_tasks *** ERR code: %d\n", status) } - //****************************** // - LEON_Mask_interrupt( IRQ_SM ); + LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR, - IRQ_SPARC_SM, spectral_matrices_isr_simu ); + IRQ_SPARC_SM_SIMULATOR, spectral_matrices_isr_simu ); // //******************************* diff --git a/src/fsw_processing.c b/src/fsw_processing.c --- a/src/fsw_processing.c +++ b/src/fsw_processing.c @@ -26,6 +26,8 @@ float averaged_sm_f0[ TOTAL_SIZE_SM ]; char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ]; float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ]; +unsigned int nb_sm_f0; + void init_sm_rings( void ) { unsigned char i; @@ -48,6 +50,8 @@ void init_sm_rings( void ) DEBUG_PRINTF1("asm_ring_f0 @%x\n", (unsigned int) sm_ring_f0) + spectral_matrix_regs->matrixF0_Address0 = sm_ring_f0[0].buffer_address; + DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->matrixF0_Address0) } void reset_current_sm_ring_nodes( void ) @@ -58,64 +62,71 @@ void reset_current_sm_ring_nodes( void ) //*********************************************************** // Interrupt Service Routine for spectral matrices processing +void reset_nb_sm_f0( void ) +{ + nb_sm_f0 = 0; +} + rtems_isr spectral_matrices_isr( rtems_vector_number vector ) { - unsigned char status; - unsigned char i; - static unsigned int nb_interrupt_f0 = 0; +// unsigned char status; +// unsigned char i; - status = spectral_matrix_regs->status; //[f2 f1 f0_1 f0_0] - for (i=0; i<4; i++) - { - if ( ( (status >> i) & 0x01) == 1) // (1) buffer rotation - { - switch(i) - { - case 0: - current_ring_node_sm_f0 = current_ring_node_sm_f0->next; - spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; - spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; - nb_interrupt_f0 = nb_interrupt_f0 + 1; - if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ){ - ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; - if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) - { - rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); - } - nb_interrupt_f0 = 0; - } - break; - case 1: - break; - case 2: - break; - default: - break; - } - } - } +// status = spectral_matrix_regs->status; //[f2 f1 f0_1 f0_0] +// for (i=0; i<4; i++) +// { +// if ( ( (status >> i) & 0x01) == 1) // (1) buffer rotation +// { +// switch(i) +// { +// case 0: +// current_ring_node_sm_f0 = current_ring_node_sm_f0->next; +// spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; +// spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; +// nb_interrupt_f0 = nb_interrupt_f0 + 1; +// if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ){ +// ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; +// if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) +// { +// rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); +// } +// nb_interrupt_f0 = 0; +// } +// break; +// case 1: +// break; +// case 2: +// break; +// default: +// break; +// } +// } +// } - // reset error codes to 0 - spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // [1100 1111] +// // reset error codes to 0 +// spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // [1100 1111] } rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ) { - static unsigned int nb_interrupt_f0 = 0; - current_ring_node_sm_f0 = current_ring_node_sm_f0->next; spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address; spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe; - nb_interrupt_f0 = nb_interrupt_f0 + 1; - if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ) - { - ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; - if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) - { - rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); - } - nb_interrupt_f0 = 0; - } + + rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ); +// if (nb_sm_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ) +// { +// ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0; +// if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) +// { +// rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); +// } +// nb_sm_f0 = 0; +// } +// else +// { +// nb_sm_f0 = nb_sm_f0 + 1; +// } } //************ @@ -150,6 +161,7 @@ rtems_task avf0_task(rtems_task_argument static int nb_average; rtems_event_set event_out; rtems_status_code status; + ring_node *ring_node_tab[8]; nb_average = 0; @@ -157,19 +169,23 @@ rtems_task avf0_task(rtems_task_argument while(1){ rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0 - for (i=0; iprevious; + ring_node_tab[i] = ring_node_for_averaging_sm_f0; } - for(i=0; ibuffer_address) ) [i] + + ( (int *) (ring_node_tab[1]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[2]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[3]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[4]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[5]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[6]->buffer_address) ) [i] + + ( (int *) (ring_node_tab[7]->buffer_address) ) [i]; } nb_average = nb_average + NB_SM_TO_RECEIVE_BEFORE_AVF0; if (nb_average == NB_AVERAGE_NORMAL_f0) { @@ -468,16 +484,16 @@ void init_header_asm( Header_TM_LFR_SCIE // AUXILIARY DATA HEADER header->sid = 0x00; header->biaStatusInfo = 0x00; - header->cntASM = 0x00; - header->nrASM = 0x00; + header->pa_lfr_pkt_cnt_asm = 0x00; + header->pa_lfr_pkt_nr_asm = 0x00; header->time[0] = 0x00; header->time[0] = 0x00; header->time[0] = 0x00; header->time[0] = 0x00; header->time[0] = 0x00; header->time[0] = 0x00; - header->blkNr[0] = 0x00; // BLK_NR MSB - header->blkNr[1] = 0x00; // BLK_NR LSB + header->pa_lfr_asm_blk_nr[0] = 0x00; // BLK_NR MSB + header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB } void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix, @@ -487,40 +503,53 @@ void send_spectral_matrix(Header_TM_LFR_ unsigned int length = 0; rtems_status_code status; - header->sid = (unsigned char) sid; - for (i=0; i<2; i++) { - // BUILD THE DATA - spw_ioctl_send->dlen = TOTAL_SIZE_SM; - spw_ioctl_send->data = &spectral_matrix[ i * TOTAL_SIZE_SM]; + // (1) BUILD THE DATA + switch(sid) + { + case SID_NORM_ASM_F0: + spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0 / 2; + spw_ioctl_send->data = &spectral_matrix[ ASM_F0_INDICE_START + i * (TOTAL_SIZE_ASM_F0/2)]; + length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0; + header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_ASM_F0/2) >> 8 ); // BLK_NR MSB + header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_ASM_F0/2); // BLK_NR LSB + break; + case SID_NORM_ASM_F1: + break; + case SID_NORM_ASM_F2: + break; + default: + PRINTF1("ERR *** in send_spectral_matrix *** unexpected sid %d\n", sid) + break; + } spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES; spw_ioctl_send->hdr = (char *) header; spw_ioctl_send->options = 0; - // BUILD THE HEADER - length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM; + // (2) BUILD THE HEADER header->packetLength[0] = (unsigned char) (length>>8); header->packetLength[1] = (unsigned char) (length); header->sid = (unsigned char) sid; // SID - header->cntASM = 2; - header->nrASM = (unsigned char) (i+1); - header->blkNr[0] =(unsigned char) ( (NB_BINS_PER_SM/2) >> 8 ); // BLK_NR MSB - header->blkNr[1] = (unsigned char) (NB_BINS_PER_SM/2); // BLK_NR LSB - // SET PACKET TIME + header->pa_lfr_pkt_cnt_asm = 2; + header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1); + + // (3) SET PACKET TIME header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24); header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16); header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8); header->time[3] = (unsigned char) (time_management_regs->coarse_time); header->time[4] = (unsigned char) (time_management_regs->fine_time>>8); header->time[5] = (unsigned char) (time_management_regs->fine_time); + // header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24); header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16); header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8); header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time); header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8); header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time); - // SEND PACKET + + // (4) SEND PACKET status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE); if (status != RTEMS_SUCCESSFUL) { printf("in send_spectral_matrix *** ERR %d\n", (int) status); diff --git a/src/tc_handler.c b/src/tc_handler.c --- a/src/tc_handler.c +++ b/src/tc_handler.c @@ -174,14 +174,6 @@ int action_enter_mode(ccsdsTelecommandPa { printf("in action_enter_mode *** enter mode %d\n", requestedMode); -#ifdef PRINT_TASK_STATISTICS - if (requestedMode != LFR_MODE_STANDBY) - { - rtems_cpu_usage_reset(); - maxCount = 0; - } -#endif - status = transition_validation(requestedMode); if ( status == LFR_SUCCESSFUL ) { @@ -394,18 +386,24 @@ int stop_current_mode(void) status = RTEMS_SUCCESSFUL; - // mask interruptions + // (1) mask interruptions LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt //LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt - LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrix interrupt simulator - // reset registers + + // (2) clear interruptions + LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt + //LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt + + // (3) reset registers reset_wfp_burst_enable(); // reset burst and enable bits reset_wfp_status(); // reset all the status bits - // clear interruptions - LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt - //LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt - LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrix interrupt simulator - //********************** + + // + LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); // mask spectral matrix interrupt simulator + timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); + LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); // clear spectral matrix interrupt simulator + // + // suspend several tasks if (lfrCurrentMode != LFR_MODE_STANDBY) { status = suspend_science_tasks(); @@ -441,22 +439,16 @@ int enter_mode(unsigned char mode ) if ( (mode == LFR_MODE_NORMAL) || (mode == LFR_MODE_BURST) || (mode == LFR_MODE_SBM1) || (mode == LFR_MODE_SBM2) ) { +#ifdef PRINT_TASK_STATISTICS + rtems_cpu_usage_reset(); + maxCount = 0; +#endif status = restart_science_tasks(); launch_waveform_picker( mode ); -// launch_spectral_matrix( mode ); + launch_spectral_matrix( mode ); } else if ( mode == LFR_MODE_STANDBY ) { - status = stop_current_mode(); - } - else - { - status = RTEMS_UNSATISFIED; - } - - if (mode == LFR_MODE_STANDBY) - { - PRINTF1("maxCount = %d\n", maxCount) #ifdef PRINT_TASK_STATISTICS rtems_cpu_usage_report(); #endif @@ -464,6 +456,12 @@ int enter_mode(unsigned char mode ) #ifdef PRINT_STACK_REPORT rtems_stack_checker_report_usage(); #endif + status = stop_current_mode(); + PRINTF1("maxCount = %d\n", maxCount) + } + else + { + status = RTEMS_UNSATISFIED; } if (status != RTEMS_SUCCESSFUL) @@ -622,13 +620,15 @@ void launch_waveform_picker( unsigned ch void launch_spectral_matrix( unsigned char mode ) { + reset_nb_sm_f0(); reset_current_sm_ring_nodes(); reset_spectral_matrix_regs(); + // Spectral Matrices simulator timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); + LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); + LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); set_local_nb_interrupt_f0_MAX(); - LEON_Clear_interrupt( IRQ_SM ); - LEON_Unmask_interrupt( IRQ_SM ); } //****************