##// END OF EJS Templates
Sync
paul -
r99:ef2b18a5a9ab VHDLib206
parent child
Show More
@@ -1,6 +1,6
1 1 #############################################################################
2 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 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=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 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=1 # internal
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-14T07:07:03. -->
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 (126 - CCSDS_TC_TM_PACKET_OFFSET)
202 #define PACKET_LENGTH_PARAMETER_DUMP (34 - 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)
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 cntASM;
442 unsigned char nrASM;
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 blkNr[2];
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 // 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
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 + ( (int *) (ring_node_for_averaging_sm_f0[1].buffer_address) )[i]
167 + ( (int *) (ring_node_for_averaging_sm_f0[2].buffer_address) )[i]
168 + ( (int *) (ring_node_for_averaging_sm_f0[3].buffer_address) )[i]
169 + ( (int *) (ring_node_for_averaging_sm_f0[4].buffer_address) )[i]
170 + ( (int *) (ring_node_for_averaging_sm_f0[5].buffer_address) )[i]
171 + ( (int *) (ring_node_for_averaging_sm_f0[6].buffer_address) )[i]
172 + ( (int *) (ring_node_for_averaging_sm_f0[7].buffer_address) )[i];
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->cntASM = 0x00;
472 header->nrASM = 0x00;
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->blkNr[0] = 0x00; // BLK_NR MSB
480 header->blkNr[1] = 0x00; // BLK_NR LSB
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->cntASM = 2;
507 header->nrASM = (unsigned char) (i+1);
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 //LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
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 // launch_spectral_matrix( mode );
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