##// END OF EJS Templates
Sync
paul -
r99:ef2b18a5a9ab VHDLib206
parent child
Show More
@@ -1,6 +1,6
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Mon Feb 17 07:55:25 2014
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Feb 19 13:04:42 2014
4 # Project: fsw-qt.pro
4 # Project: fsw-qt.pro
5 # Template: app
5 # Template: app
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -10,7 +10,7
10
10
11 CC = sparc-rtems-gcc
11 CC = sparc-rtems-gcc
12 CXX = sparc-rtems-g++
12 CXX = sparc-rtems-g++
13 DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=1 -DPRINT_MESSAGES_ON_CONSOLE
13 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
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters
@@ -1,7 +1,7
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report
3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report
4 CONFIG += console verbose
4 CONFIG += console verbose cpu_usage_report debug_messages
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
@@ -11,7 +11,7 SWVERSION=-1-0
11 DEFINES += SW_VERSION_N1=1 # major
11 DEFINES += SW_VERSION_N1=1 # major
12 DEFINES += SW_VERSION_N2=0 # minor
12 DEFINES += SW_VERSION_N2=0 # minor
13 DEFINES += SW_VERSION_N3=0 # patch
13 DEFINES += SW_VERSION_N3=0 # patch
14 DEFINES += SW_VERSION_N4=1 # internal
14 DEFINES += SW_VERSION_N4=2 # internal
15
15
16 contains( CONFIG, verbose ) {
16 contains( CONFIG, verbose ) {
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
@@ -1,6 +1,6
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject>
2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.0.0, 2014-02-14T07:07:03. -->
3 <!-- Written by QtCreator 3.0.0, 2014-02-19T07:19:44. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -1,6 +1,8
1 #ifndef CCSDS_TYPES_H_INCLUDED
1 #ifndef CCSDS_TYPES_H_INCLUDED
2 #define CCSDS_TYPES_H_INCLUDED
2 #define CCSDS_TYPES_H_INCLUDED
3
3
4 #include "fsw_params_processing.h"
5
4 #define CCSDS_PROTOCOLE_EXTRA_BYTES 4
6 #define CCSDS_PROTOCOLE_EXTRA_BYTES 4
5 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
7 #define CCSDS_TELEMETRY_HEADER_LENGTH 16+4
6 #define CCSDS_TM_PKT_MAX_SIZE 4412
8 #define CCSDS_TM_PKT_MAX_SIZE 4412
@@ -198,9 +200,11 enum apid_destid{
198 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
200 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
199 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
201 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
200 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
202 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
201 #define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET)
203 #define PACKET_LENGTH_HK (124 - CCSDS_TC_TM_PACKET_OFFSET)
202 #define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET)
204 #define PACKET_LENGTH_PARAMETER_DUMP (36 - CCSDS_TC_TM_PACKET_OFFSET)
203 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM (TOTAL_SIZE_SM + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
205 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0 (TOTAL_SIZE_ASM_F0 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
206 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F1 (TOTAL_SIZE_ASM_F1 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
207 #define PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F2 (TOTAL_SIZE_ASM_F2 + HEADER_LENGTH_TM_LFR_SCIENCE_ASM - CCSDS_TC_TM_PACKET_OFFSET)
204
208
205 #define SPARE1_PUSVERSION_SPARE2 0x10
209 #define SPARE1_PUSVERSION_SPARE2 0x10
206
210
@@ -438,10 +442,10 typedef struct {
438 // AUXILIARY HEADER
442 // AUXILIARY HEADER
439 unsigned char sid;
443 unsigned char sid;
440 unsigned char biaStatusInfo;
444 unsigned char biaStatusInfo;
441 unsigned char cntASM;
445 unsigned char pa_lfr_pkt_cnt_asm;
442 unsigned char nrASM;
446 unsigned char pa_lfr_pkt_nr_asm;
443 unsigned char acquisitionTime[6];
447 unsigned char acquisitionTime[6];
444 unsigned char blkNr[2];
448 unsigned char pa_lfr_asm_blk_nr[2];
445 } Header_TM_LFR_SCIENCE_ASM_t;
449 } Header_TM_LFR_SCIENCE_ASM_t;
446
450
447 typedef struct {
451 typedef struct {
@@ -599,6 +603,9 typedef struct {
599 // SBM2 PARAMETERS
603 // SBM2 PARAMETERS
600 unsigned char sy_lfr_s2_bp_p0;
604 unsigned char sy_lfr_s2_bp_p0;
601 unsigned char sy_lfr_s2_bp_p1;
605 unsigned char sy_lfr_s2_bp_p1;
606
607 // SPARE
608 unsigned char source_data_spare;
602 } Packet_TM_LFR_PARAMETER_DUMP_t;
609 } Packet_TM_LFR_PARAMETER_DUMP_t;
603
610
604
611
@@ -17,14 +17,6 typedef struct ring_node
17 unsigned int status;
17 unsigned int status;
18 } ring_node;
18 } ring_node;
19
19
20 typedef struct ring_node_sm
21 {
22 struct ring_node *previous;
23 volatile int *buffer_address;
24 struct ring_node *next;
25 unsigned int status;
26 } ring_node_sm;
27
28 //************************
20 //************************
29 // flight software version
21 // flight software version
30 // this parameters is handled by the Qt project options
22 // this parameters is handled by the Qt project options
@@ -113,14 +105,8 typedef struct ring_node_sm
113
105
114 //**********
106 //**********
115 // IRQ LINES
107 // IRQ LINES
116 #define IRQ_SM 9
108 #define IRQ_SM_SIMULATOR 9
117 #define IRQ_SPARC_SM 0x19 // see sparcv8.pdf p.76 for interrupt levels
109 #define IRQ_SPARC_SM_SIMULATOR 0x19 // see sparcv8.pdf p.76 for interrupt levels
118 #define IRQ_WF 10
119 #define IRQ_SPARC_WF 0x1a // see sparcv8.pdf p.76 for interrupt levels
120 #define IRQ_TIME1 12
121 #define IRQ_SPARC_TIME1 0x1c // see sparcv8.pdf p.76 for interrupt levels
122 #define IRQ_TIME2 13
123 #define IRQ_SPARC_TIME2 0x1d // see sparcv8.pdf p.76 for interrupt levels
124 #define IRQ_WAVEFORM_PICKER 14
110 #define IRQ_WAVEFORM_PICKER 14
125 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
111 #define IRQ_SPARC_WAVEFORM_PICKER 0x1e // see sparcv8.pdf p.76 for interrupt levels
126 #define IRQ_SPECTRAL_MATRIX 6
112 #define IRQ_SPECTRAL_MATRIX 6
@@ -129,9 +115,7 typedef struct ring_node_sm
129 //*****
115 //*****
130 // TIME
116 // TIME
131 #define CLKDIV_SM_SIMULATOR (10000 - 1) // 10 ms
117 #define CLKDIV_SM_SIMULATOR (10000 - 1) // 10 ms
132 #define CLKDIV_WF_SIMULATOR (10000000 - 1) // 10 000 000 * 1 us = 10 s
133 #define TIMER_SM_SIMULATOR 1
118 #define TIMER_SM_SIMULATOR 1
134 #define TIMER_WF_SIMULATOR 2
135 #define HK_PERIOD 100 // 100 * 10ms => 1sec
119 #define HK_PERIOD 100 // 100 * 10ms => 1sec
136
120
137 //**********
121 //**********
@@ -5,10 +5,26
5 #define NB_VALUES_PER_SM 25 //
5 #define NB_VALUES_PER_SM 25 //
6 #define TOTAL_SIZE_SM 3200 // 25 * 128
6 #define TOTAL_SIZE_SM 3200 // 25 * 128
7 #define SM_HEADER 0 //
7 #define SM_HEADER 0 //
8
8 //
9 #define NB_BINS_PER_ASM_F0 88
10 #define TOTAL_SIZE_ASM_F0 2200 // 25 * 88
11 #define ASM_F0_INDICE_START 17 // 88 bins
12 #define ASM_F0_INDICE_STOP 104 // 2 packets of 44 bins
13 //
14 #define NB_BINS_PER_ASM_F1 104
15 #define TOTAL_SIZE_ASM_F1 2600 // 25 * 104
16 #define ASM_F1_INDICE_START 6 // 104 bins
17 #define ASM_F1_INDICE_STOP 109 // 2 packets of 52 bins
18 //
19 #define NB_BINS_PER_ASM_F2 96
20 #define TOTAL_SIZE_ASM_F2 2400 // 25 * 96
21 #define ASM_F2_INDICE_START 7 // 96 bins
22 #define ASM_F2_INDICE_STOP 102 // 2 packets of 48 bins
23 //
9 #define NB_BINS_COMPRESSED_SM_F0 11
24 #define NB_BINS_COMPRESSED_SM_F0 11
10 #define NB_BINS_COMPRESSED_SM_F1 13
25 #define NB_BINS_COMPRESSED_SM_F1 13
11 #define NB_BINS_COMPRESSED_SM_F2 12
26 #define NB_BINS_COMPRESSED_SM_F2 12
27 //
12 #define TOTAL_SIZE_COMPRESSED_MATRIX_f0 (NB_BINS_COMPRESSED_SM_F0 * NB_VALUES_PER_SM)
28 #define TOTAL_SIZE_COMPRESSED_MATRIX_f0 (NB_BINS_COMPRESSED_SM_F0 * NB_VALUES_PER_SM)
13 #define NB_AVERAGE_NORMAL_f0 96*4
29 #define NB_AVERAGE_NORMAL_f0 96*4
14 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8
30 #define NB_SM_TO_RECEIVE_BEFORE_AVF0 8
@@ -26,11 +26,11 extern spectral_matrix_regs_t *spectral_
26 extern rtems_name misc_name[5];
26 extern rtems_name misc_name[5];
27 extern rtems_id Task_id[20]; /* array of task ids */
27 extern rtems_id Task_id[20]; /* array of task ids */
28
28
29 //
30 void init_sm_rings( void );
29 void init_sm_rings( void );
31 void reset_current_sm_ring_nodes( void );
30 void reset_current_sm_ring_nodes( void );
32
31
33 // ISR
32 // ISR
33 void reset_nb_sm_f0( void );
34 rtems_isr spectral_matrices_isr( rtems_vector_number vector );
34 rtems_isr spectral_matrices_isr( rtems_vector_number vector );
35 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
35 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector );
36
36
@@ -87,7 +87,7 rtems_task Init( rtems_task_argument ign
87 PRINTF1("** %d.", SW_VERSION_N1)
87 PRINTF1("** %d.", SW_VERSION_N1)
88 PRINTF1("%d.", SW_VERSION_N2)
88 PRINTF1("%d.", SW_VERSION_N2)
89 PRINTF1("%d.", SW_VERSION_N3)
89 PRINTF1("%d.", SW_VERSION_N3)
90 PRINTF1("%d\n", SW_VERSION_N4)
90 PRINTF1("%d **\n", SW_VERSION_N4)
91 PRINTF("*************************\n")
91 PRINTF("*************************\n")
92 PRINTF("\n\n")
92 PRINTF("\n\n")
93
93
@@ -167,12 +167,11 rtems_task Init( rtems_task_argument ign
167 PRINTF1("in INIT *** in suspend_science_tasks *** ERR code: %d\n", status)
167 PRINTF1("in INIT *** in suspend_science_tasks *** ERR code: %d\n", status)
168 }
168 }
169
169
170
171 //******************************
170 //******************************
172 // <SPECTRAL MATRICES SIMULATOR>
171 // <SPECTRAL MATRICES SIMULATOR>
173 LEON_Mask_interrupt( IRQ_SM );
172 LEON_Mask_interrupt( IRQ_SM_SIMULATOR );
174 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
173 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR, CLKDIV_SM_SIMULATOR,
175 IRQ_SPARC_SM, spectral_matrices_isr_simu );
174 IRQ_SPARC_SM_SIMULATOR, spectral_matrices_isr_simu );
176 // </SPECTRAL MATRICES SIMULATOR>
175 // </SPECTRAL MATRICES SIMULATOR>
177 //*******************************
176 //*******************************
178
177
@@ -26,6 +26,8 float averaged_sm_f0[ TOTAL_SIZE_SM ];
26 char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ];
26 char averaged_sm_f0_char[ TOTAL_SIZE_SM * 2 ];
27 float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
27 float compressed_sm_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
28
28
29 unsigned int nb_sm_f0;
30
29 void init_sm_rings( void )
31 void init_sm_rings( void )
30 {
32 {
31 unsigned char i;
33 unsigned char i;
@@ -48,6 +50,8 void init_sm_rings( void )
48
50
49 DEBUG_PRINTF1("asm_ring_f0 @%x\n", (unsigned int) sm_ring_f0)
51 DEBUG_PRINTF1("asm_ring_f0 @%x\n", (unsigned int) sm_ring_f0)
50
52
53 spectral_matrix_regs->matrixF0_Address0 = sm_ring_f0[0].buffer_address;
54 DEBUG_PRINTF1("spectral_matrix_regs->matrixF0_Address0 @%x\n", spectral_matrix_regs->matrixF0_Address0)
51 }
55 }
52
56
53 void reset_current_sm_ring_nodes( void )
57 void reset_current_sm_ring_nodes( void )
@@ -58,64 +62,71 void reset_current_sm_ring_nodes( void )
58
62
59 //***********************************************************
63 //***********************************************************
60 // Interrupt Service Routine for spectral matrices processing
64 // Interrupt Service Routine for spectral matrices processing
65 void reset_nb_sm_f0( void )
66 {
67 nb_sm_f0 = 0;
68 }
69
61 rtems_isr spectral_matrices_isr( rtems_vector_number vector )
70 rtems_isr spectral_matrices_isr( rtems_vector_number vector )
62 {
71 {
63 unsigned char status;
72 // unsigned char status;
64 unsigned char i;
73 // unsigned char i;
65 static unsigned int nb_interrupt_f0 = 0;
66
74
67 status = spectral_matrix_regs->status; //[f2 f1 f0_1 f0_0]
75 // status = spectral_matrix_regs->status; //[f2 f1 f0_1 f0_0]
68 for (i=0; i<4; i++)
76 // for (i=0; i<4; i++)
69 {
77 // {
70 if ( ( (status >> i) & 0x01) == 1) // (1) buffer rotation
78 // if ( ( (status >> i) & 0x01) == 1) // (1) buffer rotation
71 {
79 // {
72 switch(i)
80 // switch(i)
73 {
81 // {
74 case 0:
82 // case 0:
75 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
83 // current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
76 spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
84 // spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
77 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
85 // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
78 nb_interrupt_f0 = nb_interrupt_f0 + 1;
86 // nb_interrupt_f0 = nb_interrupt_f0 + 1;
79 if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ){
87 // if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 ){
80 ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
88 // ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
81 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
89 // if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
82 {
90 // {
83 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
91 // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
84 }
92 // }
85 nb_interrupt_f0 = 0;
93 // nb_interrupt_f0 = 0;
86 }
94 // }
87 break;
95 // break;
88 case 1:
96 // case 1:
89 break;
97 // break;
90 case 2:
98 // case 2:
91 break;
99 // break;
92 default:
100 // default:
93 break;
101 // break;
94 }
102 // }
95 }
103 // }
96 }
104 // }
97
105
98 // reset error codes to 0
106 // // reset error codes to 0
99 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // [1100 1111]
107 // spectral_matrix_regs->status = spectral_matrix_regs->status & 0xffffffcf; // [1100 1111]
100 }
108 }
101
109
102 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector )
110 rtems_isr spectral_matrices_isr_simu( rtems_vector_number vector )
103 {
111 {
104 static unsigned int nb_interrupt_f0 = 0;
105
106 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
112 current_ring_node_sm_f0 = current_ring_node_sm_f0->next;
107 spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
113 spectral_matrix_regs->matrixF0_Address0 = current_ring_node_sm_f0->buffer_address;
108 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
114 spectral_matrix_regs->status = spectral_matrix_regs->status & 0xfffffffe;
109 nb_interrupt_f0 = nb_interrupt_f0 + 1;
115
110 if (nb_interrupt_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 )
116 rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 );
111 {
117 // if (nb_sm_f0 == NB_SM_TO_RECEIVE_BEFORE_AVF0 )
112 ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
118 // {
113 if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
119 // ring_node_for_averaging_sm_f0 = current_ring_node_sm_f0;
114 {
120 // if (rtems_event_send( Task_id[TASKID_AVF0], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL)
115 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
121 // {
116 }
122 // rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 );
117 nb_interrupt_f0 = 0;
123 // }
118 }
124 // nb_sm_f0 = 0;
125 // }
126 // else
127 // {
128 // nb_sm_f0 = nb_sm_f0 + 1;
129 // }
119 }
130 }
120
131
121 //************
132 //************
@@ -150,6 +161,7 rtems_task avf0_task(rtems_task_argument
150 static int nb_average;
161 static int nb_average;
151 rtems_event_set event_out;
162 rtems_event_set event_out;
152 rtems_status_code status;
163 rtems_status_code status;
164 ring_node *ring_node_tab[8];
153
165
154 nb_average = 0;
166 nb_average = 0;
155
167
@@ -157,19 +169,23 rtems_task avf0_task(rtems_task_argument
157
169
158 while(1){
170 while(1){
159 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
171 rtems_event_receive(RTEMS_EVENT_0, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT0
160 for (i=0; i<NB_SM_TO_RECEIVE_BEFORE_AVF0; i++)
172 PRINTF("avf0\n")
173 ring_node_tab[NB_SM_TO_RECEIVE_BEFORE_AVF0-1] = ring_node_for_averaging_sm_f0;
174 for (i=0; i<NB_SM_TO_RECEIVE_BEFORE_AVF0-1; i++)
161 {
175 {
162 ring_node_for_averaging_sm_f0 = ring_node_for_averaging_sm_f0->previous;
176 ring_node_for_averaging_sm_f0 = ring_node_for_averaging_sm_f0->previous;
177 ring_node_tab[i] = ring_node_for_averaging_sm_f0;
163 }
178 }
164 for(i=0; i<TOTAL_SIZE_SM; i++){
179 for(i=0; i<TOTAL_SIZE_SM; i++)
165 averaged_sm_f0[i] = ( (int *) (ring_node_for_averaging_sm_f0[0].buffer_address) )[i]
180 {
166 + ( (int *) (ring_node_for_averaging_sm_f0[1].buffer_address) )[i]
181 averaged_sm_f0[i] = ( (int *) (ring_node_tab[0]->buffer_address) ) [i]
167 + ( (int *) (ring_node_for_averaging_sm_f0[2].buffer_address) )[i]
182 + ( (int *) (ring_node_tab[1]->buffer_address) ) [i]
168 + ( (int *) (ring_node_for_averaging_sm_f0[3].buffer_address) )[i]
183 + ( (int *) (ring_node_tab[2]->buffer_address) ) [i]
169 + ( (int *) (ring_node_for_averaging_sm_f0[4].buffer_address) )[i]
184 + ( (int *) (ring_node_tab[3]->buffer_address) ) [i]
170 + ( (int *) (ring_node_for_averaging_sm_f0[5].buffer_address) )[i]
185 + ( (int *) (ring_node_tab[4]->buffer_address) ) [i]
171 + ( (int *) (ring_node_for_averaging_sm_f0[6].buffer_address) )[i]
186 + ( (int *) (ring_node_tab[5]->buffer_address) ) [i]
172 + ( (int *) (ring_node_for_averaging_sm_f0[7].buffer_address) )[i];
187 + ( (int *) (ring_node_tab[6]->buffer_address) ) [i]
188 + ( (int *) (ring_node_tab[7]->buffer_address) ) [i];
173 }
189 }
174 nb_average = nb_average + NB_SM_TO_RECEIVE_BEFORE_AVF0;
190 nb_average = nb_average + NB_SM_TO_RECEIVE_BEFORE_AVF0;
175 if (nb_average == NB_AVERAGE_NORMAL_f0) {
191 if (nb_average == NB_AVERAGE_NORMAL_f0) {
@@ -468,16 +484,16 void init_header_asm( Header_TM_LFR_SCIE
468 // AUXILIARY DATA HEADER
484 // AUXILIARY DATA HEADER
469 header->sid = 0x00;
485 header->sid = 0x00;
470 header->biaStatusInfo = 0x00;
486 header->biaStatusInfo = 0x00;
471 header->cntASM = 0x00;
487 header->pa_lfr_pkt_cnt_asm = 0x00;
472 header->nrASM = 0x00;
488 header->pa_lfr_pkt_nr_asm = 0x00;
473 header->time[0] = 0x00;
489 header->time[0] = 0x00;
474 header->time[0] = 0x00;
490 header->time[0] = 0x00;
475 header->time[0] = 0x00;
491 header->time[0] = 0x00;
476 header->time[0] = 0x00;
492 header->time[0] = 0x00;
477 header->time[0] = 0x00;
493 header->time[0] = 0x00;
478 header->time[0] = 0x00;
494 header->time[0] = 0x00;
479 header->blkNr[0] = 0x00; // BLK_NR MSB
495 header->pa_lfr_asm_blk_nr[0] = 0x00; // BLK_NR MSB
480 header->blkNr[1] = 0x00; // BLK_NR LSB
496 header->pa_lfr_asm_blk_nr[1] = 0x00; // BLK_NR LSB
481 }
497 }
482
498
483 void send_spectral_matrix(Header_TM_LFR_SCIENCE_ASM_t *header, char *spectral_matrix,
499 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_
487 unsigned int length = 0;
503 unsigned int length = 0;
488 rtems_status_code status;
504 rtems_status_code status;
489
505
490 header->sid = (unsigned char) sid;
491
492 for (i=0; i<2; i++)
506 for (i=0; i<2; i++)
493 {
507 {
494 // BUILD THE DATA
508 // (1) BUILD THE DATA
495 spw_ioctl_send->dlen = TOTAL_SIZE_SM;
509 switch(sid)
496 spw_ioctl_send->data = &spectral_matrix[ i * TOTAL_SIZE_SM];
510 {
511 case SID_NORM_ASM_F0:
512 spw_ioctl_send->dlen = TOTAL_SIZE_ASM_F0 / 2;
513 spw_ioctl_send->data = &spectral_matrix[ ASM_F0_INDICE_START + i * (TOTAL_SIZE_ASM_F0/2)];
514 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM_F0;
515 header->pa_lfr_asm_blk_nr[0] = (unsigned char) ( (NB_BINS_PER_ASM_F0/2) >> 8 ); // BLK_NR MSB
516 header->pa_lfr_asm_blk_nr[1] = (unsigned char) (NB_BINS_PER_ASM_F0/2); // BLK_NR LSB
517 break;
518 case SID_NORM_ASM_F1:
519 break;
520 case SID_NORM_ASM_F2:
521 break;
522 default:
523 PRINTF1("ERR *** in send_spectral_matrix *** unexpected sid %d\n", sid)
524 break;
525 }
497 spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES;
526 spw_ioctl_send->hlen = HEADER_LENGTH_TM_LFR_SCIENCE_ASM + CCSDS_PROTOCOLE_EXTRA_BYTES;
498 spw_ioctl_send->hdr = (char *) header;
527 spw_ioctl_send->hdr = (char *) header;
499 spw_ioctl_send->options = 0;
528 spw_ioctl_send->options = 0;
500
529
501 // BUILD THE HEADER
530 // (2) BUILD THE HEADER
502 length = PACKET_LENGTH_TM_LFR_SCIENCE_ASM;
503 header->packetLength[0] = (unsigned char) (length>>8);
531 header->packetLength[0] = (unsigned char) (length>>8);
504 header->packetLength[1] = (unsigned char) (length);
532 header->packetLength[1] = (unsigned char) (length);
505 header->sid = (unsigned char) sid; // SID
533 header->sid = (unsigned char) sid; // SID
506 header->cntASM = 2;
534 header->pa_lfr_pkt_cnt_asm = 2;
507 header->nrASM = (unsigned char) (i+1);
535 header->pa_lfr_pkt_nr_asm = (unsigned char) (i+1);
508 header->blkNr[0] =(unsigned char) ( (NB_BINS_PER_SM/2) >> 8 ); // BLK_NR MSB
536
509 header->blkNr[1] = (unsigned char) (NB_BINS_PER_SM/2); // BLK_NR LSB
537 // (3) SET PACKET TIME
510 // SET PACKET TIME
511 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
538 header->time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
512 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
539 header->time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
513 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
540 header->time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
514 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
541 header->time[3] = (unsigned char) (time_management_regs->coarse_time);
515 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
542 header->time[4] = (unsigned char) (time_management_regs->fine_time>>8);
516 header->time[5] = (unsigned char) (time_management_regs->fine_time);
543 header->time[5] = (unsigned char) (time_management_regs->fine_time);
544 //
517 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
545 header->acquisitionTime[0] = (unsigned char) (time_management_regs->coarse_time>>24);
518 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
546 header->acquisitionTime[1] = (unsigned char) (time_management_regs->coarse_time>>16);
519 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
547 header->acquisitionTime[2] = (unsigned char) (time_management_regs->coarse_time>>8);
520 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
548 header->acquisitionTime[3] = (unsigned char) (time_management_regs->coarse_time);
521 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
549 header->acquisitionTime[4] = (unsigned char) (time_management_regs->fine_time>>8);
522 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
550 header->acquisitionTime[5] = (unsigned char) (time_management_regs->fine_time);
523 // SEND PACKET
551
552 // (4) SEND PACKET
524 status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE);
553 status = rtems_message_queue_send( queue_id, spw_ioctl_send, ACTION_MSG_SPW_IOCTL_SEND_SIZE);
525 if (status != RTEMS_SUCCESSFUL) {
554 if (status != RTEMS_SUCCESSFUL) {
526 printf("in send_spectral_matrix *** ERR %d\n", (int) status);
555 printf("in send_spectral_matrix *** ERR %d\n", (int) status);
@@ -174,14 +174,6 int action_enter_mode(ccsdsTelecommandPa
174 {
174 {
175 printf("in action_enter_mode *** enter mode %d\n", requestedMode);
175 printf("in action_enter_mode *** enter mode %d\n", requestedMode);
176
176
177 #ifdef PRINT_TASK_STATISTICS
178 if (requestedMode != LFR_MODE_STANDBY)
179 {
180 rtems_cpu_usage_reset();
181 maxCount = 0;
182 }
183 #endif
184
185 status = transition_validation(requestedMode);
177 status = transition_validation(requestedMode);
186
178
187 if ( status == LFR_SUCCESSFUL ) {
179 if ( status == LFR_SUCCESSFUL ) {
@@ -394,18 +386,24 int stop_current_mode(void)
394
386
395 status = RTEMS_SUCCESSFUL;
387 status = RTEMS_SUCCESSFUL;
396
388
397 // mask interruptions
389 // (1) mask interruptions
398 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
390 LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt
399 //LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
391 //LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
400 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrix interrupt simulator
392
401 // reset registers
393 // (2) clear interruptions
394 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
395 //LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
396
397 // (3) reset registers
402 reset_wfp_burst_enable(); // reset burst and enable bits
398 reset_wfp_burst_enable(); // reset burst and enable bits
403 reset_wfp_status(); // reset all the status bits
399 reset_wfp_status(); // reset all the status bits
404 // clear interruptions
400
405 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
401 // <Spectral Matrices simulator>
406 //LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
402 LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); // mask spectral matrix interrupt simulator
407 LEON_Clear_interrupt( IRQ_SM ); // clear spectral matrix interrupt simulator
403 timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
408 //**********************
404 LEON_Clear_interrupt( IRQ_SM_SIMULATOR ); // clear spectral matrix interrupt simulator
405 // </Spectral Matrices simulator>
406
409 // suspend several tasks
407 // suspend several tasks
410 if (lfrCurrentMode != LFR_MODE_STANDBY) {
408 if (lfrCurrentMode != LFR_MODE_STANDBY) {
411 status = suspend_science_tasks();
409 status = suspend_science_tasks();
@@ -441,22 +439,16 int enter_mode(unsigned char mode )
441 if ( (mode == LFR_MODE_NORMAL) || (mode == LFR_MODE_BURST)
439 if ( (mode == LFR_MODE_NORMAL) || (mode == LFR_MODE_BURST)
442 || (mode == LFR_MODE_SBM1) || (mode == LFR_MODE_SBM2) )
440 || (mode == LFR_MODE_SBM1) || (mode == LFR_MODE_SBM2) )
443 {
441 {
442 #ifdef PRINT_TASK_STATISTICS
443 rtems_cpu_usage_reset();
444 maxCount = 0;
445 #endif
444 status = restart_science_tasks();
446 status = restart_science_tasks();
445 launch_waveform_picker( mode );
447 launch_waveform_picker( mode );
446 // launch_spectral_matrix( mode );
448 launch_spectral_matrix( mode );
447 }
449 }
448 else if ( mode == LFR_MODE_STANDBY )
450 else if ( mode == LFR_MODE_STANDBY )
449 {
451 {
450 status = stop_current_mode();
451 }
452 else
453 {
454 status = RTEMS_UNSATISFIED;
455 }
456
457 if (mode == LFR_MODE_STANDBY)
458 {
459 PRINTF1("maxCount = %d\n", maxCount)
460 #ifdef PRINT_TASK_STATISTICS
452 #ifdef PRINT_TASK_STATISTICS
461 rtems_cpu_usage_report();
453 rtems_cpu_usage_report();
462 #endif
454 #endif
@@ -464,6 +456,12 int enter_mode(unsigned char mode )
464 #ifdef PRINT_STACK_REPORT
456 #ifdef PRINT_STACK_REPORT
465 rtems_stack_checker_report_usage();
457 rtems_stack_checker_report_usage();
466 #endif
458 #endif
459 status = stop_current_mode();
460 PRINTF1("maxCount = %d\n", maxCount)
461 }
462 else
463 {
464 status = RTEMS_UNSATISFIED;
467 }
465 }
468
466
469 if (status != RTEMS_SUCCESSFUL)
467 if (status != RTEMS_SUCCESSFUL)
@@ -622,13 +620,15 void launch_waveform_picker( unsigned ch
622
620
623 void launch_spectral_matrix( unsigned char mode )
621 void launch_spectral_matrix( unsigned char mode )
624 {
622 {
623 reset_nb_sm_f0();
625 reset_current_sm_ring_nodes();
624 reset_current_sm_ring_nodes();
626 reset_spectral_matrix_regs();
625 reset_spectral_matrix_regs();
626
627 // Spectral Matrices simulator
627 // Spectral Matrices simulator
628 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
628 timer_start( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR );
629 LEON_Clear_interrupt( IRQ_SM_SIMULATOR );
630 LEON_Unmask_interrupt( IRQ_SM_SIMULATOR );
629 set_local_nb_interrupt_f0_MAX();
631 set_local_nb_interrupt_f0_MAX();
630 LEON_Clear_interrupt( IRQ_SM );
631 LEON_Unmask_interrupt( IRQ_SM );
632 }
632 }
633
633
634 //****************
634 //****************
General Comments 0
You need to be logged in to leave comments. Login now