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