##// END OF EJS Templates
SOLVED: compatibility of fsw-gsa with the WF simulator interruption
paul -
r30:f599a59313eb default
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.4) on: Tue Jul 16 13:03:12 2013
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 19 08:56:46 2013
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=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=8 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=9 -DPRINT_MESSAGES_ON_CONSOLE
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
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -7,11 +7,11 CONFIG -= qt
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SWVERSION=-0-8
10 SWVERSION=-0-9
11 DEFINES += SW_VERSION_N1=0
11 DEFINES += SW_VERSION_N1=0
12 DEFINES += SW_VERSION_N2=0
12 DEFINES += SW_VERSION_N2=0
13 DEFINES += SW_VERSION_N3=0
13 DEFINES += SW_VERSION_N3=0
14 DEFINES += SW_VERSION_N4=8
14 DEFINES += SW_VERSION_N4=9
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 2.7.0, 2013-07-16T11:27:54. -->
3 <!-- Written by QtCreator 2.7.0, 2013-07-19T08:53:16. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -88,9 +88,10 rtems_task Init( rtems_task_argument ign
88
88
89 //**********
89 //**********
90 // WAVEFORMS
90 // WAVEFORMS
91 // simulator
92
91
93 #ifdef GSA
92 #ifdef GSA
93 // simulator
94 PRINTF("GSA is defined *** fsw-gsa is running \n")
94 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
95 configure_timer((gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_WF_SIMULATOR, CLKDIV_WF_SIMULATOR,
95 IRQ_SPARC_WF, waveforms_simulator_isr );
96 IRQ_SPARC_WF, waveforms_simulator_isr );
96 #else
97 #else
@@ -125,61 +126,17 rtems_task Init( rtems_task_argument ign
125 LEON_Unmask_interrupt( IRQ_TIME2 );
126 LEON_Unmask_interrupt( IRQ_TIME2 );
126
127
127 #ifdef GSA
128 #ifdef GSA
128 //if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
129 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
129 // printf("in INIT *** Error sending event to WFRM\n");
130 PRINTF("in INIT *** Error sending event to WFRM\n")
130 //}
131 }
131 #endif
132 #endif
132
133
134 LEON_Force_interrupt(IRQ_WF);
135
133 status = rtems_task_delete(RTEMS_SELF);
136 status = rtems_task_delete(RTEMS_SELF);
134
137
135 }
138 }
136
139
137 rtems_task spiq_task(rtems_task_argument unused)
138 {
139 rtems_event_set event_out;
140 rtems_status_code status;
141 unsigned char lfrMode;
142
143 while(true){
144 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
145 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
146
147 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
148
149 status = spacewire_wait_for_link();
150
151 if (status != RTEMS_SUCCESSFUL)
152 {
153 //****************
154 // STOP THE SYSTEM
155 spacewire_compute_stats_offsets();
156 stop_current_mode();
157 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
158 PRINTF("in SPIQ *** Error suspending RECV Task\n")
159 }
160 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
161 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
162 }
163
164 //***************************
165 // RESTART THE SPACEWIRE LINK
166 spacewire_configure_link();
167
168 //*******************
169 // RESTART THE SYSTEM
170 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
171 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
172 if (status != RTEMS_SUCCESSFUL) {
173 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
174 }
175 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
176 PRINTF("in SPIQ *** Error restarting RECV Task\n")
177 }
178 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
179 }
180 }
181 }
182
183 void init_parameter_dump(void)
140 void init_parameter_dump(void)
184 {
141 {
185 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
142 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
@@ -436,6 +393,54 int start_all_tasks( void )
436 return 0;
393 return 0;
437 }
394 }
438
395
396 // SPACEWIRE
397
398 rtems_task spiq_task(rtems_task_argument unused)
399 {
400 rtems_event_set event_out;
401 rtems_status_code status;
402 unsigned char lfrMode;
403
404 while(true){
405 PRINTF("in SPIQ *** Waiting for SPW_LINKERR_EVENT\n")
406 rtems_event_receive(SPW_LINKERR_EVENT, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); // wait for an SPW_LINKERR_EVENT
407
408 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; // get the current mode
409
410 status = spacewire_wait_for_link();
411
412 if (status != RTEMS_SUCCESSFUL)
413 {
414 //****************
415 // STOP THE SYSTEM
416 spacewire_compute_stats_offsets();
417 stop_current_mode();
418 if (rtems_task_suspend(Task_id[TASKID_RECV])!=RTEMS_SUCCESSFUL) { // suspend RECV task
419 PRINTF("in SPIQ *** Error suspending RECV Task\n")
420 }
421 if (rtems_task_suspend(Task_id[TASKID_HOUS])!=RTEMS_SUCCESSFUL) { // suspend HOUS task
422 PRINTF("in SPIQ *** Error suspending HOUS Task\n")
423 }
424
425 //***************************
426 // RESTART THE SPACEWIRE LINK
427 spacewire_configure_link();
428
429 //*******************
430 // RESTART THE SYSTEM
431 //ioctl(fdSPW, SPACEWIRE_IOCTRL_CLR_STATISTICS); // clear statistics
432 status = rtems_task_restart( Task_id[TASKID_HOUS], 1 );
433 if (status != RTEMS_SUCCESSFUL) {
434 PRINTF1("in SPIQ *** Error restarting HOUS Task *** code %d\n", status)
435 }
436 if (rtems_task_restart(Task_id[TASKID_RECV], 1) != RTEMS_SUCCESSFUL) { // restart RECV task
437 PRINTF("in SPIQ *** Error restarting RECV Task\n")
438 }
439 //enter_mode(lfrMode, NULL); // enter the mode that was running before the SpaceWire interruption
440 }
441 }
442 }
443
439 int spacewire_configure_link( void )
444 int spacewire_configure_link( void )
440 {
445 {
441 rtems_status_code status;
446 rtems_status_code status;
@@ -466,13 +471,13 int spacewire_configure_link( void )
466 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
471 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_RXBLOCK, 1); // sets the blocking mode for reception
467 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
472 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_RXBLOCK\n")
468 //
473 //
469 //status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
474 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_EVENT_ID, Task_id[TASKID_SPIQ]); // sets the task ID to which an event is sent when a
470 //if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
475 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_EVENT_ID\n") // link-error interrupt occurs
471 //
476 //
472 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
477 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_DISABLE_ERR, 0); // automatic link-disabling due to link-error interrupts
473 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
478 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_DISABLE_ERR\n")
474 //
479 //
475 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 0); // sets the link-error interrupt bit
480 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ, 1); // sets the link-error interrupt bit
476 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
481 if (status!=RTEMS_SUCCESSFUL) PRINTF("in SPIQ *** Error SPACEWIRE_IOCTRL_SET_LINK_ERR_IRQ\n")
477 //
482 //
478 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
483 status = ioctl(fdSPW, SPACEWIRE_IOCTRL_SET_TXBLOCK, 0); // transmission blocks
@@ -1,11 +1,12
1 #include <tc_handler.h>
1 #include <tc_handler.h>
2 #include <fsw_params.h>
2 #include <fsw_params.h>
3
3
4 char *DumbMessages[5] = {"in DUMB *** default", // RTEMS_EVENT_0
4 char *DumbMessages[6] = {"in DUMB *** default", // RTEMS_EVENT_0
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
5 "in DUMB *** timecode_irq_handler", // RTEMS_EVENT_1
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
6 "in DUMB *** waveforms_isr", // RTEMS_EVENT_2
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
7 "in DUMB *** in SMIQ *** Error sending event to AVF0", // RTEMS_EVENT_3
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ" // RTEMS_EVENT_4
8 "in DUMB *** spectral_matrices_isr *** Error sending event to SMIQ", // RTEMS_EVENT_4
9 "in DUMB *** waveforms_simulator_isr" // RTEMS_EVENT_5
9 };
10 };
10
11
11 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
12 unsigned char currentTC_LEN_RCV[2]; // SHALL be equal to the current TC packet estimated packet length field
@@ -526,10 +527,9 rtems_task dumb_task( rtems_task_argumen
526 PRINTF("in DUMB *** \n")
527 PRINTF("in DUMB *** \n")
527
528
528 while(1){
529 while(1){
529 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4,
530 rtems_event_receive(RTEMS_EVENT_0 | RTEMS_EVENT_1 | RTEMS_EVENT_2 | RTEMS_EVENT_3 | RTEMS_EVENT_4 | RTEMS_EVENT_5,
530 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
531 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); // wait for an RTEMS_EVENT
531 intEventOut = (unsigned int) event_out;
532 intEventOut = (unsigned int) event_out;
532 PRINTF1("in DUMB *** event_out %x\n", (int) event_out)
533 for ( i=0; i<32; i++)
533 for ( i=0; i<32; i++)
534 {
534 {
535 if ( ((intEventOut >> i) & 0x0001) != 0)
535 if ( ((intEventOut >> i) & 0x0001) != 0)
@@ -823,7 +823,7 int transition_validation(unsigned char
823 switch (requestedMode)
823 switch (requestedMode)
824 {
824 {
825 case LFR_MODE_STANDBY:
825 case LFR_MODE_STANDBY:
826 if ( (lfrMode == LFR_MODE_STANDBY) ) {
826 if ( lfrMode == LFR_MODE_STANDBY ) {
827 status = LFR_DEFAULT;
827 status = LFR_DEFAULT;
828 }
828 }
829 else
829 else
@@ -832,7 +832,7 int transition_validation(unsigned char
832 }
832 }
833 break;
833 break;
834 case LFR_MODE_NORMAL:
834 case LFR_MODE_NORMAL:
835 if ( (lfrMode == LFR_MODE_NORMAL) ) {
835 if ( lfrMode == LFR_MODE_NORMAL ) {
836 status = LFR_DEFAULT;
836 status = LFR_DEFAULT;
837 }
837 }
838 else {
838 else {
@@ -840,8 +840,7 int transition_validation(unsigned char
840 }
840 }
841 break;
841 break;
842 case LFR_MODE_BURST:
842 case LFR_MODE_BURST:
843 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_BURST)
843 if ( lfrMode == LFR_MODE_STANDBY ) {
844 | (lfrMode == LFR_MODE_SBM2) ) {
845 status = LFR_DEFAULT;
844 status = LFR_DEFAULT;
846 }
845 }
847 else {
846 else {
@@ -849,7 +848,7 int transition_validation(unsigned char
849 }
848 }
850 break;
849 break;
851 case LFR_MODE_SBM1:
850 case LFR_MODE_SBM1:
852 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_SBM1) ) {
851 if ( lfrMode == LFR_MODE_SBM1 ) {
853 status = LFR_DEFAULT;
852 status = LFR_DEFAULT;
854 }
853 }
855 else {
854 else {
@@ -857,8 +856,7 int transition_validation(unsigned char
857 }
856 }
858 break;
857 break;
859 case LFR_MODE_SBM2:
858 case LFR_MODE_SBM2:
860 if ( (lfrMode == LFR_MODE_STANDBY) | (lfrMode == LFR_MODE_NORMAL)
859 if ( lfrMode == LFR_MODE_SBM2 ) {
861 | (lfrMode == LFR_MODE_BURST) | (lfrMode == LFR_MODE_SBM2) ) {
862 status = LFR_DEFAULT;
860 status = LFR_DEFAULT;
863 }
861 }
864 else {
862 else {
@@ -964,15 +962,16 int enter_normal_mode( ccsdsTelecommandP
964 }
962 }
965
963
966 #ifdef GSA
964 #ifdef GSA
967 LEON_Unmask_interrupt( IRQ_WF );
965 LEON_Clear_interrupt( IRQ_WF );
966 LEON_Unmask_interrupt( IRQ_WF );
968 #else
967 #else
969 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
968 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
970 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
969 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
971 waveform_picker_regs->burst_enable = 0x07;
970 waveform_picker_regs->burst_enable = 0x07;
972 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
971 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
973 waveform_picker_regs->status = 0x00;
972 waveform_picker_regs->status = 0x00;
974 #endif
973 #endif
975 LEON_Unmask_interrupt( IRQ_SM );
974 LEON_Unmask_interrupt( IRQ_SM );
976
975
977 return status;
976 return status;
978 }
977 }
@@ -139,13 +139,15 rtems_isr waveforms_simulator_isr( rtems
139 //********
139 //********
140 // STANDBY
140 // STANDBY
141 case(LFR_MODE_STANDBY):
141 case(LFR_MODE_STANDBY):
142 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
142 break;
143 break;
143
144
144 //******
145 //******
145 // NORMAL
146 // NORMAL
146 case(LFR_MODE_NORMAL):
147 case(LFR_MODE_NORMAL):
148 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
147 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
149 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
148 PRINTF("ERR *** in waveforms_isr *** error sending event to WFRM\n")
150 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_5 );
149 }
151 }
150 break;
152 break;
151
153
@@ -549,7 +551,9 void send_waveform_norm(Header_TM_LFR_SC
549 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
551 send_waveform_SWF( header, wf_snap_f2, SID_NORM_SWF_F2, spw_ioctl_send);
550 #ifdef GSA
552 #ifdef GSA
551 // irq processed, reset the related register of the timer unit
553 // irq processed, reset the related register of the timer unit
552 gptimer_regs->timer[2].ctrl = gptimer_regs->timer[2].ctrl | 0x00000010;
554 gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl = gptimer_regs->timer[TIMER_WF_SIMULATOR].ctrl | 0x00000010;
555 // clear the interruption
556 LEON_Clear_interrupt(IRQ_WF);
553 #else
557 #else
554 // irq processed, reset the related register of the waveform picker
558 // irq processed, reset the related register of the waveform picker
555 if (lfrMode == LFR_MODE_SBM1) {
559 if (lfrMode == LFR_MODE_SBM1) {
General Comments 0
You need to be logged in to leave comments. Login now