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