# HG changeset patch # User paul # Date 2015-10-23 13:50:57 # Node ID ea3fc7af21394367f0777fcb0f94d4025ae2d993 # Parent 5b172495b580d79ad6cd92deaa60d022ae0c6704 Code modified to measure the execution time of the ISRs on the MINI-LFR board. 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) @@ -12,11 +12,11 @@ SWVERSION=-1-0 DEFINES += SW_VERSION_N1=3 # major DEFINES += SW_VERSION_N2=0 # minor DEFINES += SW_VERSION_N3=0 # patch -DEFINES += SW_VERSION_N4=11 # internal +DEFINES += SW_VERSION_N4=12 # internal # -QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage -LIBS += -lgcov /opt/GCOV/01A/lib/overload.o -lc +#QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage +#LIBS += -lgcov /opt/GCOV/01A/lib/overload.o -lc # # diff --git a/src/fsw_globals.c b/src/fsw_globals.c --- a/src/fsw_globals.c +++ b/src/fsw_globals.c @@ -50,6 +50,7 @@ volatile int sm_f1[ NB_RING_NODES_SM_F1 volatile int sm_f2[ NB_RING_NODES_SM_F2 * TOTAL_SIZE_SM ] __attribute__((aligned(0x100))); // APB CONFIGURATION REGISTERS +struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO; time_management_regs_t *time_management_regs = (time_management_regs_t*) REGS_ADDR_TIME_MANAGEMENT; gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER; waveform_picker_regs_0_1_18_t *waveform_picker_regs = (waveform_picker_regs_0_1_18_t*) REGS_ADDR_WAVEFORM_PICKER; diff --git a/src/fsw_init.c b/src/fsw_init.c --- a/src/fsw_init.c +++ b/src/fsw_init.c @@ -251,6 +251,14 @@ rtems_task Init( rtems_task_argument ign set_hk_lfr_sc_potential_flag( true ); + //********************************* + // init GPIO for trigger generation + struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO; + grgpio_regs->io_port_direction_register = + grgpio_regs->io_port_direction_register | 0x08; // [0000 1000], 0 = output disabled, 1 = output enabled + grgpio_regs->io_port_direction_register = + grgpio_regs->io_port_direction_register | 0x04; // [0000 0100], 0 = output disabled, 1 = output enabled + status = rtems_task_delete(RTEMS_SELF); } diff --git a/src/fsw_misc.c b/src/fsw_misc.c --- a/src/fsw_misc.c +++ b/src/fsw_misc.c @@ -192,6 +192,20 @@ rtems_task hous_task(rtems_task_argument set_hk_lfr_reset_cause( POWER_ON ); while(1){ // launch the rate monotonic task +// //******* +// // GPIO 3 +// struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO; +// if ( (grgpio_regs->io_port_output_register & 0x07) == 0x02 ) // [010] +// { +// grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xf8; // [1111 1000] +// } +// else +// { +// grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x02; // [0000 0010] +// } + // + //******* + status = rtems_rate_monotonic_period( HK_id, HK_PERIOD ); if ( status != RTEMS_SUCCESSFUL ) { PRINTF1( "in HOUS *** ERR period: %d\n", status); diff --git a/src/fsw_spacewire.c b/src/fsw_spacewire.c --- a/src/fsw_spacewire.c +++ b/src/fsw_spacewire.c @@ -22,6 +22,10 @@ Header_TM_LFR_SCIENCE_CWF_t headerCWF; Header_TM_LFR_SCIENCE_SWF_t headerSWF; Header_TM_LFR_SCIENCE_ASM_t headerASM; +extern struct grgpio_regs_str *grgpio_regs; +#define OUTPUT_1 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xf8; +#define OUTPUT_0 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x02; + //*********** // RTEMS TASK rtems_task spiq_task(rtems_task_argument unused) @@ -660,6 +664,8 @@ void spacewire_update_statistics( void ) void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc ) { + OUTPUT_1; + // a valid timecode has been received, write it in the HK report unsigned int *grspwPtr; unsigned char timecodeCtr; @@ -693,6 +699,8 @@ void timecode_irq_handler( void *pDev, v housekeeping_packet.hk_lfr_time_timecode_ctr = housekeeping_packet.hk_lfr_time_timecode_ctr + 1; } } + + OUTPUT_0; } rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data ) 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 @@ -16,6 +16,10 @@ unsigned int nb_sm_f0_aux_f1; unsigned int nb_sm_f1; unsigned int nb_sm_f0_aux_f2; +extern struct grgpio_regs_str *grgpio_regs; +#define OUTPUT_1 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xf8; +#define OUTPUT_0 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x02; + //************************ // spectral matrices rings ring_node sm_ring_f0[ NB_RING_NODES_SM_F0 ]; @@ -56,6 +60,8 @@ ring_node * getRingNodeForAveraging( uns void spectral_matrices_isr_f0( unsigned char statusReg ) { +// OUTPUT_1; + unsigned char status; rtems_status_code status_code; ring_node *full_ring_node; @@ -110,10 +116,13 @@ void spectral_matrices_isr_f0( unsigned spectral_matrix_regs->status = 0x02; // [0000 0010] break; } +// OUTPUT_0; } void spectral_matrices_isr_f1( unsigned char statusReg ) { +// OUTPUT_1; + rtems_status_code status_code; unsigned char status; ring_node *full_ring_node; @@ -168,10 +177,14 @@ void spectral_matrices_isr_f1( unsigned spectral_matrix_regs->status = 0x08; // [1000 0000] break; } + +// OUTPUT_0; } void spectral_matrices_isr_f2( unsigned char statusReg ) { +// OUTPUT_1; + unsigned char status; rtems_status_code status_code; @@ -211,6 +224,8 @@ void spectral_matrices_isr_f2( unsigned } break; } + +// OUTPUT_0; } void spectral_matrix_isr_error_handler( unsigned char statusReg ) @@ -235,6 +250,8 @@ rtems_isr spectral_matrices_isr( rtems_v unsigned char statusReg; +// OUTPUT_1; + statusReg = spectral_matrix_regs->status; spectral_matrices_isr_f0( statusReg ); @@ -244,6 +261,9 @@ rtems_isr spectral_matrices_isr( rtems_v spectral_matrices_isr_f2( statusReg ); spectral_matrix_isr_error_handler( statusReg ); + +// OUTPUT_0; + } rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector ) diff --git a/src/wf_handler.c b/src/wf_handler.c --- a/src/wf_handler.c +++ b/src/wf_handler.c @@ -9,6 +9,10 @@ #include "wf_handler.h" +extern struct grgpio_regs_str *grgpio_regs; +#define OUTPUT_1 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xf8; +#define OUTPUT_0 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x02; + //*************** // waveform rings // F0 @@ -409,6 +413,8 @@ rtems_isr waveforms_isr( rtems_vector_nu // 7 6 5 4 3 2 1 0 // f3_1 f3_0 f2_1 f2_0 f1_1 f1_0 f0_1 f0_0 +// OUTPUT_1; + rtems_status_code spare_status; waveforms_isr_f3(); @@ -454,6 +460,8 @@ rtems_isr waveforms_isr( rtems_vector_nu default: break; } + +// OUTPUT_0; } //************