@@ -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.6) on: |
|
3 | # Generated by qmake (2.01a) (Qt 4.8.6) on: Thu Nov 6 16:03:39 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,13 +10,13 | |||||
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=2 -DSW_VERSION_N2=0 -DSW_VERSION_N3=1 -DSW_VERSION_N4=1 -DLPP_DPU_DESTID -DPRINT_MESSAGES_ON_CONSOLE |
|
13 | DEFINES = -DSW_VERSION_N1=2 -DSW_VERSION_N2=0 -DSW_VERSION_N3=1 -DSW_VERSION_N4=1 -DLPP_DPU_DESTID -DPRINT_MESSAGES_ON_CONSOLE -DPRINT_TASK_STATISTICS | |
14 |
CFLAGS = -pipe -O3 |
|
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../header/processing -I../src/LFR_basic-parameters |
|
16 | INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../header/processing -I../src/LFR_basic-parameters | |
17 | LINK = sparc-rtems-g++ |
|
17 | LINK = sparc-rtems-g++ | |
18 | LFLAGS = |
|
18 | LFLAGS = | |
19 |
LIBS = $(SUBLIBS) |
|
19 | LIBS = $(SUBLIBS) | |
20 | AR = sparc-rtems-ar rcs |
|
20 | AR = sparc-rtems-ar rcs | |
21 | RANLIB = |
|
21 | RANLIB = | |
22 | QMAKE = /usr/bin/qmake-qt4 |
|
22 | QMAKE = /usr/bin/qmake-qt4 |
@@ -2,7 +2,7 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 *** vhdl_dev *** debug_tch |
|
3 | # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** vhdl_dev *** debug_tch | |
4 | # lpp_dpu_destid |
|
4 | # lpp_dpu_destid | |
5 | CONFIG += console verbose lpp_dpu_destid |
|
5 | CONFIG += console verbose lpp_dpu_destid cpu_usage_report | |
6 | CONFIG -= qt |
|
6 | CONFIG -= qt | |
7 |
|
7 | |||
8 | include(./sparc.pri) |
|
8 | include(./sparc.pri) | |
@@ -15,9 +15,8 DEFINES += SW_VERSION_N3=1 # patch | |||||
15 | DEFINES += SW_VERSION_N4=1 # internal |
|
15 | DEFINES += SW_VERSION_N4=1 # internal | |
16 |
|
16 | |||
17 | # <GCOV> |
|
17 | # <GCOV> | |
18 | QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage |
|
18 | #QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage | |
19 | #QMAKE_LFLAGS_RELEASE += |
|
19 | #LIBS += -lgcov /opt/GCOV/01A/lib/overload.o -lc | |
20 | LIBS += -lgcov /opt/GCOV/01A/lib/overload.o -lc |
|
|||
21 | # </GCOV> |
|
20 | # </GCOV> | |
22 |
|
21 | |||
23 | # <CHANGE BEFORE FLIGHT> |
|
22 | # <CHANGE BEFORE FLIGHT> |
@@ -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.2. |
|
3 | <!-- Written by QtCreator 3.2.1, 2014-11-05T17:29:44. --> | |
4 | <qtcreator> |
|
4 | <qtcreator> | |
5 | <data> |
|
5 | <data> | |
6 | <variable>EnvironmentId</variable> |
|
6 | <variable>EnvironmentId</variable> |
@@ -34,12 +34,14 void getTime( unsigned char *time); | |||||
34 | unsigned long long int getTimeAsUnsignedLongLongInt( ); |
|
34 | unsigned long long int getTimeAsUnsignedLongLongInt( ); | |
35 | void send_dumb_hk( void ); |
|
35 | void send_dumb_hk( void ); | |
36 |
void get_v_e1_e2_f3 |
|
36 | void get_v_e1_e2_f3(unsigned char *spacecraft_potential); | |
|
37 | void get_v_e1_e2_f3_alt(unsigned char *spacecraft_potential); | |||
37 | void get_cpu_load( unsigned char *resource_statistics ); |
|
38 | void get_cpu_load( unsigned char *resource_statistics ); | |
38 |
|
39 | |||
39 | extern int sched_yield( void ); |
|
40 | extern int sched_yield( void ); | |
40 | extern void rtems_cpu_usage_reset(); |
|
41 | extern void rtems_cpu_usage_reset(); | |
41 | extern ring_node *current_ring_node_f3; |
|
42 | extern ring_node *current_ring_node_f3; | |
42 | extern ring_node *ring_node_to_send_cwf_f3; |
|
43 | extern ring_node *ring_node_to_send_cwf_f3; | |
|
44 | extern ring_node waveform_ring_f3[]; | |||
43 | extern unsigned short sequenceCounterHK; |
|
45 | extern unsigned short sequenceCounterHK; | |
44 |
|
46 | |||
45 | #endif // FSW_MISC_H_INCLUDED |
|
47 | #endif // FSW_MISC_H_INCLUDED |
@@ -13,11 +13,11 | |||||
13 | typedef struct ring_node |
|
13 | typedef struct ring_node | |
14 | { |
|
14 | { | |
15 | struct ring_node *previous; |
|
15 | struct ring_node *previous; | |
|
16 | struct ring_node *next; | |||
|
17 | unsigned int coarseTime; | |||
|
18 | unsigned int fineTime; | |||
16 | int buffer_address; |
|
19 | int buffer_address; | |
17 | struct ring_node *next; |
|
|||
18 | unsigned int status; |
|
20 | unsigned int status; | |
19 | unsigned coarseTime; |
|
|||
20 | unsigned int fineTime; |
|
|||
21 | } ring_node; |
|
21 | } ring_node; | |
22 |
|
22 | |||
23 | //************************ |
|
23 | //************************ |
@@ -40,6 +40,8 typedef struct { | |||||
40 |
|
40 | |||
41 | typedef struct { |
|
41 | typedef struct { | |
42 | volatile int ctrl; // bit 0 forces the load of the coarse_time_load value and resets the fine_time |
|
42 | volatile int ctrl; // bit 0 forces the load of the coarse_time_load value and resets the fine_time | |
|
43 | // bit 1 is the soft reset for the time management module | |||
|
44 | // bit 2 is the soft reset for the waveform picker and the spectral matrix modules, set to 1 after HW reset | |||
43 | volatile int coarse_time_load; |
|
45 | volatile int coarse_time_load; | |
44 | volatile int coarse_time; |
|
46 | volatile int coarse_time; | |
45 | volatile int fine_time; |
|
47 | volatile int fine_time; |
@@ -96,6 +96,7 void BP_send( char *data, | |||||
96 |
|
96 | |||
97 | //****************** |
|
97 | //****************** | |
98 | // general functions |
|
98 | // general functions | |
|
99 | void reset_sm_status( void ); | |||
99 | void reset_spectral_matrix_regs( void ); |
|
100 | void reset_spectral_matrix_regs( void ); | |
100 | void set_time(unsigned char *time, unsigned char *timeInBuffer ); |
|
101 | void set_time(unsigned char *time, unsigned char *timeInBuffer ); | |
101 | unsigned long long int get_acquisition_time( unsigned char *timePtr ); |
|
102 | unsigned long long int get_acquisition_time( unsigned char *timePtr ); |
@@ -44,11 +44,13 int suspend_science_tasks(); | |||||
44 | void launch_waveform_picker(unsigned char mode , unsigned int transitionCoarseTime); |
|
44 | void launch_waveform_picker( unsigned char mode , unsigned int transitionCoarseTime ); | |
45 | void launch_spectral_matrix( void ); |
|
45 | void launch_spectral_matrix( void ); | |
46 | void launch_spectral_matrix_simu( void ); |
|
46 | void launch_spectral_matrix_simu( void ); | |
47 |
void set_irq_on |
|
47 | void set_sm_irq_onNewMatrix( unsigned char value ); | |
48 |
void set_ |
|
48 | void set_sm_irq_onError( unsigned char value ); | |
49 |
|
49 | |||
50 | // other functions |
|
50 | // other functions | |
51 | void updateLFRCurrentMode(); |
|
51 | void updateLFRCurrentMode(); | |
|
52 | void set_lfr_soft_reset( unsigned char value ); | |||
|
53 | void reset_lfr( void ); | |||
52 | void update_last_TC_exe( ccsdsTelecommandPacket_t *TC , unsigned char *time ); |
|
54 | void update_last_TC_exe( ccsdsTelecommandPacket_t *TC , unsigned char *time ); | |
53 | void update_last_TC_rej(ccsdsTelecommandPacket_t *TC , unsigned char *time ); |
|
55 | void update_last_TC_rej(ccsdsTelecommandPacket_t *TC , unsigned char *time ); | |
54 | void close_action( ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id ); |
|
56 | void close_action( ccsdsTelecommandPacket_t *TC, int result, rtems_id queue_id ); |
@@ -59,10 +59,10 int init_header_snapshot_wf_table( | |||||
59 | int init_header_continuous_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF ); |
|
59 | int init_header_continuous_wf_table( unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF ); | |
60 | int init_header_continuous_cwf3_light_table( Header_TM_LFR_SCIENCE_CWF_t *headerCWF ); |
|
60 | int init_header_continuous_cwf3_light_table( Header_TM_LFR_SCIENCE_CWF_t *headerCWF ); | |
61 | // |
|
61 | // | |
62 |
int send_waveform_SWF( |
|
62 | int send_waveform_SWF( ring_node *ring_node_to_send, unsigned int sid, Header_TM_LFR_SCIENCE_SWF_t *headerSWF, rtems_id queue_id ); | |
63 |
int send_waveform_CWF( |
|
63 | int send_waveform_CWF( ring_node *ring_node_to_send, unsigned int sid, Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id ); | |
64 |
int send_waveform_CWF3( |
|
64 | int send_waveform_CWF3_light( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id ); | |
65 | int send_waveform_CWF3_light( volatile int *waveform, Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id ); |
|
65 | int send_ring_node_CWF( ring_node *ring_node_to_send ); | |
66 | // |
|
66 | // | |
67 | void compute_acquisition_time(unsigned int coarseTime, unsigned int fineTime, |
|
67 | void compute_acquisition_time(unsigned int coarseTime, unsigned int fineTime, | |
68 | unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char *acquisitionTime ); |
|
68 | unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char *acquisitionTime ); | |
@@ -76,6 +76,7 rtems_id get_pkts_queue_id( void ); | |||||
76 | // RESET |
|
76 | // RESET | |
77 | void reset_wfp_burst_enable( void ); |
|
77 | void reset_wfp_burst_enable( void ); | |
78 | void reset_wfp_status(void); |
|
78 | void reset_wfp_status( void ); | |
|
79 | void reset_wfp_buffer_addresses( void ); | |||
79 | void reset_waveform_picker_regs( void ); |
|
80 | void reset_waveform_picker_regs( void ); | |
80 | // SET |
|
81 | // SET | |
81 | void set_wfp_data_shaping(void); |
|
82 | void set_wfp_data_shaping(void); |
@@ -73,6 +73,8 rtems_task Init( rtems_task_argument ign | |||||
73 |
|
73 | |||
74 | unsigned char *vhdlVersion; |
|
74 | unsigned char *vhdlVersion; | |
75 |
|
75 | |||
|
76 | reset_lfr(); | |||
|
77 | ||||
76 | reset_local_time(); |
|
78 | reset_local_time(); | |
77 |
|
79 | |||
78 | rtems_cpu_usage_reset(); |
|
80 | rtems_cpu_usage_reset(); | |
@@ -245,7 +247,7 void init_local_mode_parameters( void ) | |||||
245 |
|
247 | |||
246 | void reset_local_time( void ) |
|
248 | void reset_local_time( void ) | |
247 | { |
|
249 | { | |
248 | time_management_regs->ctrl = 0x02; // software reset, coarse time = 0x80000000 |
|
250 | time_management_regs->ctrl = time_management_regs->ctrl | 0x02; // [0010] software reset, coarse time = 0x80000000 | |
249 | } |
|
251 | } | |
250 |
|
252 | |||
251 | void create_names( void ) // create all names for tasks and queues |
|
253 | void create_names( void ) // create all names for tasks and queues | |
@@ -464,7 +466,7 int create_all_tasks( void ) // create a | |||||
464 | status = rtems_task_create( |
|
466 | status = rtems_task_create( | |
465 | Task_name[TASKID_HOUS], TASK_PRIORITY_HOUS, RTEMS_MINIMUM_STACK_SIZE, |
|
467 | Task_name[TASKID_HOUS], TASK_PRIORITY_HOUS, RTEMS_MINIMUM_STACK_SIZE, | |
466 | RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT, |
|
468 | RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT, | |
467 | RTEMS_DEFAULT_ATTRIBUTES, &Task_id[TASKID_HOUS] |
|
469 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_HOUS] | |
468 | ); |
|
470 | ); | |
469 | } |
|
471 | } | |
470 |
|
472 |
@@ -225,7 +225,7 rtems_task hous_task(rtems_task_argument | |||||
225 |
|
225 | |||
226 | spacewire_update_statistics(); |
|
226 | spacewire_update_statistics(); | |
227 |
|
227 | |||
228 | get_v_e1_e2_f3( housekeeping_packet.hk_lfr_sc_v_f3 ); |
|
228 | // get_v_e1_e2_f3_alt( housekeeping_packet.hk_lfr_sc_v_f3 ); | |
229 | get_cpu_load( (unsigned char *) &housekeeping_packet.hk_lfr_cpu_load ); |
|
229 | get_cpu_load( (unsigned char *) &housekeeping_packet.hk_lfr_cpu_load ); | |
230 |
|
230 | |||
231 | // SEND PACKET |
|
231 | // SEND PACKET | |
@@ -484,12 +484,12 void get_v_e1_e2_f3( unsigned char *spac | |||||
484 | else |
|
484 | else | |
485 | { |
|
485 | { | |
486 | offset_in_samples = 0; |
|
486 | offset_in_samples = 0; | |
487 | PRINTF2("ERR *** in get_v_e1_e2_f3 *** coarseTime = %x, acquisitionTime = %x\n", coarseTime, acquisitionTime) |
|
487 | // PRINTF2("ERR *** in get_v_e1_e2_f3 *** coarseTime = %x, acquisitionTime = %x\n", coarseTime, acquisitionTime) | |
488 | } |
|
488 | } | |
489 |
|
489 | |||
490 | if ( offset_in_samples > (NB_SAMPLES_PER_SNAPSHOT - 1) ) |
|
490 | if ( offset_in_samples > (NB_SAMPLES_PER_SNAPSHOT - 1) ) | |
491 | { |
|
491 | { | |
492 | PRINTF1("ERR *** in get_v_e1_e2_f3 *** trying to read out of the buffer, counter = %d\n", offset_in_samples) |
|
492 | // PRINTF1("ERR *** in get_v_e1_e2_f3 *** trying to read out of the buffer, counter = %d\n", offset_in_samples) | |
493 | offset_in_samples = NB_SAMPLES_PER_SNAPSHOT -1; |
|
493 | offset_in_samples = NB_SAMPLES_PER_SNAPSHOT -1; | |
494 | } |
|
494 | } | |
495 | offset_in_bytes = TIME_OFFSET_IN_BYTES + offset_in_samples * NB_WORDS_SWF_BLK * 4; |
|
495 | offset_in_bytes = TIME_OFFSET_IN_BYTES + offset_in_samples * NB_WORDS_SWF_BLK * 4; | |
@@ -502,6 +502,111 void get_v_e1_e2_f3( unsigned char *spac | |||||
502 | } |
|
502 | } | |
503 | } |
|
503 | } | |
504 |
|
504 | |||
|
505 | void get_v_e1_e2_f3_alt( unsigned char *spacecraft_potential ) | |||
|
506 | { | |||
|
507 | unsigned long long int localTime_asLong; | |||
|
508 | unsigned long long int f3_0_AcquisitionTime_asLong; | |||
|
509 | unsigned long long int f3_1_AcquisitionTime_asLong; | |||
|
510 | unsigned long long int deltaT; | |||
|
511 | unsigned long long int deltaT_f3_0; | |||
|
512 | unsigned long long int deltaT_f3_1; | |||
|
513 | unsigned char *bufferPtr; | |||
|
514 | ||||
|
515 | unsigned int offset_in_samples; | |||
|
516 | unsigned int offset_in_bytes; | |||
|
517 | unsigned char f3; | |||
|
518 | ||||
|
519 | bufferPtr = NULL; | |||
|
520 | deltaT = 0; | |||
|
521 | deltaT_f3_0 = 0xffffffff; | |||
|
522 | deltaT_f3_1 = 0xffffffff; | |||
|
523 | f3 = 16; // v, e1 and e2 will be picked up each second, f3 = 16 Hz | |||
|
524 | ||||
|
525 | if (lfrCurrentMode == LFR_MODE_STANDBY) | |||
|
526 | { | |||
|
527 | spacecraft_potential[0] = 0x00; | |||
|
528 | spacecraft_potential[1] = 0x00; | |||
|
529 | spacecraft_potential[2] = 0x00; | |||
|
530 | spacecraft_potential[3] = 0x00; | |||
|
531 | spacecraft_potential[4] = 0x00; | |||
|
532 | spacecraft_potential[5] = 0x00; | |||
|
533 | } | |||
|
534 | else | |||
|
535 | { | |||
|
536 | localTime_asLong = get_acquisition_time( (unsigned char *) &time_management_regs->coarse_time ); | |||
|
537 | f3_0_AcquisitionTime_asLong = get_acquisition_time( (unsigned char *) &waveform_picker_regs->f3_0_coarse_time ); | |||
|
538 | f3_1_AcquisitionTime_asLong = get_acquisition_time( (unsigned char *) &waveform_picker_regs->f3_1_coarse_time ); | |||
|
539 | printf("localTime 0x%llx, f3_0 0x%llx, f3_1 0x%llx\n", | |||
|
540 | localTime_asLong, | |||
|
541 | f3_0_AcquisitionTime_asLong, | |||
|
542 | f3_1_AcquisitionTime_asLong); | |||
|
543 | ||||
|
544 | if ( localTime_asLong >= f3_0_AcquisitionTime_asLong ) | |||
|
545 | { | |||
|
546 | deltaT_f3_0 = localTime_asLong - f3_0_AcquisitionTime_asLong; | |||
|
547 | } | |||
|
548 | ||||
|
549 | if ( localTime_asLong > f3_1_AcquisitionTime_asLong ) | |||
|
550 | { | |||
|
551 | deltaT_f3_1 = localTime_asLong - f3_1_AcquisitionTime_asLong; | |||
|
552 | } | |||
|
553 | ||||
|
554 | if ( (deltaT_f3_0 != 0xffffffff) && (deltaT_f3_1 != 0xffffffff) ) | |||
|
555 | { | |||
|
556 | if ( deltaT_f3_0 > deltaT_f3_1 ) | |||
|
557 | { | |||
|
558 | deltaT = deltaT_f3_1; | |||
|
559 | bufferPtr = (unsigned char*) waveform_picker_regs->addr_data_f3_1; | |||
|
560 | } | |||
|
561 | else | |||
|
562 | { | |||
|
563 | deltaT = deltaT_f3_0; | |||
|
564 | bufferPtr = (unsigned char*) waveform_picker_regs->addr_data_f3_0; | |||
|
565 | } | |||
|
566 | } | |||
|
567 | else if ( (deltaT_f3_0 == 0xffffffff) && (deltaT_f3_1 != 0xffffffff) ) | |||
|
568 | { | |||
|
569 | deltaT = deltaT_f3_1; | |||
|
570 | bufferPtr = (unsigned char*) waveform_picker_regs->addr_data_f3_1; | |||
|
571 | } | |||
|
572 | else if ( (deltaT_f3_0 != 0xffffffff) && (deltaT_f3_1 == 0xffffffff) ) | |||
|
573 | { | |||
|
574 | deltaT = deltaT_f3_0; | |||
|
575 | bufferPtr = (unsigned char*) waveform_picker_regs->addr_data_f3_1; | |||
|
576 | } | |||
|
577 | else | |||
|
578 | { | |||
|
579 | deltaT = 0xffffffff; | |||
|
580 | } | |||
|
581 | ||||
|
582 | if ( deltaT == 0xffffffff ) | |||
|
583 | { | |||
|
584 | spacecraft_potential[0] = 0x00; | |||
|
585 | spacecraft_potential[1] = 0x00; | |||
|
586 | spacecraft_potential[2] = 0x00; | |||
|
587 | spacecraft_potential[3] = 0x00; | |||
|
588 | spacecraft_potential[4] = 0x00; | |||
|
589 | spacecraft_potential[5] = 0x00; | |||
|
590 | } | |||
|
591 | else | |||
|
592 | { | |||
|
593 | offset_in_samples = ( (double) deltaT ) / 65536. * f3; | |||
|
594 | if ( offset_in_samples > (NB_SAMPLES_PER_SNAPSHOT - 1) ) | |||
|
595 | { | |||
|
596 | PRINTF1("ERR *** in get_v_e1_e2_f3 *** trying to read out of the buffer, counter = %d\n", offset_in_samples) | |||
|
597 | offset_in_samples = NB_SAMPLES_PER_SNAPSHOT - 1; | |||
|
598 | } | |||
|
599 | offset_in_bytes = offset_in_samples * NB_WORDS_SWF_BLK * 4; | |||
|
600 | spacecraft_potential[0] = bufferPtr[ offset_in_bytes + 0]; | |||
|
601 | spacecraft_potential[1] = bufferPtr[ offset_in_bytes + 1]; | |||
|
602 | spacecraft_potential[2] = bufferPtr[ offset_in_bytes + 2]; | |||
|
603 | spacecraft_potential[3] = bufferPtr[ offset_in_bytes + 3]; | |||
|
604 | spacecraft_potential[4] = bufferPtr[ offset_in_bytes + 4]; | |||
|
605 | spacecraft_potential[5] = bufferPtr[ offset_in_bytes + 5]; | |||
|
606 | } | |||
|
607 | } | |||
|
608 | } | |||
|
609 | ||||
505 | void get_cpu_load( unsigned char *resource_statistics ) |
|
610 | void get_cpu_load( unsigned char *resource_statistics ) | |
506 | { |
|
611 | { | |
507 | unsigned char cpu_load; |
|
612 | unsigned char cpu_load; |
@@ -577,6 +577,17 void BP_send(char *data, rtems_id queue_ | |||||
577 | //****************** |
|
577 | //****************** | |
578 | // general functions |
|
578 | // general functions | |
579 |
|
579 | |||
|
580 | void reset_sm_status( void ) | |||
|
581 | { | |||
|
582 | // error | |||
|
583 | // 10 --------------- 9 ---------------- 8 ---------------- 7 --------- | |||
|
584 | // input_fif0_write_2 input_fifo_write_1 input_fifo_write_0 buffer_full | |||
|
585 | // ---------- 5 -- 4 -- 3 -- 2 -- 1 -- 0 -- | |||
|
586 | // ready bits f2_1 f2_0 f1_1 f1_1 f0_1 f0_0 | |||
|
587 | ||||
|
588 | spectral_matrix_regs->status = 0x7ff; // [0111 1111 1111] | |||
|
589 | } | |||
|
590 | ||||
580 | void reset_spectral_matrix_regs( void ) |
|
591 | void reset_spectral_matrix_regs( void ) | |
581 | { |
|
592 | { | |
582 | /** This function resets the spectral matrices module registers. |
|
593 | /** This function resets the spectral matrices module registers. | |
@@ -592,8 +603,11 void reset_spectral_matrix_regs( void ) | |||||
592 | * |
|
603 | * | |
593 | */ |
|
604 | */ | |
594 |
|
605 | |||
595 | spectral_matrix_regs->config = 0x00; |
|
606 | set_sm_irq_onError( 0 ); | |
596 | spectral_matrix_regs->status = 0x00; |
|
607 | ||
|
608 | set_sm_irq_onNewMatrix( 0 ); | |||
|
609 | ||||
|
610 | reset_sm_status(); | |||
597 |
|
611 | |||
598 | spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->previous->buffer_address; |
|
612 | spectral_matrix_regs->f0_0_address = current_ring_node_sm_f0->previous->buffer_address; | |
599 | spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address; |
|
613 | spectral_matrix_regs->f0_1_address = current_ring_node_sm_f0->buffer_address; |
@@ -466,19 +466,23 int stop_current_mode( void ) | |||||
466 | LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt |
|
466 | LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); // mask waveform picker interrupt | |
467 | LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt |
|
467 | LEON_Mask_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt | |
468 |
|
468 | |||
469 | // (2) clear interruptions |
|
469 | // reset lfr VHDL module | |
470 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt |
|
470 | reset_lfr(); | |
471 | LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt |
|
|||
472 |
|
471 | |||
473 |
// ( |
|
472 | // (2) reset waveform picker registers | |
474 | reset_wfp_burst_enable(); // reset burst and enable bits |
|
473 | reset_wfp_burst_enable(); // reset burst and enable bits | |
475 | reset_wfp_status(); // reset all the status bits |
|
474 | reset_wfp_status(); // reset all the status bits | |
476 |
|
475 | |||
477 |
// ( |
|
476 | // (3) reset spectral matrices registers | |
478 |
set_irq_on |
|
477 | set_sm_irq_onNewMatrix( 0 ); // stop the spectral matrices | |
479 | set_run_matrix_spectral( 0 ); // run_matrix_spectral is set to 0 |
|
478 | reset_sm_status(); | |
|
479 | ||||
480 | reset_extractSWF(); // reset the extractSWF flag to false |
|
480 | reset_extractSWF(); // reset the extractSWF flag to false | |
481 |
|
481 | |||
|
482 | // (4) clear interruptions | |||
|
483 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt | |||
|
484 | LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt | |||
|
485 | ||||
482 | // <Spectral Matrices simulator> |
|
486 | // <Spectral Matrices simulator> | |
483 | LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); // mask spectral matrix interrupt simulator |
|
487 | LEON_Mask_interrupt( IRQ_SM_SIMULATOR ); // mask spectral matrix interrupt simulator | |
484 | timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); |
|
488 | timer_stop( (gptimer_regs_t*) REGS_ADDR_GPTIMER, TIMER_SM_SIMULATOR ); | |
@@ -748,13 +752,14 int suspend_science_tasks() | |||||
748 | void launch_waveform_picker( unsigned char mode, unsigned int transitionCoarseTime ) |
|
752 | void launch_waveform_picker( unsigned char mode, unsigned int transitionCoarseTime ) | |
749 | { |
|
753 | { | |
750 | WFP_reset_current_ring_nodes(); |
|
754 | WFP_reset_current_ring_nodes(); | |
|
755 | ||||
751 | reset_waveform_picker_regs(); |
|
756 | reset_waveform_picker_regs(); | |
|
757 | ||||
752 | set_wfp_burst_enable_register( mode ); |
|
758 | set_wfp_burst_enable_register( mode ); | |
753 |
|
759 | |||
754 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); |
|
760 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); | |
755 | LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER ); |
|
761 | LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER ); | |
756 |
|
762 | |||
757 | waveform_picker_regs->run_burst_enable = waveform_picker_regs->run_burst_enable | 0x80; // [1000 0000] |
|
|||
758 | if (transitionCoarseTime == 0) |
|
763 | if (transitionCoarseTime == 0) | |
759 | { |
|
764 | { | |
760 | waveform_picker_regs->start_date = time_management_regs->coarse_time; |
|
765 | waveform_picker_regs->start_date = time_management_regs->coarse_time; | |
@@ -770,17 +775,16 void launch_waveform_picker( unsigned ch | |||||
770 | void launch_spectral_matrix( void ) |
|
775 | void launch_spectral_matrix( void ) | |
771 | { |
|
776 | { | |
772 | SM_reset_current_ring_nodes(); |
|
777 | SM_reset_current_ring_nodes(); | |
|
778 | ||||
773 | reset_spectral_matrix_regs(); |
|
779 | reset_spectral_matrix_regs(); | |
|
780 | ||||
774 | reset_nb_sm(); |
|
781 | reset_nb_sm(); | |
775 |
|
782 | |||
776 | struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO; |
|
783 | set_sm_irq_onNewMatrix( 1 ); | |
777 | grgpio_regs->io_port_direction_register = |
|
784 | ||
778 | grgpio_regs->io_port_direction_register | 0x01; // [0000 0001], 0 = output disabled, 1 = output enabled |
|
|||
779 | grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register & 0xfffffffe; // set the bit 0 to 0 |
|
|||
780 | set_irq_on_new_ready_matrix( 1 ); |
|
|||
781 | LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); |
|
785 | LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); | |
782 | LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX ); |
|
786 | LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX ); | |
783 | set_run_matrix_spectral( 1 ); |
|
787 | ||
784 | } |
|
788 | } | |
785 |
|
789 | |||
786 | void launch_spectral_matrix_simu( void ) |
|
790 | void launch_spectral_matrix_simu( void ) | |
@@ -795,7 +799,7 void launch_spectral_matrix_simu( void ) | |||||
795 | LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); |
|
799 | LEON_Unmask_interrupt( IRQ_SM_SIMULATOR ); | |
796 | } |
|
800 | } | |
797 |
|
801 | |||
798 |
void set_irq_on |
|
802 | void set_sm_irq_onNewMatrix( unsigned char value ) | |
799 | { |
|
803 | { | |
800 | if (value == 1) |
|
804 | if (value == 1) | |
801 | { |
|
805 | { | |
@@ -807,15 +811,15 void set_irq_on_new_ready_matrix( unsign | |||||
807 | } |
|
811 | } | |
808 | } |
|
812 | } | |
809 |
|
813 | |||
810 |
void set_ |
|
814 | void set_sm_irq_onError( unsigned char value ) | |
811 | { |
|
815 | { | |
812 | if (value == 1) |
|
816 | if (value == 1) | |
813 | { |
|
817 | { | |
814 |
spectral_matrix_regs->config = spectral_matrix_regs->config | 0x |
|
818 | spectral_matrix_regs->config = spectral_matrix_regs->config | 0x02; | |
815 | } |
|
819 | } | |
816 | else |
|
820 | else | |
817 | { |
|
821 | { | |
818 |
spectral_matrix_regs->config = spectral_matrix_regs->config & 0xfffffff |
|
822 | spectral_matrix_regs->config = spectral_matrix_regs->config & 0xfffffffd; // 1101 | |
819 | } |
|
823 | } | |
820 | } |
|
824 | } | |
821 |
|
825 | |||
@@ -947,3 +951,21 void updateLFRCurrentMode() | |||||
947 | lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; |
|
951 | lfrCurrentMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4; | |
948 | } |
|
952 | } | |
949 |
|
953 | |||
|
954 | void set_lfr_soft_reset( unsigned char value ) | |||
|
955 | { | |||
|
956 | if (value == 1) | |||
|
957 | { | |||
|
958 | time_management_regs->ctrl = time_management_regs->ctrl | 0x00000004; // [0100] | |||
|
959 | } | |||
|
960 | else | |||
|
961 | { | |||
|
962 | time_management_regs->ctrl = time_management_regs->ctrl & 0xfffffffb; // [1011] | |||
|
963 | } | |||
|
964 | } | |||
|
965 | ||||
|
966 | void reset_lfr( void ) | |||
|
967 | { | |||
|
968 | set_lfr_soft_reset( 1 ); | |||
|
969 | ||||
|
970 | set_lfr_soft_reset( 0 ); | |||
|
971 | } |
@@ -22,20 +22,24 Header_TM_LFR_SCIENCE_CWF_t headerCWF_F2 | |||||
22 | Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3[ NB_PACKETS_PER_GROUP_OF_CWF ]; |
|
22 | Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3[ NB_PACKETS_PER_GROUP_OF_CWF ]; | |
23 | Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3_light[ NB_PACKETS_PER_GROUP_OF_CWF_LIGHT ]; |
|
23 | Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3_light[ NB_PACKETS_PER_GROUP_OF_CWF_LIGHT ]; | |
24 |
|
24 | |||
25 | //************** |
|
25 | //*************** | |
26 | // waveform ring |
|
26 | // waveform rings | |
|
27 | // F0 | |||
27 | ring_node waveform_ring_f0[NB_RING_NODES_F0]; |
|
28 | ring_node waveform_ring_f0[NB_RING_NODES_F0]; | |
28 | ring_node waveform_ring_f1[NB_RING_NODES_F1]; |
|
|||
29 | ring_node waveform_ring_f2[NB_RING_NODES_F2]; |
|
|||
30 | ring_node waveform_ring_f3[NB_RING_NODES_F3]; |
|
|||
31 | ring_node *current_ring_node_f0; |
|
29 | ring_node *current_ring_node_f0; | |
32 | ring_node *ring_node_to_send_swf_f0; |
|
30 | ring_node *ring_node_to_send_swf_f0; | |
|
31 | // F1 | |||
|
32 | ring_node waveform_ring_f1[NB_RING_NODES_F1]; | |||
33 | ring_node *current_ring_node_f1; |
|
33 | ring_node *current_ring_node_f1; | |
34 | ring_node *ring_node_to_send_swf_f1; |
|
34 | ring_node *ring_node_to_send_swf_f1; | |
35 | ring_node *ring_node_to_send_cwf_f1; |
|
35 | ring_node *ring_node_to_send_cwf_f1; | |
|
36 | // F2 | |||
|
37 | ring_node waveform_ring_f2[NB_RING_NODES_F2]; | |||
36 | ring_node *current_ring_node_f2; |
|
38 | ring_node *current_ring_node_f2; | |
37 | ring_node *ring_node_to_send_swf_f2; |
|
39 | ring_node *ring_node_to_send_swf_f2; | |
38 | ring_node *ring_node_to_send_cwf_f2; |
|
40 | ring_node *ring_node_to_send_cwf_f2; | |
|
41 | // F3 | |||
|
42 | ring_node waveform_ring_f3[NB_RING_NODES_F3]; | |||
39 | ring_node *current_ring_node_f3; |
|
43 | ring_node *current_ring_node_f3; | |
40 | ring_node *ring_node_to_send_cwf_f3; |
|
44 | ring_node *ring_node_to_send_cwf_f3; | |
41 |
|
45 | |||
@@ -44,7 +48,8 bool swf_f0_ready = false; | |||||
44 | bool swf_f1_ready = false; |
|
48 | bool swf_f1_ready = false; | |
45 | bool swf_f2_ready = false; |
|
49 | bool swf_f2_ready = false; | |
46 |
|
50 | |||
47 |
int wf_snap_extracted[ (NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK) |
|
51 | int wf_snap_extracted[ (NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK) ]; | |
|
52 | ring_node ring_node_wf_snap_extracted; | |||
48 |
|
53 | |||
49 | //********************* |
|
54 | //********************* | |
50 | // Interrupt SubRoutine |
|
55 | // Interrupt SubRoutine | |
@@ -57,60 +62,6 void reset_extractSWF( void ) | |||||
57 | swf_f2_ready = false; |
|
62 | swf_f2_ready = false; | |
58 | } |
|
63 | } | |
59 |
|
64 | |||
60 | void change_f0_buffer( void ) |
|
|||
61 | { |
|
|||
62 | ring_node_to_send_swf_f0 = current_ring_node_f0; |
|
|||
63 | current_ring_node_f0 = current_ring_node_f0->next; |
|
|||
64 | if ( (waveform_picker_regs->status & 0x01) == 0x01) |
|
|||
65 | { |
|
|||
66 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_0_coarse_time; |
|
|||
67 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_0_fine_time; |
|
|||
68 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; |
|
|||
69 | } |
|
|||
70 | else if ( (waveform_picker_regs->status & 0x02) == 0x02) |
|
|||
71 | { |
|
|||
72 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_1_coarse_time; |
|
|||
73 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_1_fine_time; |
|
|||
74 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; |
|
|||
75 | } |
|
|||
76 | } |
|
|||
77 |
|
||||
78 | void change_f1_buffer( ring_node *ring_node_to_send ) |
|
|||
79 | { |
|
|||
80 | ring_node_to_send = current_ring_node_f1; |
|
|||
81 | current_ring_node_f1 = current_ring_node_f1->next; |
|
|||
82 | if ( (waveform_picker_regs->status & 0x04) == 0x04) |
|
|||
83 | { |
|
|||
84 | ring_node_to_send->coarseTime = waveform_picker_regs->f1_0_coarse_time; |
|
|||
85 | ring_node_to_send->fineTime = waveform_picker_regs->f1_0_fine_time; |
|
|||
86 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; |
|
|||
87 | } |
|
|||
88 | else if ( (waveform_picker_regs->status & 0x08) == 0x08) |
|
|||
89 | { |
|
|||
90 | ring_node_to_send->coarseTime = waveform_picker_regs->f1_1_coarse_time; |
|
|||
91 | ring_node_to_send->fineTime = waveform_picker_regs->f1_1_fine_time; |
|
|||
92 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; |
|
|||
93 | } |
|
|||
94 | } |
|
|||
95 |
|
||||
96 | void change_f2_buffer( ring_node *ring_node_to_send ) |
|
|||
97 | { |
|
|||
98 | ring_node_to_send = current_ring_node_f2; |
|
|||
99 | current_ring_node_f2 = current_ring_node_f2->next; |
|
|||
100 | if ( (waveform_picker_regs->status & 0x10) == 0x10) |
|
|||
101 | { |
|
|||
102 | ring_node_to_send->coarseTime = waveform_picker_regs->f2_0_coarse_time; |
|
|||
103 | ring_node_to_send->fineTime = waveform_picker_regs->f2_0_fine_time; |
|
|||
104 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; |
|
|||
105 | } |
|
|||
106 | else if ( (waveform_picker_regs->status & 0x20) == 0x20) |
|
|||
107 | { |
|
|||
108 | ring_node_to_send->coarseTime = waveform_picker_regs->f2_1_coarse_time; |
|
|||
109 | ring_node_to_send->fineTime = waveform_picker_regs->f2_1_fine_time; |
|
|||
110 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; |
|
|||
111 | } |
|
|||
112 | } |
|
|||
113 |
|
||||
114 | void waveforms_isr_f3( void ) |
|
65 | void waveforms_isr_f3( void ) | |
115 | { |
|
66 | { | |
116 | rtems_status_code spare_status; |
|
67 | rtems_status_code spare_status; | |
@@ -118,29 +69,27 void waveforms_isr_f3( void ) | |||||
118 | if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_BURST) // in BURST the data are used to place v, e1 and e2 in the HK packet |
|
69 | if ( (lfrCurrentMode == LFR_MODE_NORMAL) || (lfrCurrentMode == LFR_MODE_BURST) // in BURST the data are used to place v, e1 and e2 in the HK packet | |
119 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) |
|
70 | || (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) ) | |
120 | { // in modes other than STANDBY and BURST, send the CWF_F3 data |
|
71 | { // in modes other than STANDBY and BURST, send the CWF_F3 data | |
121 | if ((waveform_picker_regs->status & 0x40) == 0x40){ // [0100 0000] f3 buffer 0 is full |
|
72 | //*** | |
122 | // (1) change the receiving buffer for the waveform picker |
|
73 | // F3 | |
123 | ring_node_to_send_cwf_f3 = current_ring_node_f3; |
|
74 | if ( (waveform_picker_regs->status & 0xc0) != 0x00 ) { // [1100 0000] check the f3 full bits | |
|
75 | ring_node_to_send_cwf_f3 = current_ring_node_f3->previous; | |||
124 | current_ring_node_f3 = current_ring_node_f3->next; |
|
76 | current_ring_node_f3 = current_ring_node_f3->next; | |
|
77 | if ((waveform_picker_regs->status & 0x40) == 0x40){ // [0100 0000] f3 buffer 0 is full | |||
|
78 | ring_node_to_send_cwf_f3->coarseTime = waveform_picker_regs->f3_0_coarse_time; | |||
|
79 | ring_node_to_send_cwf_f3->fineTime = waveform_picker_regs->f3_0_fine_time; | |||
125 | waveform_picker_regs->addr_data_f3_0 = current_ring_node_f3->buffer_address; |
|
80 | waveform_picker_regs->addr_data_f3_0 = current_ring_node_f3->buffer_address; | |
126 | // (2) send an event for the waveforms transmission |
|
81 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00008840; // [1000 1000 0100 0000] | |
|
82 | } | |||
|
83 | else if ((waveform_picker_regs->status & 0x80) == 0x80){ // [1000 0000] f3 buffer 1 is full | |||
|
84 | ring_node_to_send_cwf_f3->coarseTime = waveform_picker_regs->f3_1_coarse_time; | |||
|
85 | ring_node_to_send_cwf_f3->fineTime = waveform_picker_regs->f3_1_fine_time; | |||
|
86 | waveform_picker_regs->addr_data_f3_1 = current_ring_node_f3->buffer_address; | |||
|
87 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00008880; // [1000 1000 1000 0000] | |||
|
88 | } | |||
127 | if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { |
|
89 | if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { | |
128 |
spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_ |
|
90 | spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ); | |
129 | } |
|
91 | } | |
130 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2); |
|
92 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2); | |
131 | waveform_picker_regs->status = waveform_picker_regs->status & 0xffff77bf; // reset f3 bits to 0, [0111 0111 1011 1111] |
|
|||
132 | } |
|
|||
133 | else if ((waveform_picker_regs->status & 0x80) == 0x80){ // [1000 0000] f3 buffer 1 is full |
|
|||
134 | // (1) change the receiving buffer for the waveform picker |
|
|||
135 | ring_node_to_send_cwf_f3 = current_ring_node_f3; |
|
|||
136 | current_ring_node_f3 = current_ring_node_f3->next; |
|
|||
137 | waveform_picker_regs->addr_data_f3_1 = current_ring_node_f3->buffer_address; |
|
|||
138 | // (2) send an event for the waveforms transmission |
|
|||
139 | if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { |
|
|||
140 | spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); |
|
|||
141 | } |
|
|||
142 | rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2); |
|
|||
143 | waveform_picker_regs->status = waveform_picker_regs->status & 0xffff777f; // reset f3 bits to 0, [0111 0111 0111 1111] |
|
|||
144 | } |
|
93 | } | |
145 | } |
|
94 | } | |
146 | } |
|
95 | } | |
@@ -150,23 +99,72 void waveforms_isr_normal( void ) | |||||
150 | rtems_status_code status; |
|
99 | rtems_status_code status; | |
151 |
|
100 | |||
152 | if ( ( (waveform_picker_regs->status & 0x30) != 0x00 ) // [0011 0000] check the f2 full bits |
|
101 | if ( ( (waveform_picker_regs->status & 0x30) != 0x00 ) // [0011 0000] check the f2 full bits | |
153 |
|
|
102 | && ( (waveform_picker_regs->status & 0x0c) != 0x00 ) // [0000 1100] check the f1 full bits | |
154 |
|
|
103 | && ( (waveform_picker_regs->status & 0x03) != 0x00 )) // [0000 0011] check the f0 full bits | |
|
104 | { | |||
|
105 | //*** | |||
|
106 | // F0 | |||
|
107 | ring_node_to_send_swf_f0 = current_ring_node_f0->previous; | |||
|
108 | current_ring_node_f0 = current_ring_node_f0->next; | |||
|
109 | if ( (waveform_picker_regs->status & 0x01) == 0x01) | |||
|
110 | { | |||
|
111 | ||||
|
112 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_0_coarse_time; | |||
|
113 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_0_fine_time; | |||
|
114 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; | |||
|
115 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001101; // [0001 0001 0000 0001] | |||
|
116 | } | |||
|
117 | else if ( (waveform_picker_regs->status & 0x02) == 0x02) | |||
|
118 | { | |||
|
119 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_1_coarse_time; | |||
|
120 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_1_fine_time; | |||
|
121 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; | |||
|
122 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001102; // [0001 0001 0000 0010] | |||
|
123 | } | |||
|
124 | ||||
|
125 | //*** | |||
|
126 | // F1 | |||
|
127 | ring_node_to_send_swf_f1 = current_ring_node_f1->previous; | |||
|
128 | current_ring_node_f1 = current_ring_node_f1->next; | |||
|
129 | if ( (waveform_picker_regs->status & 0x04) == 0x04) | |||
155 | { |
|
130 | { | |
156 | // change F0 ring node |
|
131 | ring_node_to_send_swf_f1->coarseTime = waveform_picker_regs->f1_0_coarse_time; | |
157 | change_f0_buffer(); |
|
132 | ring_node_to_send_swf_f1->fineTime = waveform_picker_regs->f1_0_fine_time; | |
158 | // change F1 ring node |
|
133 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; | |
159 | change_f1_buffer( ring_node_to_send_swf_f1 ); |
|
134 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002204; // [0010 0010 0000 0100] f1 bits = 0 | |
160 | // change F2 ring node |
|
135 | } | |
161 | change_f2_buffer( ring_node_to_send_swf_f2 ); |
|
136 | else if ( (waveform_picker_regs->status & 0x08) == 0x08) | |
|
137 | { | |||
|
138 | ring_node_to_send_swf_f1->coarseTime = waveform_picker_regs->f1_1_coarse_time; | |||
|
139 | ring_node_to_send_swf_f1->fineTime = waveform_picker_regs->f1_1_fine_time; | |||
|
140 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; | |||
|
141 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002208; // [0010 0010 0000 1000] f1 bits = 0 | |||
|
142 | } | |||
|
143 | ||||
|
144 | //*** | |||
|
145 | // F2 | |||
|
146 | ring_node_to_send_swf_f2 = current_ring_node_f2->previous; | |||
|
147 | current_ring_node_f2 = current_ring_node_f2->next; | |||
|
148 | if ( (waveform_picker_regs->status & 0x10) == 0x10) | |||
|
149 | { | |||
|
150 | ring_node_to_send_swf_f2->coarseTime = waveform_picker_regs->f2_0_coarse_time; | |||
|
151 | ring_node_to_send_swf_f2->fineTime = waveform_picker_regs->f2_0_fine_time; | |||
|
152 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; | |||
|
153 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004410; // [0100 0100 0001 0000] | |||
|
154 | } | |||
|
155 | else if ( (waveform_picker_regs->status & 0x20) == 0x20) | |||
|
156 | { | |||
|
157 | ring_node_to_send_swf_f2->coarseTime = waveform_picker_regs->f2_1_coarse_time; | |||
|
158 | ring_node_to_send_swf_f2->fineTime = waveform_picker_regs->f2_1_fine_time; | |||
|
159 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; | |||
|
160 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004420; // [0100 0100 0010 0000] | |||
|
161 | } | |||
162 | // |
|
162 | // | |
163 | status = rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ); |
|
163 | status = rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ); | |
164 | if ( status != RTEMS_SUCCESSFUL) |
|
164 | if ( status != RTEMS_SUCCESSFUL) | |
165 | { |
|
165 | { | |
166 |
status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_ |
|
166 | status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ); | |
167 | } |
|
167 | } | |
168 | // update status bits except f3 bits |
|
|||
169 | waveform_picker_regs->status = waveform_picker_regs->status & 0xffff00c0; // [1000 1000 1100 0000] |
|
|||
170 | } |
|
168 | } | |
171 | } |
|
169 | } | |
172 |
|
170 | |||
@@ -176,13 +174,26 void waveforms_isr_burst( void ) | |||||
176 |
|
174 | |||
177 | if ( (waveform_picker_regs->status & 0x30) != 0 ){ // [0100] check the f2 full bit |
|
175 | if ( (waveform_picker_regs->status & 0x30) != 0 ){ // [0100] check the f2 full bit | |
178 | // (1) change the receiving buffer for the waveform picker |
|
176 | // (1) change the receiving buffer for the waveform picker | |
179 | change_f2_buffer( ring_node_to_send_cwf_f2 ); |
|
177 | ring_node_to_send_cwf_f2 = current_ring_node_f2->previous; | |
|
178 | current_ring_node_f2 = current_ring_node_f2->next; | |||
|
179 | if ( (waveform_picker_regs->status & 0x10) == 0x10) | |||
|
180 | { | |||
|
181 | ring_node_to_send_cwf_f2->coarseTime = waveform_picker_regs->f2_0_coarse_time; | |||
|
182 | ring_node_to_send_cwf_f2->fineTime = waveform_picker_regs->f2_0_fine_time; | |||
|
183 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; | |||
|
184 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004410; // [0100 0100 0001 0000] | |||
|
185 | } | |||
|
186 | else if ( (waveform_picker_regs->status & 0x20) == 0x20) | |||
|
187 | { | |||
|
188 | ring_node_to_send_cwf_f2->coarseTime = waveform_picker_regs->f2_1_coarse_time; | |||
|
189 | ring_node_to_send_cwf_f2->fineTime = waveform_picker_regs->f2_1_fine_time; | |||
|
190 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; | |||
|
191 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004420; // [0100 0100 0010 0000] | |||
|
192 | } | |||
180 | // (2) send an event for the waveforms transmission |
|
193 | // (2) send an event for the waveforms transmission | |
181 | if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) { |
|
194 | if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) { | |
182 |
spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_ |
|
195 | spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ); | |
183 | } |
|
196 | } | |
184 | // update f2 status bits only |
|
|||
185 | waveform_picker_regs->status = waveform_picker_regs->status & 0xffffbbcf; // [1011 1011 1100 1111] f2 bit = 0 |
|
|||
186 | } |
|
197 | } | |
187 | } |
|
198 | } | |
188 |
|
199 | |||
@@ -193,29 +204,77 void waveforms_isr_sbm1( void ) | |||||
193 |
|
204 | |||
194 | //*** |
|
205 | //*** | |
195 | // F1 |
|
206 | // F1 | |
196 |
if ( (waveform_picker_regs->status & 0x0 |
|
207 | if ( (waveform_picker_regs->status & 0x0c) != 0x00 ) { // [0000 1100] check the f1 full bits | |
197 | // (1) change the receiving buffer for the waveform picker |
|
208 | // (1) change the receiving buffer for the waveform picker | |
198 | change_f1_buffer( ring_node_to_send_cwf_f1 ); |
|
209 | ring_node_to_send_cwf_f1 = current_ring_node_f1->previous; | |
|
210 | current_ring_node_f1 = current_ring_node_f1->next; | |||
|
211 | if ( (waveform_picker_regs->status & 0x04) == 0x04) | |||
|
212 | { | |||
|
213 | ring_node_to_send_cwf_f1->coarseTime = waveform_picker_regs->f1_0_coarse_time; | |||
|
214 | ring_node_to_send_cwf_f1->fineTime = waveform_picker_regs->f1_0_fine_time; | |||
|
215 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; | |||
|
216 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002204; // [0010 0010 0000 0100] f1 bits = 0 | |||
|
217 | } | |||
|
218 | else if ( (waveform_picker_regs->status & 0x08) == 0x08) | |||
|
219 | { | |||
|
220 | ring_node_to_send_cwf_f1->coarseTime = waveform_picker_regs->f1_1_coarse_time; | |||
|
221 | ring_node_to_send_cwf_f1->fineTime = waveform_picker_regs->f1_1_fine_time; | |||
|
222 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; | |||
|
223 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002208; // [0010 0010 0000 1000] f1 bits = 0 | |||
|
224 | } | |||
199 | // (2) send an event for the the CWF1 task for transmission (and snapshot extraction if needed) |
|
225 | // (2) send an event for the the CWF1 task for transmission (and snapshot extraction if needed) | |
200 | status = rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ); |
|
226 | status = rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ); | |
201 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bits = 0 |
|
|||
202 | } |
|
227 | } | |
203 |
|
228 | |||
204 | //*** |
|
229 | //*** | |
205 | // F0 |
|
230 | // F0 | |
206 |
if ( (waveform_picker_regs->status & 0x03) != 0x00 ) { // [0000 0011] |
|
231 | if ( (waveform_picker_regs->status & 0x03) != 0x00 ) { // [0000 0011] check the f0 full bits | |
207 | swf_f0_ready = true; |
|
232 | swf_f0_ready = true; | |
208 |
change |
|
233 | // change f0 buffer | |
|
234 | ring_node_to_send_swf_f0 = current_ring_node_f0->previous; | |||
|
235 | current_ring_node_f0 = current_ring_node_f0->next; | |||
|
236 | if ( (waveform_picker_regs->status & 0x01) == 0x01) | |||
|
237 | { | |||
|
238 | ||||
|
239 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_0_coarse_time; | |||
|
240 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_0_fine_time; | |||
|
241 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; | |||
|
242 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001101; // [0001 0001 0000 0001] | |||
|
243 | } | |||
|
244 | else if ( (waveform_picker_regs->status & 0x02) == 0x02) | |||
|
245 | { | |||
|
246 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_1_coarse_time; | |||
|
247 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_1_fine_time; | |||
|
248 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; | |||
|
249 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001102; // [0001 0001 0000 0010] | |||
|
250 | } | |||
209 | } |
|
251 | } | |
210 |
|
252 | |||
211 | //*** |
|
253 | //*** | |
212 | // F2 |
|
254 | // F2 | |
213 |
if ( (waveform_picker_regs->status & 0x0 |
|
255 | if ( (waveform_picker_regs->status & 0x30) != 0x00 ) { // [0011 0000] check the f2 full bits | |
214 | swf_f2_ready = true; |
|
256 | swf_f2_ready = true; | |
215 | change_f2_buffer( ring_node_to_send_swf_f2 ); |
|
257 | // change f2 buffer | |
|
258 | ring_node_to_send_swf_f2 = current_ring_node_f2->previous; | |||
|
259 | current_ring_node_f2 = current_ring_node_f2->next; | |||
|
260 | if ( (waveform_picker_regs->status & 0x10) == 0x10) | |||
|
261 | { | |||
|
262 | ring_node_to_send_swf_f2->coarseTime = waveform_picker_regs->f2_0_coarse_time; | |||
|
263 | ring_node_to_send_swf_f2->fineTime = waveform_picker_regs->f2_0_fine_time; | |||
|
264 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; | |||
|
265 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004410; // [0100 0100 0001 0000] | |||
|
266 | } | |||
|
267 | else if ( (waveform_picker_regs->status & 0x20) == 0x20) | |||
|
268 | { | |||
|
269 | ring_node_to_send_swf_f2->coarseTime = waveform_picker_regs->f2_1_coarse_time; | |||
|
270 | ring_node_to_send_swf_f2->fineTime = waveform_picker_regs->f2_1_fine_time; | |||
|
271 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; | |||
|
272 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004420; // [0100 0100 0010 0000] | |||
|
273 | } | |||
|
274 | // start the snapshots transmission | |||
216 | if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) |
|
275 | if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) | |
217 | { |
|
276 | { | |
218 |
spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_ |
|
277 | spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_0 ); | |
219 | } |
|
278 | } | |
220 | } |
|
279 | } | |
221 | } |
|
280 | } | |
@@ -224,22 +283,74 void waveforms_isr_sbm2( void ) | |||||
224 | { |
|
283 | { | |
225 | rtems_status_code status; |
|
284 | rtems_status_code status; | |
226 |
|
285 | |||
227 | if ( (waveform_picker_regs->status & 0x04) == 0x04 ){ // [0100] check the f2 full bit |
|
286 | //*** | |
|
287 | // F2 | |||
|
288 | if ( (waveform_picker_regs->status & 0x30) != 0x00 ) { // [0011 0000] check the f2 full bit | |||
228 | // (1) change the receiving buffer for the waveform picker |
|
289 | // (1) change the receiving buffer for the waveform picker | |
229 | change_f2_buffer( ring_node_to_send_cwf_f2 ); |
|
290 | ring_node_to_send_cwf_f2 = current_ring_node_f2->previous; | |
|
291 | current_ring_node_f2 = current_ring_node_f2->next; | |||
|
292 | if ( (waveform_picker_regs->status & 0x10) == 0x10) | |||
|
293 | { | |||
|
294 | ring_node_to_send_cwf_f2->coarseTime = waveform_picker_regs->f2_0_coarse_time; | |||
|
295 | ring_node_to_send_cwf_f2->fineTime = waveform_picker_regs->f2_0_fine_time; | |||
|
296 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; | |||
|
297 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004410; // [0100 0100 0001 0000] | |||
|
298 | } | |||
|
299 | else if ( (waveform_picker_regs->status & 0x20) == 0x20) | |||
|
300 | { | |||
|
301 | ring_node_to_send_cwf_f2->coarseTime = waveform_picker_regs->f2_1_coarse_time; | |||
|
302 | ring_node_to_send_cwf_f2->fineTime = waveform_picker_regs->f2_1_fine_time; | |||
|
303 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; | |||
|
304 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00004420; // [0100 0100 0010 0000] | |||
|
305 | } | |||
230 | // (2) send an event for the waveforms transmission |
|
306 | // (2) send an event for the waveforms transmission | |
231 | status = rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ); |
|
307 | status = rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ); | |
232 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0 |
|
|||
233 | } |
|
308 | } | |
234 | if ( (waveform_picker_regs->status & 0x01) == 0x01 ) { // [0001] check the f0 full bit |
|
309 | ||
|
310 | //*** | |||
|
311 | // F0 | |||
|
312 | if ( (waveform_picker_regs->status & 0x03) != 0x00 ) { // [0000 0011] check the f0 full bit | |||
235 | swf_f0_ready = true; |
|
313 | swf_f0_ready = true; | |
236 |
change |
|
314 | // change f0 buffer | |
237 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffeee; // [1111 1110 1110 1110] f0 bits = 0 |
|
315 | ring_node_to_send_swf_f0 = current_ring_node_f0->previous; | |
|
316 | current_ring_node_f0 = current_ring_node_f0->next; | |||
|
317 | if ( (waveform_picker_regs->status & 0x01) == 0x01) | |||
|
318 | { | |||
|
319 | ||||
|
320 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_0_coarse_time; | |||
|
321 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_0_fine_time; | |||
|
322 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; | |||
|
323 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001101; // [0001 0001 0000 0001] | |||
|
324 | } | |||
|
325 | else if ( (waveform_picker_regs->status & 0x02) == 0x02) | |||
|
326 | { | |||
|
327 | ring_node_to_send_swf_f0->coarseTime = waveform_picker_regs->f0_1_coarse_time; | |||
|
328 | ring_node_to_send_swf_f0->fineTime = waveform_picker_regs->f0_1_fine_time; | |||
|
329 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; | |||
|
330 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00001102; // [0001 0001 0000 0010] | |||
|
331 | } | |||
238 | } |
|
332 | } | |
239 | if ( (waveform_picker_regs->status & 0x02) == 0x02 ) { // [0010] check the f1 full bit |
|
333 | ||
|
334 | //*** | |||
|
335 | // F1 | |||
|
336 | if ( (waveform_picker_regs->status & 0x0c) != 0x00 ) { // [0000 1100] check the f1 full bit | |||
240 | swf_f1_ready = true; |
|
337 | swf_f1_ready = true; | |
241 | change_f1_buffer( ring_node_to_send_swf_f1 ); |
|
338 | ring_node_to_send_swf_f1 = current_ring_node_f1->previous; | |
242 | waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1, f0 bits = 0 |
|
339 | current_ring_node_f1 = current_ring_node_f1->next; | |
|
340 | if ( (waveform_picker_regs->status & 0x04) == 0x04) | |||
|
341 | { | |||
|
342 | ring_node_to_send_swf_f1->coarseTime = waveform_picker_regs->f1_0_coarse_time; | |||
|
343 | ring_node_to_send_swf_f1->fineTime = waveform_picker_regs->f1_0_fine_time; | |||
|
344 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; | |||
|
345 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002204; // [0010 0010 0000 0100] f1 bits = 0 | |||
|
346 | } | |||
|
347 | else if ( (waveform_picker_regs->status & 0x08) == 0x08) | |||
|
348 | { | |||
|
349 | ring_node_to_send_swf_f1->coarseTime = waveform_picker_regs->f1_1_coarse_time; | |||
|
350 | ring_node_to_send_swf_f1->fineTime = waveform_picker_regs->f1_1_fine_time; | |||
|
351 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; | |||
|
352 | waveform_picker_regs->status = waveform_picker_regs->status & 0x00002208; // [0010 0010 0000 1000] f1 bits = 0 | |||
|
353 | } | |||
243 | } |
|
354 | } | |
244 | } |
|
355 | } | |
245 |
|
356 | |||
@@ -266,9 +377,9 rtems_isr waveforms_isr( rtems_vector_nu | |||||
266 |
|
377 | |||
267 | waveforms_isr_f3(); |
|
378 | waveforms_isr_f3(); | |
268 |
|
379 | |||
269 |
if ( (waveform_picker_regs->status & 0xff |
|
380 | if ( (waveform_picker_regs->status & 0xff00) != 0x00) // [1111 1111 0000 0000] check the error bits | |
270 | { |
|
381 | { | |
271 |
spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_ |
|
382 | spare_status = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_10 ); | |
272 | } |
|
383 | } | |
273 |
|
384 | |||
274 | switch(lfrCurrentMode) |
|
385 | switch(lfrCurrentMode) | |
@@ -365,23 +476,23 rtems_task wfrm_task(rtems_task_argument | |||||
365 | if (event_out == RTEMS_EVENT_MODE_NORMAL) |
|
476 | if (event_out == RTEMS_EVENT_MODE_NORMAL) | |
366 | { |
|
477 | { | |
367 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_NORMAL\n") |
|
478 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_NORMAL\n") | |
368 |
send_waveform_SWF( |
|
479 | send_waveform_SWF( ring_node_to_send_swf_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id); | |
369 |
send_waveform_SWF( |
|
480 | send_waveform_SWF( ring_node_to_send_swf_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id); | |
370 |
send_waveform_SWF( |
|
481 | send_waveform_SWF( ring_node_to_send_swf_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id); | |
371 | } |
|
482 | } | |
372 | if (event_out == RTEMS_EVENT_MODE_SBM1) |
|
483 | if (event_out == RTEMS_EVENT_MODE_SBM1) | |
373 | { |
|
484 | { | |
374 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_SBM1\n") |
|
485 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_SBM1\n") | |
375 |
send_waveform_SWF( |
|
486 | send_waveform_SWF( ring_node_to_send_swf_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id); | |
376 |
send_waveform_SWF( |
|
487 | send_waveform_SWF( &ring_node_wf_snap_extracted, SID_NORM_SWF_F1, headerSWF_F1, queue_id); | |
377 |
send_waveform_SWF( |
|
488 | send_waveform_SWF( ring_node_to_send_swf_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id); | |
378 | } |
|
489 | } | |
379 | if (event_out == RTEMS_EVENT_MODE_SBM2) |
|
490 | if (event_out == RTEMS_EVENT_MODE_SBM2) | |
380 | { |
|
491 | { | |
381 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_SBM2\n") |
|
492 | DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_SBM2\n") | |
382 |
send_waveform_SWF( |
|
493 | send_waveform_SWF( ring_node_to_send_swf_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id); | |
383 |
send_waveform_SWF( |
|
494 | send_waveform_SWF( ring_node_to_send_swf_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id); | |
384 |
send_waveform_SWF( |
|
495 | send_waveform_SWF( &ring_node_wf_snap_extracted, SID_NORM_SWF_F2, headerSWF_F2, queue_id); | |
385 | } |
|
496 | } | |
386 | } |
|
497 | } | |
387 | } |
|
498 | } | |
@@ -422,15 +533,13 rtems_task cwf3_task(rtems_task_argument | |||||
422 | if ( (parameter_dump_packet.sy_lfr_n_cwf_long_f3 & 0x01) == 0x01) |
|
533 | if ( (parameter_dump_packet.sy_lfr_n_cwf_long_f3 & 0x01) == 0x01) | |
423 | { |
|
534 | { | |
424 | PRINTF("send CWF_LONG_F3\n") |
|
535 | PRINTF("send CWF_LONG_F3\n") | |
425 | send_waveform_CWF( |
|
536 | send_waveform_CWF( ring_node_to_send_cwf_f3, | |
426 | (volatile int*) ring_node_to_send_cwf_f3->buffer_address, |
|
|||
427 | SID_NORM_CWF_LONG_F3, headerCWF_F3, queue_id ); |
|
537 | SID_NORM_CWF_LONG_F3, headerCWF_F3, queue_id ); | |
428 | } |
|
538 | } | |
429 | else |
|
539 | else | |
430 | { |
|
540 | { | |
431 | PRINTF("send CWF_F3 (light)\n") |
|
541 | PRINTF("send CWF_F3 (light)\n") | |
432 | send_waveform_CWF3_light( |
|
542 | send_waveform_CWF3_light( ring_node_to_send_cwf_f3, | |
433 | (volatile int*) ring_node_to_send_cwf_f3->buffer_address, |
|
|||
434 | headerCWF_F3_light, queue_id ); |
|
543 | headerCWF_F3_light, queue_id ); | |
435 | } |
|
544 | } | |
436 |
|
545 | |||
@@ -475,11 +584,11 rtems_task cwf2_task(rtems_task_argument | |||||
475 | RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); |
|
584 | RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); | |
476 | if (event_out == RTEMS_EVENT_MODE_BURST) |
|
585 | if (event_out == RTEMS_EVENT_MODE_BURST) | |
477 | { |
|
586 | { | |
478 |
send_waveform_CWF( |
|
587 | send_waveform_CWF( ring_node_to_send_cwf_f2, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id ); | |
479 | } |
|
588 | } | |
480 | if (event_out == RTEMS_EVENT_MODE_SBM2) |
|
589 | if (event_out == RTEMS_EVENT_MODE_SBM2) | |
481 | { |
|
590 | { | |
482 |
send_waveform_CWF( |
|
591 | send_waveform_CWF( ring_node_to_send_cwf_f2, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id ); | |
483 | // launch snapshot extraction if needed |
|
592 | // launch snapshot extraction if needed | |
484 | if (extractSWF == true) |
|
593 | if (extractSWF == true) | |
485 | { |
|
594 | { | |
@@ -529,7 +638,7 rtems_task cwf1_task(rtems_task_argument | |||||
529 | // wait for an RTEMS_EVENT |
|
638 | // wait for an RTEMS_EVENT | |
530 | rtems_event_receive( RTEMS_EVENT_MODE_SBM1, |
|
639 | rtems_event_receive( RTEMS_EVENT_MODE_SBM1, | |
531 | RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); |
|
640 | RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out); | |
532 |
send_waveform_CWF( |
|
641 | send_waveform_CWF( ring_node_to_send_cwf_f1, SID_SBM1_CWF_F1, headerCWF_F1, queue_id ); | |
533 | // launch snapshot extraction if needed |
|
642 | // launch snapshot extraction if needed | |
534 | if (extractSWF == true) |
|
643 | if (extractSWF == true) | |
535 | { |
|
644 | { | |
@@ -594,6 +703,8 void WFP_init_rings( void ) | |||||
594 | // F3 RING |
|
703 | // F3 RING | |
595 | init_waveform_ring( waveform_ring_f3, NB_RING_NODES_F3, wf_cont_f3 ); |
|
704 | init_waveform_ring( waveform_ring_f3, NB_RING_NODES_F3, wf_cont_f3 ); | |
596 |
|
705 | |||
|
706 | ring_node_wf_snap_extracted.buffer_address = (int) wf_snap_extracted; | |||
|
707 | ||||
597 | DEBUG_PRINTF1("waveform_ring_f0 @%x\n", (unsigned int) waveform_ring_f0) |
|
708 | DEBUG_PRINTF1("waveform_ring_f0 @%x\n", (unsigned int) waveform_ring_f0) | |
598 | DEBUG_PRINTF1("waveform_ring_f1 @%x\n", (unsigned int) waveform_ring_f1) |
|
709 | DEBUG_PRINTF1("waveform_ring_f1 @%x\n", (unsigned int) waveform_ring_f1) | |
599 | DEBUG_PRINTF1("waveform_ring_f2 @%x\n", (unsigned int) waveform_ring_f2) |
|
710 | DEBUG_PRINTF1("waveform_ring_f2 @%x\n", (unsigned int) waveform_ring_f2) | |
@@ -780,7 +891,7 int init_header_continuous_cwf3_light_ta | |||||
780 | return return_value; |
|
891 | return return_value; | |
781 | } |
|
892 | } | |
782 |
|
893 | |||
783 |
int send_waveform_SWF( |
|
894 | int send_waveform_SWF( ring_node *ring_node_to_send, unsigned int sid, | |
784 | Header_TM_LFR_SCIENCE_SWF_t *headerSWF, rtems_id queue_id ) |
|
895 | Header_TM_LFR_SCIENCE_SWF_t *headerSWF, rtems_id queue_id ) | |
785 | { |
|
896 | { | |
786 | /** This function sends SWF CCSDS packets (F2, F1 or F0). |
|
897 | /** This function sends SWF CCSDS packets (F2, F1 or F0). | |
@@ -801,18 +912,20 int send_waveform_SWF( volatile int *wav | |||||
801 | unsigned int fineTime; |
|
912 | unsigned int fineTime; | |
802 | rtems_status_code status; |
|
913 | rtems_status_code status; | |
803 | spw_ioctl_pkt_send spw_ioctl_send_SWF; |
|
914 | spw_ioctl_pkt_send spw_ioctl_send_SWF; | |
|
915 | int *dataPtr; | |||
804 |
|
916 | |||
805 | spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header |
|
917 | spw_ioctl_send_SWF.hlen = TM_HEADER_LEN + 4 + 12; // + 4 is for the protocole extra header, + 12 is for the auxiliary header | |
806 | spw_ioctl_send_SWF.options = 0; |
|
918 | spw_ioctl_send_SWF.options = 0; | |
807 |
|
919 | |||
808 | ret = LFR_DEFAULT; |
|
920 | ret = LFR_DEFAULT; | |
809 |
|
921 | |||
810 | coarseTime = waveform[0]; |
|
922 | coarseTime = ring_node_to_send->coarseTime; | |
811 | fineTime = waveform[1]; |
|
923 | fineTime = ring_node_to_send->fineTime; | |
|
924 | dataPtr = (int*) ring_node_to_send->buffer_address; | |||
812 |
|
925 | |||
813 | for (i=0; i<7; i++) // send waveform |
|
926 | for (i=0; i<7; i++) // send waveform | |
814 | { |
|
927 | { | |
815 |
spw_ioctl_send_SWF.data = (char*) & |
|
928 | spw_ioctl_send_SWF.data = (char*) &dataPtr[ (i * BLK_NR_304 * NB_WORDS_SWF_BLK) ]; | |
816 | spw_ioctl_send_SWF.hdr = (char*) &headerSWF[ i ]; |
|
929 | spw_ioctl_send_SWF.hdr = (char*) &headerSWF[ i ]; | |
817 | // BUILD THE DATA |
|
930 | // BUILD THE DATA | |
818 | if (i==6) { |
|
931 | if (i==6) { | |
@@ -844,7 +957,7 int send_waveform_SWF( volatile int *wav | |||||
844 | return ret; |
|
957 | return ret; | |
845 | } |
|
958 | } | |
846 |
|
959 | |||
847 |
int send_waveform_CWF( |
|
960 | int send_waveform_CWF(ring_node *ring_node_to_send, unsigned int sid, | |
848 | Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id) |
|
961 | Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id) | |
849 | { |
|
962 | { | |
850 | /** This function sends CWF CCSDS packets (F2, F1 or F0). |
|
963 | /** This function sends CWF CCSDS packets (F2, F1 or F0). | |
@@ -865,18 +978,20 int send_waveform_CWF(volatile int *wave | |||||
865 | unsigned int fineTime; |
|
978 | unsigned int fineTime; | |
866 | rtems_status_code status; |
|
979 | rtems_status_code status; | |
867 | spw_ioctl_pkt_send spw_ioctl_send_CWF; |
|
980 | spw_ioctl_pkt_send spw_ioctl_send_CWF; | |
|
981 | int *dataPtr; | |||
868 |
|
982 | |||
869 | spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header |
|
983 | spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header | |
870 | spw_ioctl_send_CWF.options = 0; |
|
984 | spw_ioctl_send_CWF.options = 0; | |
871 |
|
985 | |||
872 | ret = LFR_DEFAULT; |
|
986 | ret = LFR_DEFAULT; | |
873 |
|
987 | |||
874 | coarseTime = waveform[0]; |
|
988 | coarseTime = ring_node_to_send->coarseTime; | |
875 | fineTime = waveform[1]; |
|
989 | fineTime = ring_node_to_send->fineTime; | |
|
990 | dataPtr = (int*) ring_node_to_send->buffer_address; | |||
876 |
|
991 | |||
877 | for (i=0; i<NB_PACKETS_PER_GROUP_OF_CWF; i++) // send waveform |
|
992 | for (i=0; i<NB_PACKETS_PER_GROUP_OF_CWF; i++) // send waveform | |
878 | { |
|
993 | { | |
879 |
spw_ioctl_send_CWF.data = (char*) & |
|
994 | spw_ioctl_send_CWF.data = (char*) &dataPtr[ (i * BLK_NR_CWF * NB_WORDS_SWF_BLK) ]; | |
880 | spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ]; |
|
995 | spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ]; | |
881 | // BUILD THE DATA |
|
996 | // BUILD THE DATA | |
882 | spw_ioctl_send_CWF.dlen = BLK_NR_CWF * NB_BYTES_SWF_BLK; |
|
997 | spw_ioctl_send_CWF.dlen = BLK_NR_CWF * NB_BYTES_SWF_BLK; | |
@@ -914,7 +1029,7 int send_waveform_CWF(volatile int *wave | |||||
914 | return ret; |
|
1029 | return ret; | |
915 | } |
|
1030 | } | |
916 |
|
1031 | |||
917 |
int send_waveform_CWF3_light( |
|
1032 | int send_waveform_CWF3_light( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_CWF_t *headerCWF, rtems_id queue_id ) | |
918 | { |
|
1033 | { | |
919 | /** This function sends CWF_F3 CCSDS packets without the b1, b2 and b3 data. |
|
1034 | /** This function sends CWF_F3 CCSDS packets without the b1, b2 and b3 data. | |
920 | * |
|
1035 | * | |
@@ -935,33 +1050,35 int send_waveform_CWF3_light(volatile in | |||||
935 | rtems_status_code status; |
|
1050 | rtems_status_code status; | |
936 | spw_ioctl_pkt_send spw_ioctl_send_CWF; |
|
1051 | spw_ioctl_pkt_send spw_ioctl_send_CWF; | |
937 | char *sample; |
|
1052 | char *sample; | |
|
1053 | int *dataPtr; | |||
938 |
|
1054 | |||
939 | spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header |
|
1055 | spw_ioctl_send_CWF.hlen = TM_HEADER_LEN + 4 + 10; // + 4 is for the protocole extra header, + 10 is for the auxiliary header | |
940 | spw_ioctl_send_CWF.options = 0; |
|
1056 | spw_ioctl_send_CWF.options = 0; | |
941 |
|
1057 | |||
942 | ret = LFR_DEFAULT; |
|
1058 | ret = LFR_DEFAULT; | |
943 |
|
1059 | |||
|
1060 | coarseTime = ring_node_to_send->coarseTime; | |||
|
1061 | fineTime = ring_node_to_send->fineTime; | |||
|
1062 | dataPtr = (int*) ring_node_to_send->buffer_address; | |||
|
1063 | ||||
944 | //********************** |
|
1064 | //********************** | |
945 | // BUILD CWF3_light DATA |
|
1065 | // BUILD CWF3_light DATA | |
946 | for ( i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++) |
|
1066 | for ( i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++) | |
947 | { |
|
1067 | { | |
948 |
sample = (char*) & |
|
1068 | sample = (char*) &dataPtr[ (i * NB_WORDS_SWF_BLK) ]; | |
949 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) |
|
1069 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) ] = sample[ 0 ]; | |
950 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 1 |
|
1070 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 1 ] = sample[ 1 ]; | |
951 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 2 |
|
1071 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 2 ] = sample[ 2 ]; | |
952 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 3 |
|
1072 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 3 ] = sample[ 3 ]; | |
953 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 4 |
|
1073 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 4 ] = sample[ 4 ]; | |
954 |
wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 5 |
|
1074 | wf_cont_f3_light[ (i * NB_BYTES_CWF3_LIGHT_BLK) + 5 ] = sample[ 5 ]; | |
955 | } |
|
1075 | } | |
956 |
|
1076 | |||
957 | coarseTime = waveform[0]; |
|
|||
958 | fineTime = waveform[1]; |
|
|||
959 |
|
||||
960 | //********************* |
|
1077 | //********************* | |
961 | // SEND CWF3_light DATA |
|
1078 | // SEND CWF3_light DATA | |
962 | for (i=0; i<NB_PACKETS_PER_GROUP_OF_CWF_LIGHT; i++) // send waveform |
|
1079 | for (i=0; i<NB_PACKETS_PER_GROUP_OF_CWF_LIGHT; i++) // send waveform | |
963 | { |
|
1080 | { | |
964 |
spw_ioctl_send_CWF.data = (char*) &wf_cont_f3_light[ (i * BLK_NR_CWF_SHORT_F3 * NB_BYTES_CWF3_LIGHT_BLK) |
|
1081 | spw_ioctl_send_CWF.data = (char*) &wf_cont_f3_light[ (i * BLK_NR_CWF_SHORT_F3 * NB_BYTES_CWF3_LIGHT_BLK) ]; | |
965 | spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ]; |
|
1082 | spw_ioctl_send_CWF.hdr = (char*) &headerCWF[ i ]; | |
966 | // BUILD THE DATA |
|
1083 | // BUILD THE DATA | |
967 | spw_ioctl_send_CWF.dlen = BLK_NR_CWF_SHORT_F3 * NB_BYTES_CWF3_LIGHT_BLK; |
|
1084 | spw_ioctl_send_CWF.dlen = BLK_NR_CWF_SHORT_F3 * NB_BYTES_CWF3_LIGHT_BLK; | |
@@ -988,6 +1105,16 int send_waveform_CWF3_light(volatile in | |||||
988 | return ret; |
|
1105 | return ret; | |
989 | } |
|
1106 | } | |
990 |
|
1107 | |||
|
1108 | int send_ring_node_CWF( ring_node *ring_node_to_send ) | |||
|
1109 | { | |||
|
1110 | int status; | |||
|
1111 | ||||
|
1112 | status = LFR_SUCCESSFUL; | |||
|
1113 | // status = rtems_message_queue_send( queue_id, ring_node_to_send, 4 ); | |||
|
1114 | ||||
|
1115 | return status; | |||
|
1116 | } | |||
|
1117 | ||||
991 | void compute_acquisition_time( unsigned int coarseTime, unsigned int fineTime, |
|
1118 | void compute_acquisition_time( unsigned int coarseTime, unsigned int fineTime, | |
992 | unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char * acquisitionTime ) |
|
1119 | unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char * acquisitionTime ) | |
993 | { |
|
1120 | { | |
@@ -1088,7 +1215,7 void build_snapshot_from_ring( ring_node | |||||
1088 | sampleOffset_asLong = 0x00; |
|
1215 | sampleOffset_asLong = 0x00; | |
1089 |
|
1216 | |||
1090 | // (1) get the f0 acquisition time |
|
1217 | // (1) get the f0 acquisition time | |
1091 |
acquisitionTimeF0_asLong = get_acquisition_time( (unsigned char *) |
|
1218 | acquisitionTimeF0_asLong = get_acquisition_time( (unsigned char *) &ring_node_to_send->coarseTime ); | |
1092 |
|
1219 | |||
1093 | // (2) compute the central reference time |
|
1220 | // (2) compute the central reference time | |
1094 | centerTime_asLong = acquisitionTimeF0_asLong + deltaT_F0; |
|
1221 | centerTime_asLong = acquisitionTimeF0_asLong + deltaT_F0; | |
@@ -1120,7 +1247,7 void build_snapshot_from_ring( ring_node | |||||
1120 | for (i=0; i<nb_ring_nodes; i++) |
|
1247 | for (i=0; i<nb_ring_nodes; i++) | |
1121 | { |
|
1248 | { | |
1122 | PRINTF1("%d ... ", i) |
|
1249 | PRINTF1("%d ... ", i) | |
1123 |
bufferAcquisitionTime_asLong = get_acquisition_time( (unsigned char *) ring_node_to_send-> |
|
1250 | bufferAcquisitionTime_asLong = get_acquisition_time( (unsigned char *) ring_node_to_send->coarseTime ); | |
1124 | if (bufferAcquisitionTime_asLong <= acquisitionTime_asLong) |
|
1251 | if (bufferAcquisitionTime_asLong <= acquisitionTime_asLong) | |
1125 | { |
|
1252 | { | |
1126 | PRINTF1("buffer found with acquisition time = %llx\n", bufferAcquisitionTime_asLong) |
|
1253 | PRINTF1("buffer found with acquisition time = %llx\n", bufferAcquisitionTime_asLong) | |
@@ -1140,16 +1267,19 void build_snapshot_from_ring( ring_node | |||||
1140 |
|
1267 | |||
1141 | // (7) copy the acquisition time at the beginning of the extrated snapshot |
|
1268 | // (7) copy the acquisition time at the beginning of the extrated snapshot | |
1142 | ptr1 = (unsigned char*) &acquisitionTime_asLong; |
|
1269 | ptr1 = (unsigned char*) &acquisitionTime_asLong; | |
1143 | ptr2 = (unsigned char*) wf_snap_extracted; |
|
1270 | // fine time | |
|
1271 | ptr2 = (unsigned char*) &ring_node_wf_snap_extracted.fineTime; | |||
|
1272 | ptr2[2] = ptr1[ 4 + 2 ]; | |||
|
1273 | ptr2[3] = ptr1[ 5 + 2 ]; | |||
|
1274 | // coarse time | |||
|
1275 | ptr2 = (unsigned char*) &ring_node_wf_snap_extracted.coarseTime; | |||
1144 | ptr2[0] = ptr1[ 0 + 2 ]; |
|
1276 | ptr2[0] = ptr1[ 0 + 2 ]; | |
1145 | ptr2[1] = ptr1[ 1 + 2 ]; |
|
1277 | ptr2[1] = ptr1[ 1 + 2 ]; | |
1146 | ptr2[2] = ptr1[ 2 + 2 ]; |
|
1278 | ptr2[2] = ptr1[ 2 + 2 ]; | |
1147 | ptr2[3] = ptr1[ 3 + 2 ]; |
|
1279 | ptr2[3] = ptr1[ 3 + 2 ]; | |
1148 | ptr2[6] = ptr1[ 4 + 2 ]; |
|
|||
1149 | ptr2[7] = ptr1[ 5 + 2 ]; |
|
|||
1150 |
|
1280 | |||
1151 | // re set the synchronization bit |
|
1281 | // re set the synchronization bit | |
1152 |
timeCharPtr = (unsigned char*) ring_node_to_send-> |
|
1282 | timeCharPtr = (unsigned char*) &ring_node_to_send->coarseTime; | |
1153 | ptr2[0] = ptr2[0] | (timeCharPtr[0] & 0x80); // [1000 0000] |
|
1283 | ptr2[0] = ptr2[0] | (timeCharPtr[0] & 0x80); // [1000 0000] | |
1154 |
|
1284 | |||
1155 | if ( (nbSamplesPart1_asLong >= NB_SAMPLES_PER_SNAPSHOT) | (nbSamplesPart1_asLong < 0) ) |
|
1285 | if ( (nbSamplesPart1_asLong >= NB_SAMPLES_PER_SNAPSHOT) | (nbSamplesPart1_asLong < 0) ) | |
@@ -1159,15 +1289,15 void build_snapshot_from_ring( ring_node | |||||
1159 | // copy the part 1 of the snapshot in the extracted buffer |
|
1289 | // copy the part 1 of the snapshot in the extracted buffer | |
1160 | for ( i = 0; i < (nbSamplesPart1_asLong * NB_WORDS_SWF_BLK); i++ ) |
|
1290 | for ( i = 0; i < (nbSamplesPart1_asLong * NB_WORDS_SWF_BLK); i++ ) | |
1161 | { |
|
1291 | { | |
1162 |
wf_snap_extracted[i |
|
1292 | wf_snap_extracted[i] = | |
1163 |
((int*) ring_node_to_send->buffer_address)[i + (sampleOffset_asLong * NB_WORDS_SWF_BLK) |
|
1293 | ((int*) ring_node_to_send->buffer_address)[ i + (sampleOffset_asLong * NB_WORDS_SWF_BLK) ]; | |
1164 | } |
|
1294 | } | |
1165 | // copy the part 2 of the snapshot in the extracted buffer |
|
1295 | // copy the part 2 of the snapshot in the extracted buffer | |
1166 | ring_node_to_send = ring_node_to_send->next; |
|
1296 | ring_node_to_send = ring_node_to_send->next; | |
1167 | for ( i = (nbSamplesPart1_asLong * NB_WORDS_SWF_BLK); i < (NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK); i++ ) |
|
1297 | for ( i = (nbSamplesPart1_asLong * NB_WORDS_SWF_BLK); i < (NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK); i++ ) | |
1168 | { |
|
1298 | { | |
1169 |
wf_snap_extracted[i |
|
1299 | wf_snap_extracted[i] = | |
1170 |
((int*) ring_node_to_send->buffer_address)[(i-(nbSamplesPart1_asLong * NB_WORDS_SWF_BLK)) |
|
1300 | ((int*) ring_node_to_send->buffer_address)[ (i-(nbSamplesPart1_asLong * NB_WORDS_SWF_BLK)) ]; | |
1171 | } |
|
1301 | } | |
1172 | } |
|
1302 | } | |
1173 |
|
1303 | |||
@@ -1224,7 +1354,8 void reset_wfp_burst_enable(void) | |||||
1224 | * |
|
1354 | * | |
1225 | */ |
|
1355 | */ | |
1226 |
|
1356 | |||
1227 | waveform_picker_regs->run_burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0 |
|
1357 | // [1000 000] burst f2, f1, f0 enable f3, f2, f1, f0 | |
|
1358 | waveform_picker_regs->run_burst_enable = waveform_picker_regs->run_burst_enable & 0x80; | |||
1228 | } |
|
1359 | } | |
1229 |
|
1360 | |||
1230 | void reset_wfp_status( void ) |
|
1361 | void reset_wfp_status( void ) | |
@@ -1235,7 +1366,27 void reset_wfp_status( void ) | |||||
1235 | * |
|
1366 | * | |
1236 | */ |
|
1367 | */ | |
1237 |
|
1368 | |||
1238 | waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0 |
|
1369 | waveform_picker_regs->status = 0xffff; | |
|
1370 | } | |||
|
1371 | ||||
|
1372 | void reset_wfp_buffer_addresses( void ) | |||
|
1373 | { | |||
|
1374 | // F0 | |||
|
1375 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; // 0x08 | |||
|
1376 | current_ring_node_f0 = current_ring_node_f0->next; | |||
|
1377 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; // 0x0c | |||
|
1378 | // F1 | |||
|
1379 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; // 0x10 | |||
|
1380 | current_ring_node_f1 = current_ring_node_f1->next; | |||
|
1381 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; // 0x14 | |||
|
1382 | // F2 | |||
|
1383 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; // 0x18 | |||
|
1384 | current_ring_node_f2 = current_ring_node_f2->next; | |||
|
1385 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; // 0x1c | |||
|
1386 | // F3 | |||
|
1387 | waveform_picker_regs->addr_data_f3_0 = current_ring_node_f3->buffer_address; // 0x20 | |||
|
1388 | current_ring_node_f3 = current_ring_node_f3->next; | |||
|
1389 | waveform_picker_regs->addr_data_f3_1 = current_ring_node_f3->buffer_address; // 0x24 | |||
1239 | } |
|
1390 | } | |
1240 |
|
1391 | |||
1241 | void reset_waveform_picker_regs(void) |
|
1392 | void reset_waveform_picker_regs( void ) | |
@@ -1263,21 +1414,21 void reset_waveform_picker_regs(void) | |||||
1263 | */ |
|
1414 | */ | |
1264 |
|
1415 | |||
1265 | set_wfp_data_shaping(); // 0x00 *** R1 R0 SP1 SP0 BW |
|
1416 | set_wfp_data_shaping(); // 0x00 *** R1 R0 SP1 SP0 BW | |
|
1417 | ||||
1266 | reset_wfp_burst_enable(); // 0x04 *** [run *** burst f2, f1, f0 *** enable f3, f2, f1, f0 ] |
|
1418 | reset_wfp_burst_enable(); // 0x04 *** [run *** burst f2, f1, f0 *** enable f3, f2, f1, f0 ] | |
1267 | waveform_picker_regs->addr_data_f0_0 = current_ring_node_f0->buffer_address; // 0x08 |
|
1419 | ||
1268 | waveform_picker_regs->addr_data_f0_1 = current_ring_node_f0->buffer_address; // 0x0c |
|
1420 | reset_wfp_buffer_addresses(); | |
1269 | waveform_picker_regs->addr_data_f1_0 = current_ring_node_f1->buffer_address; // 0x10 |
|
1421 | ||
1270 | waveform_picker_regs->addr_data_f1_1 = current_ring_node_f1->buffer_address; // 0x14 |
|
|||
1271 | waveform_picker_regs->addr_data_f2_0 = current_ring_node_f2->buffer_address; // 0x18 |
|
|||
1272 | waveform_picker_regs->addr_data_f2_1 = current_ring_node_f2->buffer_address; // 0x1c |
|
|||
1273 | waveform_picker_regs->addr_data_f3_0 = current_ring_node_f3->buffer_address; // 0x20 |
|
|||
1274 | waveform_picker_regs->addr_data_f3_1 = current_ring_node_f3->buffer_address; // 0x24 |
|
|||
1275 | reset_wfp_status(); // 0x18 |
|
1422 | reset_wfp_status(); // 0x18 | |
1276 | // |
|
1423 | ||
1277 | set_wfp_delta_snapshot(); // 0x1c |
|
1424 | set_wfp_delta_snapshot(); // 0x1c *** 300 s => 0x12bff | |
|
1425 | ||||
1278 | set_wfp_delta_f0_f0_2(); // 0x20, 0x24 |
|
1426 | set_wfp_delta_f0_f0_2(); // 0x20, 0x24 | |
|
1427 | ||||
1279 | set_wfp_delta_f1(); // 0x28 |
|
1428 | set_wfp_delta_f1(); // 0x28 | |
|
1429 | ||||
1280 | set_wfp_delta_f2(); // 0x2c |
|
1430 | set_wfp_delta_f2(); // 0x2c | |
|
1431 | ||||
1281 | DEBUG_PRINTF1("delta_snapshot %x\n", waveform_picker_regs->delta_snapshot) |
|
1432 | DEBUG_PRINTF1("delta_snapshot %x\n", waveform_picker_regs->delta_snapshot) | |
1282 | DEBUG_PRINTF1("delta_f0 %x\n", waveform_picker_regs->delta_f0) |
|
1433 | DEBUG_PRINTF1("delta_f0 %x\n", waveform_picker_regs->delta_f0) | |
1283 | DEBUG_PRINTF1("delta_f0_2 %x\n", waveform_picker_regs->delta_f0_2) |
|
1434 | DEBUG_PRINTF1("delta_f0_2 %x\n", waveform_picker_regs->delta_f0_2) | |
@@ -1286,7 +1437,10 void reset_waveform_picker_regs(void) | |||||
1286 | // 2688 = 8 * 336 |
|
1437 | // 2688 = 8 * 336 | |
1287 |
waveform_picker_regs->nb_data_by_buffer = 0xa7f; |
|
1438 | waveform_picker_regs->nb_data_by_buffer = 0xa7f; // 0x30 *** 2688 - 1 => nb samples -1 | |
1288 |
waveform_picker_regs->snapshot_param = 0xa80; |
|
1439 | waveform_picker_regs->snapshot_param = 0xa80; // 0x34 *** 2688 => nb samples | |
1289 |
waveform_picker_regs->start_date = 0x |
|
1440 | waveform_picker_regs->start_date = 0x7fffffff; // 0x38 | |
|
1441 | // | |||
|
1442 | // coarse time and fine time registers are not initialized, they are volatile | |||
|
1443 | // | |||
1290 |
waveform_picker_regs->buffer_length = 0x1f8; |
|
1444 | waveform_picker_regs->buffer_length = 0x1f8;// buffer length in burst = 3 * 2688 / 16 = 504 = 0x1f8 | |
1291 | } |
|
1445 | } | |
1292 |
|
1446 |
@@ -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.2. |
|
3 | <!-- Written by QtCreator 3.2.1, 2014-10-24T14:21:58. --> | |
4 | <qtcreator> |
|
4 | <qtcreator> | |
5 | <data> |
|
5 | <data> | |
6 | <variable>EnvironmentId</variable> |
|
6 | <variable>EnvironmentId</variable> |
General Comments 0
You need to be logged in to leave comments.
Login now