# 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;
}
//************