@@ -18,6 +18,7 extern rtems_id Task_id[]; /* ar | |||
|
18 | 18 | extern int fdSPW; |
|
19 | 19 | extern volatile int wf_snap_f0[ ]; |
|
20 | 20 | extern volatile int wf_snap_f1[ ]; |
|
21 | extern volatile int wf_snap_f1_bis[ ]; | |
|
21 | 22 | extern volatile int wf_snap_f2[ ]; |
|
22 | 23 | extern volatile int wf_cont_f3[ ]; |
|
23 | 24 | extern waveform_picker_regs_t *waveform_picker_regs; |
@@ -17,11 +17,12 time_management_regs_t *time_management_ | |||
|
17 | 17 | waveform_picker_regs_t *waveform_picker_regs = (waveform_picker_regs_t*) REGS_ADDR_WAVEFORM_PICKER; |
|
18 | 18 | gptimer_regs_t *gptimer_regs = (gptimer_regs_t *) REGS_ADDR_GPTIMER; |
|
19 | 19 | |
|
20 | // WAVEFORMS GLOBAL VARIABLES | |
|
21 |
volatile int wf_snap_f0[ |
|
|
22 |
volatile int wf_snap_f1[ |
|
|
23 |
volatile int wf_snap_f |
|
|
24 |
volatile int wf_ |
|
|
20 | // WAVEFORMS GLOBAL VARIABLES // 2048 * 3 * 4 + 2 * 4 = 24576 + 8 bytes | |
|
21 | volatile int wf_snap_f0[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET]; | |
|
22 | volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET]; | |
|
23 | volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET]; | |
|
24 | volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET]; | |
|
25 | volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET]; | |
|
25 | 26 | |
|
26 | 27 | // SPECTRAL MATRICES GLOBAL VARIABLES |
|
27 | 28 | volatile int spec_mat_f0_a[ TOTAL_SIZE_SPEC_MAT ]; |
@@ -122,9 +122,9 rtems_task Init( rtems_task_argument ign | |||
|
122 | 122 | LEON_Unmask_interrupt( IRQ_TIME2 ); |
|
123 | 123 | |
|
124 | 124 | #ifdef GSA |
|
125 | if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { | |
|
126 | printf("in INIT *** Error sending event to WFRM\n"); | |
|
127 | } | |
|
125 | //if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { | |
|
126 | // printf("in INIT *** Error sending event to WFRM\n"); | |
|
127 | //} | |
|
128 | 128 | #endif |
|
129 | 129 | |
|
130 | 130 | status = rtems_task_delete(RTEMS_SELF); |
@@ -611,14 +611,18 int action_enter(ccsdsTelecommandPacket_ | |||
|
611 | 611 | printf("enter mode %d\n", lfr_mode); |
|
612 | 612 | switch(lfr_mode) |
|
613 | 613 | { |
|
614 | //******** | |
|
615 | // STANDBY | |
|
614 | 616 | case(LFR_MODE_STANDBY): |
|
615 | 617 | LEON_Mask_interrupt( IRQ_WF ); |
|
616 | 618 | LEON_Mask_interrupt( IRQ_SM ); |
|
617 | 619 | LEON_Mask_interrupt( IRQ_WAVEFORM_PICKER ); |
|
618 | 620 | waveform_picker_regs->burst_enable = 0x00; |
|
619 | 621 | break; |
|
622 | ||
|
623 | //****** | |
|
624 | // NORMAL | |
|
620 | 625 | case(LFR_MODE_NORMAL): |
|
621 | ||
|
622 | 626 | #ifdef GSA |
|
623 | 627 | LEON_Unmask_interrupt( IRQ_WF ); |
|
624 | 628 | #else |
@@ -627,14 +631,35 int action_enter(ccsdsTelecommandPacket_ | |||
|
627 | 631 | waveform_picker_regs->burst_enable = 0x07; |
|
628 | 632 | waveform_picker_regs->status = 0x00; |
|
629 | 633 | #endif |
|
634 | LEON_Unmask_interrupt( IRQ_SM ); | |
|
635 | break; | |
|
630 | 636 | |
|
631 | break; | |
|
637 | //****** | |
|
638 | // BURST | |
|
632 | 639 | case(LFR_MODE_BURST): |
|
633 | 640 | break; |
|
641 | ||
|
642 | //***** | |
|
643 | // SBM1 | |
|
634 | 644 | case(LFR_MODE_SBM1): |
|
645 | #ifdef GSA | |
|
646 | #else | |
|
647 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); | |
|
648 | LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER ); | |
|
649 | waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0 | |
|
650 | waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x02; | |
|
651 | waveform_picker_regs->status = 0x00; | |
|
652 | #endif | |
|
653 | //LEON_Unmask_interrupt( IRQ_SM ); | |
|
635 | 654 | break; |
|
655 | ||
|
656 | //***** | |
|
657 | // SBM2 | |
|
636 | 658 | case(LFR_MODE_SBM2): |
|
637 | 659 | break; |
|
660 | ||
|
661 | //******** | |
|
662 | // DEFAULT | |
|
638 | 663 | default: |
|
639 | 664 | break; |
|
640 | 665 | } |
@@ -2,7 +2,22 | |||
|
2 | 2 | |
|
3 | 3 | rtems_isr waveforms_isr( rtems_vector_number vector ) |
|
4 | 4 | { |
|
5 | if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){// if no channel is enable | |
|
5 | if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) { | |
|
6 | printf("In waveforms_isr *** Error sending event to WFRM\n"); | |
|
7 | } | |
|
8 | if (waveform_picker_regs->burst_enable == 0x22) { | |
|
9 | if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) { | |
|
10 | waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis); | |
|
11 | } | |
|
12 | else { | |
|
13 | waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); | |
|
14 | } | |
|
15 | if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) { | |
|
16 | printf("In waveforms_isr *** Error sending event to WFRM\n"); | |
|
17 | } | |
|
18 | } | |
|
19 | waveform_picker_regs->status = 0x00; | |
|
20 | /*else if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){// if no channel is enable | |
|
6 | 21 | if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) { |
|
7 | 22 | printf("In timecode_irq_handler *** Error sending event to DUMB\n"); |
|
8 | 23 | } |
@@ -14,7 +29,7 rtems_isr waveforms_isr( rtems_vector_nu | |||
|
14 | 29 | printf("In waveforms_isr *** Error sending event to WFRM\n"); |
|
15 | 30 | } |
|
16 | 31 | } |
|
17 |
|
|
|
32 | }*/ | |
|
18 | 33 | } |
|
19 | 34 | |
|
20 | 35 | rtems_isr waveforms_simulator_isr( rtems_vector_number vector ) |
@@ -74,19 +89,24 rtems_task wfrm_task(rtems_task_argument | |||
|
74 | 89 | //*************** |
|
75 | 90 | // send snapshots |
|
76 | 91 | // F0 |
|
77 | send_waveform( &header, wf_snap_f0, SID_NORM_SWF_F0, &spw_ioctl_send); | |
|
92 | //send_waveform( &header, wf_snap_f0, SID_NORM_SWF_F0, &spw_ioctl_send); | |
|
78 | 93 | // F1 |
|
94 | if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) { | |
|
95 | send_waveform( &header, wf_snap_f1_bis, SID_NORM_SWF_F1, &spw_ioctl_send); | |
|
96 | } | |
|
97 | else { | |
|
79 | 98 | send_waveform( &header, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send); |
|
99 | } | |
|
80 | 100 | // F2 |
|
81 | send_waveform( &header, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send); | |
|
101 | //send_waveform( &header, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send); | |
|
82 | 102 | |
|
83 | 103 | #ifdef GSA |
|
84 | 104 | // irq processed, reset the related register of the timer unit |
|
85 | 105 | gptimer_regs->timer[2].ctrl = gptimer_regs->timer[2].ctrl | 0x00000010; |
|
86 | 106 | #else |
|
87 | 107 | // irq processed, reset the related register of the waveform picker |
|
88 | waveform_picker_regs->status = 0x00; | |
|
89 | waveform_picker_regs->burst_enable = 0x07; | |
|
108 | //waveform_picker_regs->status = 0x00; | |
|
109 | //waveform_picker_regs->burst_enable = 0x07; | |
|
90 | 110 | #endif |
|
91 | 111 | |
|
92 | 112 | } |
@@ -97,23 +117,9 rtems_task wfrm_task(rtems_task_argument | |||
|
97 | 117 | void init_waveforms( void ) |
|
98 | 118 | { |
|
99 | 119 | int i = 0; |
|
100 | int aux1 = 0; | |
|
101 | int aux2 = 0; | |
|
102 | int val1 = 0; | |
|
103 | int val2 = 0; | |
|
104 | int val3 = 0; | |
|
105 | int val4 = 0; | |
|
106 | int amplitude1 = pow(2, 10); | |
|
107 | static int delta_phi = 0; | |
|
108 | 120 | |
|
109 | 121 | for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++) |
|
110 | 122 | { |
|
111 | aux1 = (int) (amplitude1 * cos((2*pi*i)/2048 + (delta_phi*pi)/180)); | |
|
112 | aux2 = (int) (amplitude1 * sin((2*pi*i)/2048 + (delta_phi*pi)/180)); | |
|
113 | val1 = build_value(aux1, aux2); | |
|
114 | val2 = build_value(i, 2*i); | |
|
115 | val3 = build_value(-aux1, -aux2); | |
|
116 | val4 = build_value(-i, -2*i); | |
|
117 | 123 | //*** |
|
118 | 124 | // F0 |
|
119 | 125 | wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; // |
@@ -122,14 +128,14 void init_waveforms( void ) | |||
|
122 | 128 | |
|
123 | 129 | //*** |
|
124 | 130 | // F1 |
|
125 |
wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = |
|
|
126 |
wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = |
|
|
131 | wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111; | |
|
132 | wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333; | |
|
127 | 133 | wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; |
|
128 | 134 | |
|
129 | 135 | //*** |
|
130 | 136 | // F2 |
|
131 |
wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = |
|
|
132 |
wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = |
|
|
137 | wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333; | |
|
138 | wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; | |
|
133 | 139 | wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; |
|
134 | 140 | |
|
135 | 141 | //*** |
@@ -138,9 +144,6 void init_waveforms( void ) | |||
|
138 | 144 | //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 1 ] = val2; |
|
139 | 145 | //wf_cont_f3[ (i* NB_WORDS_SWF_BLK) + 2 ] = 0xaaaa0000; |
|
140 | 146 | } |
|
141 | ||
|
142 | delta_phi = delta_phi + 10; | |
|
143 | ||
|
144 | 147 | } |
|
145 | 148 | |
|
146 | 149 | void init_waveform_header( ExtendedTMHeader_t * header, unsigned int sid ) |
@@ -229,7 +232,7 void send_waveform( ExtendedTMHeader_t * | |||
|
229 | 232 | spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) + (1 * TIME_OFFSET) ]; |
|
230 | 233 | } |
|
231 | 234 | else if (sid == SID_NORM_SWF_F2) { |
|
232 |
spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) + ( |
|
|
235 | spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) + (1 * TIME_OFFSET) ]; | |
|
233 | 236 | } |
|
234 | 237 | else { |
|
235 | 238 | spw_ioctl_send->data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ]; |
General Comments 0
You need to be logged in to leave comments.
Login now