@@ -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: |
|
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= |
|
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= |
|
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-1 |
|
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 (12 |
|
203 | #define PACKET_LENGTH_HK (124 - CCSDS_TC_TM_PACKET_OFFSET) | |
202 |
#define PACKET_LENGTH_PARAMETER_DUMP (3 |
|
204 | #define PACKET_LENGTH_PARAMETER_DUMP (36 - CCSDS_TC_TM_PACKET_OFFSET) | |
203 |
#define PACKET_LENGTH_TM_LFR_SCIENCE_ASM |
|
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 |
|
445 | unsigned char pa_lfr_pkt_cnt_asm; | |
442 |
unsigned char |
|
446 | unsigned char pa_lfr_pkt_nr_asm; | |
443 | unsigned char acquisitionTime[6]; |
|
447 | unsigned char acquisitionTime[6]; | |
444 |
unsigned char |
|
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 |
|
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 |
|
|
181 | averaged_sm_f0[i] = ( (int *) (ring_node_tab[0]->buffer_address) ) [i] | |
167 |
+ ( (int *) (ring_node_ |
|
182 | + ( (int *) (ring_node_tab[1]->buffer_address) ) [i] | |
168 |
+ ( (int *) (ring_node_ |
|
183 | + ( (int *) (ring_node_tab[2]->buffer_address) ) [i] | |
169 |
+ ( (int *) (ring_node_ |
|
184 | + ( (int *) (ring_node_tab[3]->buffer_address) ) [i] | |
170 |
+ ( (int *) (ring_node_ |
|
185 | + ( (int *) (ring_node_tab[4]->buffer_address) ) [i] | |
171 |
+ ( (int *) (ring_node_ |
|
186 | + ( (int *) (ring_node_tab[5]->buffer_address) ) [i] | |
172 |
+ ( (int *) (ring_node_ |
|
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-> |
|
487 | header->pa_lfr_pkt_cnt_asm = 0x00; | |
472 |
header-> |
|
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-> |
|
495 | header->pa_lfr_asm_blk_nr[0] = 0x00; // BLK_NR MSB | |
480 |
header-> |
|
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-> |
|
534 | header->pa_lfr_pkt_cnt_asm = 2; | |
507 |
header-> |
|
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 |
|
|
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 |
|
|
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