|
@@
-33,24
+33,27
rtems_isr waveforms_isr( rtems_vector_nu
|
|
33
|
*
|
|
33
|
*
|
|
34
|
*/
|
|
34
|
*/
|
|
35
|
|
|
35
|
|
|
|
|
|
36
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
|
|
|
37
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff00f; // clear new_err and full_err
|
|
|
|
|
38
|
|
|
36
|
#ifdef GSA
|
|
39
|
#ifdef GSA
|
|
37
|
#else
|
|
40
|
#else
|
|
38
|
if ( (lfrCurrentMode == LFR_MODE_NORMAL)
|
|
41
|
if ( (lfrCurrentMode == LFR_MODE_NORMAL)
|
|
39
|
|| (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
|
|
42
|
|| (lfrCurrentMode == LFR_MODE_SBM1) || (lfrCurrentMode == LFR_MODE_SBM2) )
|
|
40
|
{ // in modes other than STANDBY and BURST, send the CWF_F3 data
|
|
43
|
{ // in modes other than STANDBY and BURST, send the CWF_F3 data
|
|
41
|
if ((waveform_picker_regs->status & 0x08) == 0x08){ // [1000] f3 is full
|
|
44
|
if ((new_waveform_picker_regs->status & 0x08) == 0x08){ // [1000] f3 is full
|
|
42
|
// (1) change the receiving buffer for the waveform picker
|
|
45
|
// (1) change the receiving buffer for the waveform picker
|
|
43
|
if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
|
|
46
|
if (new_waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
|
|
44
|
waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
|
|
47
|
new_waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_bis);
|
|
45
|
}
|
|
48
|
}
|
|
46
|
else {
|
|
49
|
else {
|
|
47
|
waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
|
|
50
|
new_waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3);
|
|
48
|
}
|
|
51
|
}
|
|
49
|
// (2) send an event for the waveforms transmission
|
|
52
|
// (2) send an event for the waveforms transmission
|
|
50
|
if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
|
|
53
|
if (rtems_event_send( Task_id[TASKID_CWF3], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
|
|
51
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
54
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
52
|
}
|
|
55
|
}
|
|
53
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff777; // reset f3 bits to 0, [1111 0111 0111 0111]
|
|
56
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff777; // reset f3 bits to 0, [1111 0111 0111 0111]
|
|
54
|
}
|
|
57
|
}
|
|
55
|
}
|
|
58
|
}
|
|
56
|
#endif
|
|
59
|
#endif
|
|
@@
-68,18
+71,18
rtems_isr waveforms_isr( rtems_vector_nu
|
|
68
|
#ifdef GSA
|
|
71
|
#ifdef GSA
|
|
69
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
72
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
70
|
#else
|
|
73
|
#else
|
|
71
|
if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){ // if no channel is enable
|
|
74
|
if ( (new_waveform_picker_regs->run_burst_enable & 0x7) == 0x0 ){ // if no channel is enable
|
|
72
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
75
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
73
|
}
|
|
76
|
}
|
|
74
|
else {
|
|
77
|
else {
|
|
75
|
if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
|
|
78
|
if ( (new_waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
|
|
76
|
waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable & 0x08;
|
|
79
|
new_waveform_picker_regs->run_burst_enable = new_waveform_picker_regs->run_burst_enable & 0x08;
|
|
77
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
|
|
80
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
|
|
78
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
81
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
79
|
}
|
|
82
|
}
|
|
80
|
// waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
|
|
83
|
// new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0x00;
|
|
81
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffff888;
|
|
84
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff888;
|
|
82
|
waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x07; // [0111] enable f2 f1 f0
|
|
85
|
new_waveform_picker_regs->run_burst_enable = new_waveform_picker_regs->run_burst_enable | 0x07; // [0111] enable f2 f1 f0
|
|
83
|
}
|
|
86
|
}
|
|
84
|
}
|
|
87
|
}
|
|
85
|
#endif
|
|
88
|
#endif
|
|
@@
-91,19
+94,19
rtems_isr waveforms_isr( rtems_vector_nu
|
|
91
|
#ifdef GSA
|
|
94
|
#ifdef GSA
|
|
92
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
95
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
93
|
#else
|
|
96
|
#else
|
|
94
|
if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
|
|
97
|
if ((new_waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
|
|
95
|
// (1) change the receiving buffer for the waveform picker
|
|
98
|
// (1) change the receiving buffer for the waveform picker
|
|
96
|
if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
99
|
if (new_waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
97
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
|
|
100
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
|
|
98
|
}
|
|
101
|
}
|
|
99
|
else {
|
|
102
|
else {
|
|
100
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
103
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
101
|
}
|
|
104
|
}
|
|
102
|
// (2) send an event for the waveforms transmission
|
|
105
|
// (2) send an event for the waveforms transmission
|
|
103
|
if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
|
|
106
|
if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_BURST ) != RTEMS_SUCCESSFUL) {
|
|
104
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
107
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
105
|
}
|
|
108
|
}
|
|
106
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bits = 0
|
|
109
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bits = 0
|
|
107
|
}
|
|
110
|
}
|
|
108
|
#endif
|
|
111
|
#endif
|
|
109
|
break;
|
|
112
|
break;
|
|
@@
-114,34
+117,34
rtems_isr waveforms_isr( rtems_vector_nu
|
|
114
|
#ifdef GSA
|
|
117
|
#ifdef GSA
|
|
115
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
118
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
116
|
#else
|
|
119
|
#else
|
|
117
|
if ((waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
|
|
120
|
if ((new_waveform_picker_regs->status & 0x02) == 0x02){ // [0010] check the f1 full bit
|
|
118
|
// (1) change the receiving buffer for the waveform picker
|
|
121
|
// (1) change the receiving buffer for the waveform picker
|
|
119
|
if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) )
|
|
122
|
if ( param_local.local_sbm1_nb_cwf_sent == (param_local.local_sbm1_nb_cwf_max-1) )
|
|
120
|
{
|
|
123
|
{
|
|
121
|
waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_norm);
|
|
124
|
new_waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_norm);
|
|
122
|
}
|
|
125
|
}
|
|
123
|
else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1_norm )
|
|
126
|
else if ( new_waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1_norm )
|
|
124
|
{
|
|
127
|
{
|
|
125
|
doubleSendCWF1 = 1;
|
|
128
|
doubleSendCWF1 = 1;
|
|
126
|
waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
|
|
129
|
new_waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
|
|
127
|
}
|
|
130
|
}
|
|
128
|
else if ( waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1 ) {
|
|
131
|
else if ( new_waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1 ) {
|
|
129
|
waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
|
|
132
|
new_waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
|
|
130
|
}
|
|
133
|
}
|
|
131
|
else {
|
|
134
|
else {
|
|
132
|
waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
|
|
135
|
new_waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
|
|
133
|
}
|
|
136
|
}
|
|
134
|
// (2) send an event for the waveforms transmission
|
|
137
|
// (2) send an event for the waveforms transmission
|
|
135
|
if (rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
|
|
138
|
if (rtems_event_send( Task_id[TASKID_CWF1], RTEMS_EVENT_MODE_SBM1 ) != RTEMS_SUCCESSFUL) {
|
|
136
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
139
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
137
|
}
|
|
140
|
}
|
|
138
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bit = 0
|
|
141
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffddd; // [1111 1101 1101 1101] f1 bit = 0
|
|
139
|
}
|
|
142
|
}
|
|
140
|
if ( ( (waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
|
|
143
|
if ( ( (new_waveform_picker_regs->status & 0x05) == 0x05 ) ) { // [0101] check the f2 and f0 full bit
|
|
141
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
|
|
144
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
|
|
142
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
145
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
143
|
}
|
|
146
|
}
|
|
144
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2 and f0 bits = 0
|
|
147
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2 and f0 bits = 0
|
|
145
|
reset_local_sbm1_nb_cwf_sent();
|
|
148
|
reset_local_sbm1_nb_cwf_sent();
|
|
146
|
}
|
|
149
|
}
|
|
147
|
|
|
150
|
|
|
@@
-154,37
+157,37
rtems_isr waveforms_isr( rtems_vector_nu
|
|
154
|
#ifdef GSA
|
|
157
|
#ifdef GSA
|
|
155
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
158
|
PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
|
|
156
|
#else
|
|
159
|
#else
|
|
157
|
if ((waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
|
|
160
|
if ((new_waveform_picker_regs->status & 0x04) == 0x04){ // [0100] check the f2 full bit
|
|
158
|
// (1) change the receiving buffer for the waveform picker
|
|
161
|
// (1) change the receiving buffer for the waveform picker
|
|
159
|
if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) )
|
|
162
|
if ( param_local.local_sbm2_nb_cwf_sent == (param_local.local_sbm2_nb_cwf_max-1) )
|
|
160
|
{
|
|
163
|
{
|
|
161
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_norm);
|
|
164
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_norm);
|
|
162
|
}
|
|
165
|
}
|
|
163
|
else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2_norm ) {
|
|
166
|
else if ( new_waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2_norm ) {
|
|
164
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
167
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
165
|
doubleSendCWF2 = 1;
|
|
168
|
doubleSendCWF2 = 1;
|
|
166
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2_WFRM ) != RTEMS_SUCCESSFUL) {
|
|
169
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2_WFRM ) != RTEMS_SUCCESSFUL) {
|
|
167
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
170
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
168
|
}
|
|
171
|
}
|
|
169
|
reset_local_sbm2_nb_cwf_sent();
|
|
172
|
reset_local_sbm2_nb_cwf_sent();
|
|
170
|
}
|
|
173
|
}
|
|
171
|
else if ( waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2 ) {
|
|
174
|
else if ( new_waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2 ) {
|
|
172
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
|
|
175
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
|
|
173
|
}
|
|
176
|
}
|
|
174
|
else {
|
|
177
|
else {
|
|
175
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
178
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
|
|
176
|
}
|
|
179
|
}
|
|
177
|
// (2) send an event for the waveforms transmission
|
|
180
|
// (2) send an event for the waveforms transmission
|
|
178
|
if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
|
|
181
|
if (rtems_event_send( Task_id[TASKID_CWF2], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
|
|
179
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
182
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
180
|
}
|
|
183
|
}
|
|
181
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0
|
|
184
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffbbb; // [1111 1011 1011 1011] f2 bit = 0
|
|
182
|
}
|
|
185
|
}
|
|
183
|
if ( ( (waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, f1 and f0 are full
|
|
186
|
if ( ( (new_waveform_picker_regs->status & 0x03) == 0x03 ) ) { // [0011] f3 f2 f1 f0, f1 and f0 are full
|
|
184
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
|
|
187
|
if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
|
|
185
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
188
|
rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
|
|
186
|
}
|
|
189
|
}
|
|
187
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
|
|
190
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
|
|
188
|
}
|
|
191
|
}
|
|
189
|
#endif
|
|
192
|
#endif
|
|
190
|
break;
|
|
193
|
break;
|
|
@@
-262,7
+265,7
rtems_task wfrm_task(rtems_task_argument
|
|
262
|
send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
265
|
send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
263
|
send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
|
|
266
|
send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
|
|
264
|
#ifdef GSA
|
|
267
|
#ifdef GSA
|
|
265
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
|
|
268
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xf888; // [1111 1000 1000 1000] f2, f1, f0 bits =0
|
|
266
|
#endif
|
|
269
|
#endif
|
|
267
|
}
|
|
270
|
}
|
|
268
|
else if (event_out == RTEMS_EVENT_MODE_SBM1)
|
|
271
|
else if (event_out == RTEMS_EVENT_MODE_SBM1)
|
|
@@
-271,7
+274,7
rtems_task wfrm_task(rtems_task_argument
|
|
271
|
send_waveform_SWF(wf_snap_f1_norm, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
274
|
send_waveform_SWF(wf_snap_f1_norm, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
272
|
send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
|
|
275
|
send_waveform_SWF(wf_snap_f2, SID_NORM_SWF_F2, headerSWF_F2, queue_id);
|
|
273
|
#ifdef GSA
|
|
276
|
#ifdef GSA
|
|
274
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2, f0 bits = 0
|
|
277
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffaaa; // [1111 1010 1010 1010] f2, f0 bits = 0
|
|
275
|
#endif
|
|
278
|
#endif
|
|
276
|
}
|
|
279
|
}
|
|
277
|
else if (event_out == RTEMS_EVENT_MODE_SBM2)
|
|
280
|
else if (event_out == RTEMS_EVENT_MODE_SBM2)
|
|
@@
-279,7
+282,7
rtems_task wfrm_task(rtems_task_argument
|
|
279
|
send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
|
|
282
|
send_waveform_SWF(wf_snap_f0, SID_NORM_SWF_F0, headerSWF_F0, queue_id);
|
|
280
|
send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
283
|
send_waveform_SWF(wf_snap_f1, SID_NORM_SWF_F1, headerSWF_F1, queue_id);
|
|
281
|
#ifdef GSA
|
|
284
|
#ifdef GSA
|
|
282
|
waveform_picker_regs->status = waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
|
|
285
|
new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffffccc; // [1111 1100 1100 1100] f1, f0 bits = 0
|
|
283
|
#endif
|
|
286
|
#endif
|
|
284
|
}
|
|
287
|
}
|
|
285
|
else if (event_out == RTEMS_EVENT_MODE_SBM2_WFRM)
|
|
288
|
else if (event_out == RTEMS_EVENT_MODE_SBM2_WFRM)
|
|
@@
-329,7
+332,7
rtems_task cwf3_task(rtems_task_argument
|
|
329
|
PRINTF("send CWF F3 \n")
|
|
332
|
PRINTF("send CWF F3 \n")
|
|
330
|
#ifdef GSA
|
|
333
|
#ifdef GSA
|
|
331
|
#else
|
|
334
|
#else
|
|
332
|
if (waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
|
|
335
|
if (new_waveform_picker_regs->addr_data_f3 == (int) wf_cont_f3) {
|
|
333
|
send_waveform_CWF3_light( wf_cont_f3_bis, headerCWF_F3_light, queue_id );
|
|
336
|
send_waveform_CWF3_light( wf_cont_f3_bis, headerCWF_F3_light, queue_id );
|
|
334
|
}
|
|
337
|
}
|
|
335
|
else {
|
|
338
|
else {
|
|
@@
-371,7
+374,7
rtems_task cwf2_task(rtems_task_argument
|
|
371
|
// F2
|
|
374
|
// F2
|
|
372
|
#ifdef GSA
|
|
375
|
#ifdef GSA
|
|
373
|
#else
|
|
376
|
#else
|
|
374
|
if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
377
|
if (new_waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
375
|
send_waveform_CWF( wf_snap_f2_bis, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
|
|
378
|
send_waveform_CWF( wf_snap_f2_bis, SID_BURST_CWF_F2, headerCWF_F2_BURST, queue_id );
|
|
376
|
}
|
|
379
|
}
|
|
377
|
else {
|
|
380
|
else {
|
|
@@
-389,7
+392,7
rtems_task cwf2_task(rtems_task_argument
|
|
389
|
doubleSendCWF2 = 0;
|
|
392
|
doubleSendCWF2 = 0;
|
|
390
|
send_waveform_CWF( wf_snap_f2_norm, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
|
|
393
|
send_waveform_CWF( wf_snap_f2_norm, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
|
|
391
|
}
|
|
394
|
}
|
|
392
|
else if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
395
|
else if (new_waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
|
|
393
|
send_waveform_CWF( wf_snap_f2_bis, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
|
|
396
|
send_waveform_CWF( wf_snap_f2_bis, SID_SBM2_CWF_F2, headerCWF_F2_SBM2, queue_id );
|
|
394
|
}
|
|
397
|
}
|
|
395
|
else {
|
|
398
|
else {
|
|
@@
-438,7
+441,7
rtems_task cwf1_task(rtems_task_argument
|
|
438
|
doubleSendCWF1 = 0;
|
|
441
|
doubleSendCWF1 = 0;
|
|
439
|
send_waveform_CWF( wf_snap_f1_norm, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
|
|
442
|
send_waveform_CWF( wf_snap_f1_norm, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
|
|
440
|
}
|
|
443
|
}
|
|
441
|
else if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
|
|
444
|
else if (new_waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
|
|
442
|
send_waveform_CWF( wf_snap_f1_bis, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
|
|
445
|
send_waveform_CWF( wf_snap_f1_bis, SID_SBM1_CWF_F1, headerCWF_F1, queue_id );
|
|
443
|
}
|
|
446
|
}
|
|
444
|
else {
|
|
447
|
else {
|
|
@@
-533,14
+536,14
int init_header_snapshot_wf_table( unsig
|
|
533
|
headerSWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
|
|
536
|
headerSWF[ i ].serviceSubType = TM_SUBTYPE_LFR_SCIENCE; // service subtype
|
|
534
|
headerSWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
|
|
537
|
headerSWF[ i ].destinationID = TM_DESTINATION_ID_GROUND;
|
|
535
|
// AUXILIARY DATA HEADER
|
|
538
|
// AUXILIARY DATA HEADER
|
|
|
|
|
539
|
headerSWF[ i ].sid = sid;
|
|
|
|
|
540
|
headerSWF[ i ].hkBIA = DEFAULT_HKBIA;
|
|
536
|
headerSWF[ i ].time[0] = 0x00;
|
|
541
|
headerSWF[ i ].time[0] = 0x00;
|
|
537
|
headerSWF[ i ].time[0] = 0x00;
|
|
542
|
headerSWF[ i ].time[0] = 0x00;
|
|
538
|
headerSWF[ i ].time[0] = 0x00;
|
|
543
|
headerSWF[ i ].time[0] = 0x00;
|
|
539
|
headerSWF[ i ].time[0] = 0x00;
|
|
544
|
headerSWF[ i ].time[0] = 0x00;
|
|
540
|
headerSWF[ i ].time[0] = 0x00;
|
|
545
|
headerSWF[ i ].time[0] = 0x00;
|
|
541
|
headerSWF[ i ].time[0] = 0x00;
|
|
546
|
headerSWF[ i ].time[0] = 0x00;
|
|
542
|
headerSWF[ i ].sid = sid;
|
|
|
|
|
543
|
headerSWF[ i ].hkBIA = DEFAULT_HKBIA;
|
|
|
|
|
544
|
}
|
|
547
|
}
|
|
545
|
return LFR_SUCCESSFUL;
|
|
548
|
return LFR_SUCCESSFUL;
|
|
546
|
}
|
|
549
|
}
|
|
@@
-941,7
+944,7
void set_wfp_data_shaping()
|
|
941
|
|
|
944
|
|
|
942
|
#ifdef GSA
|
|
945
|
#ifdef GSA
|
|
943
|
#else
|
|
946
|
#else
|
|
944
|
waveform_picker_regs->data_shaping =
|
|
947
|
new_waveform_picker_regs->data_shaping =
|
|
945
|
( (data_shaping & 0x10) >> 4 ) // BW
|
|
948
|
( (data_shaping & 0x10) >> 4 ) // BW
|
|
946
|
+ ( (data_shaping & 0x08) >> 2 ) // SP0
|
|
949
|
+ ( (data_shaping & 0x08) >> 2 ) // SP0
|
|
947
|
+ ( (data_shaping & 0x04) ) // SP1
|
|
950
|
+ ( (data_shaping & 0x04) ) // SP1
|
|
@@
-982,7
+985,7
char set_wfp_delta_snapshot()
|
|
982
|
aux = delta_snapshot ;
|
|
985
|
aux = delta_snapshot ;
|
|
983
|
ret = LFR_SUCCESSFUL;
|
|
986
|
ret = LFR_SUCCESSFUL;
|
|
984
|
}
|
|
987
|
}
|
|
985
|
waveform_picker_regs->delta_snapshot = aux - 1; // max 2 bytes
|
|
988
|
new_waveform_picker_regs->delta_snapshot = aux - 1; // max 2 bytes
|
|
986
|
#endif
|
|
989
|
#endif
|
|
987
|
|
|
990
|
|
|
988
|
return ret;
|
|
991
|
return ret;
|
|
@@
-1004,29
+1007,30
void set_wfp_burst_enable_register( unsi
|
|
1004
|
// the burst bits shall be set first, before the enable bits
|
|
1007
|
// the burst bits shall be set first, before the enable bits
|
|
1005
|
switch(mode) {
|
|
1008
|
switch(mode) {
|
|
1006
|
case(LFR_MODE_NORMAL):
|
|
1009
|
case(LFR_MODE_NORMAL):
|
|
1007
|
waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enable
|
|
1010
|
new_waveform_picker_regs->run_burst_enable = 0x00; // [0000 0000] no burst enable
|
|
1008
|
waveform_picker_regs->burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
|
|
1011
|
// new_waveform_picker_regs->run_burst_enable = 0x0f; // [0000 1111] enable f3 f2 f1 f0
|
|
|
|
|
1012
|
new_waveform_picker_regs->run_burst_enable = 0x07; // [0000 0111] enable f2 f1 f0
|
|
1009
|
break;
|
|
1013
|
break;
|
|
1010
|
case(LFR_MODE_BURST):
|
|
1014
|
case(LFR_MODE_BURST):
|
|
1011
|
waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
|
|
1015
|
new_waveform_picker_regs->run_burst_enable = 0x40; // [0100 0000] f2 burst enabled
|
|
1012
|
waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04; // [0100] enable f2
|
|
1016
|
new_waveform_picker_regs->run_burst_enable = new_waveform_picker_regs->run_burst_enable | 0x04; // [0100] enable f2
|
|
1013
|
break;
|
|
1017
|
break;
|
|
1014
|
case(LFR_MODE_SBM1):
|
|
1018
|
case(LFR_MODE_SBM1):
|
|
1015
|
waveform_picker_regs->burst_enable = 0x20; // [0010 0000] f1 burst enabled
|
|
1019
|
new_waveform_picker_regs->run_burst_enable = 0x20; // [0010 0000] f1 burst enabled
|
|
1016
|
waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
|
|
1020
|
new_waveform_picker_regs->run_burst_enable = new_waveform_picker_regs->run_burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
|
|
1017
|
break;
|
|
1021
|
break;
|
|
1018
|
case(LFR_MODE_SBM2):
|
|
1022
|
case(LFR_MODE_SBM2):
|
|
1019
|
waveform_picker_regs->burst_enable = 0x40; // [0100 0000] f2 burst enabled
|
|
1023
|
new_waveform_picker_regs->run_burst_enable = 0x40; // [0100 0000] f2 burst enabled
|
|
1020
|
waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
|
|
1024
|
new_waveform_picker_regs->run_burst_enable = new_waveform_picker_regs->run_burst_enable | 0x0f; // [1111] enable f3 f2 f1 f0
|
|
1021
|
break;
|
|
1025
|
break;
|
|
1022
|
default:
|
|
1026
|
default:
|
|
1023
|
waveform_picker_regs->burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
|
|
1027
|
new_waveform_picker_regs->run_burst_enable = 0x00; // [0000 0000] no burst enabled, no waveform enabled
|
|
1024
|
break;
|
|
1028
|
break;
|
|
1025
|
}
|
|
1029
|
}
|
|
1026
|
#endif
|
|
1030
|
#endif
|
|
1027
|
}
|
|
1031
|
}
|
|
1028
|
|
|
1032
|
|
|
1029
|
void reset_wfp_burst_enable()
|
|
1033
|
void reset_wfp_run_burst_enable()
|
|
1030
|
{
|
|
1034
|
{
|
|
1031
|
/** This function resets the waveform picker burst_enable register.
|
|
1035
|
/** This function resets the waveform picker burst_enable register.
|
|
1032
|
*
|
|
1036
|
*
|
|
@@
-1036,7
+1040,7
void reset_wfp_burst_enable()
|
|
1036
|
|
|
1040
|
|
|
1037
|
#ifdef GSA
|
|
1041
|
#ifdef GSA
|
|
1038
|
#else
|
|
1042
|
#else
|
|
1039
|
waveform_picker_regs->burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
|
|
1043
|
new_waveform_picker_regs->run_burst_enable = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
|
|
1040
|
#endif
|
|
1044
|
#endif
|
|
1041
|
}
|
|
1045
|
}
|
|
1042
|
|
|
1046
|
|
|
@@
-1050,47
+1054,50
void reset_wfp_status()
|
|
1050
|
|
|
1054
|
|
|
1051
|
#ifdef GSA
|
|
1055
|
#ifdef GSA
|
|
1052
|
#else
|
|
1056
|
#else
|
|
1053
|
waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
|
|
1057
|
new_waveform_picker_regs->status = 0x00; // burst f2, f1, f0 enable f3, f2, f1, f0
|
|
1054
|
#endif
|
|
1058
|
#endif
|
|
1055
|
}
|
|
1059
|
}
|
|
1056
|
|
|
1060
|
|
|
1057
|
void reset_waveform_picker_regs()
|
|
1061
|
void reset_new_waveform_picker_regs()
|
|
1058
|
{
|
|
1062
|
{
|
|
1059
|
/** This function resets the waveform picker module registers.
|
|
1063
|
/** This function resets the waveform picker module registers.
|
|
1060
|
*
|
|
1064
|
*
|
|
1061
|
* The registers affected by this function are located at the following offset addresses:
|
|
1065
|
* The registers affected by this function are located at the following offset addresses:
|
|
1062
|
* - 0x00 data_shaping
|
|
1066
|
* - 0x00 data_shaping
|
|
1063
|
* - 0x04 burst_enable
|
|
1067
|
* - 0x04 run_burst_enable
|
|
1064
|
* - 0x08 addr_data_f0
|
|
1068
|
* - 0x08 addr_data_f0
|
|
1065
|
* - 0x0C addr_data_f1
|
|
1069
|
* - 0x0C addr_data_f1
|
|
1066
|
* - 0x10 addr_data_f2
|
|
1070
|
* - 0x10 addr_data_f2
|
|
1067
|
* - 0x14 addr_data_f3
|
|
1071
|
* - 0x14 addr_data_f3
|
|
1068
|
* - 0x18 status
|
|
1072
|
* - 0x18 status
|
|
1069
|
* - 0x1C delta_snapshot
|
|
1073
|
* - 0x1C delta_snapshot
|
|
1070
|
* - 0x20 delta_f2_f1
|
|
1074
|
* - 0x20 delta_f0
|
|
1071
|
* - 0x24 delta_f2_f0
|
|
1075
|
* - 0x24 delta_f0_2
|
|
1072
|
* - 0x28 nb_burst
|
|
1076
|
* - 0x28 delta_f1
|
|
1073
|
* - 0x2C nb_snapshot
|
|
1077
|
* - 0x2c delta_f2
|
|
1074
|
*
|
|
1078
|
* - 0x30 nb_data_by_buffer
|
|
1075
|
*/
|
|
1079
|
* - 0x34 nb_snapshot_param
|
|
|
|
|
1080
|
* - 0x38 start_date
|
|
|
|
|
1081
|
*
|
|
|
|
|
1082
|
*/
|
|
1076
|
|
|
1083
|
|
|
1077
|
#ifdef GSA
|
|
1084
|
new_waveform_picker_regs->data_shaping = 0x01; // 0x00 *** R1 R0 SP1 SP0 BW
|
|
1078
|
#else
|
|
1085
|
new_waveform_picker_regs->run_burst_enable = 0x00; // 0x04 *** [run *** burst f2, f1, f0 *** enable f3, f2, f1, f0 ]
|
|
1079
|
reset_wfp_burst_enable();
|
|
1086
|
new_waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); // 0x08
|
|
1080
|
reset_wfp_status();
|
|
1087
|
new_waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); // 0x0c
|
|
1081
|
// set buffer addresses
|
|
1088
|
new_waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); // 0x10
|
|
1082
|
waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
|
|
1089
|
new_waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); // 0x14
|
|
1083
|
waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
|
|
1090
|
new_waveform_picker_regs->status = 0x00; // 0x18
|
|
1084
|
waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
|
|
1091
|
// new_waveform_picker_regs->delta_snapshot = 0x12800; // 0x1c 296 * 256 = 75776
|
|
1085
|
waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
|
|
1092
|
new_waveform_picker_regs->delta_snapshot = 0x1000; // 0x1c 16 * 256 = 4096
|
|
1086
|
// set other parameters
|
|
1093
|
new_waveform_picker_regs->delta_f0 = 0x3f5; // 0x20 *** 1013
|
|
1087
|
set_wfp_data_shaping();
|
|
1094
|
new_waveform_picker_regs->delta_f0_2 = 0x7; // 0x24 *** 7
|
|
1088
|
set_wfp_delta_snapshot(); // time in seconds between two snapshots
|
|
1095
|
new_waveform_picker_regs->delta_f1 = 0x3c0; // 0x28 *** 960
|
|
1089
|
waveform_picker_regs->delta_f2_f1 = 0xffff; // 0x16800 => 92160 (max 4 bytes)
|
|
1096
|
// new_waveform_picker_regs->delta_f2 = 0x12200; // 0x2c *** 74240
|
|
1090
|
waveform_picker_regs->delta_f2_f0 = 0x17c00; // 97 280 (max 5 bytes)
|
|
1097
|
new_waveform_picker_regs->delta_f2 = 0xc00; // 0x2c *** 12 * 256 = 2048
|
|
1091
|
waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
|
|
1098
|
new_waveform_picker_regs->nb_data_by_buffer = 0x1802; // 0x30 *** 2048 * 3 + 2
|
|
1092
|
waveform_picker_regs->nb_snapshot_param = 0x7ff; // max 3 octets, 2048 - 1
|
|
1099
|
new_waveform_picker_regs->snapshot_param = 0x7ff; // 0x34 *** 2048 -1
|
|
1093
|
#endif
|
|
1100
|
new_waveform_picker_regs->start_date = 0x00; // 0x38
|
|
1094
|
}
|
|
1101
|
}
|
|
1095
|
|
|
1102
|
|
|
1096
|
//*****************
|
|
1103
|
//*****************
|
|
@@
-1183,8
+1190,8
void increment_seq_counter_source_id( un
|
|
1183
|
unsigned short segmentation_grouping_flag;
|
|
1190
|
unsigned short segmentation_grouping_flag;
|
|
1184
|
unsigned short new_packet_sequence_control;
|
|
1191
|
unsigned short new_packet_sequence_control;
|
|
1185
|
|
|
1192
|
|
|
1186
|
if ( (sid ==SID_NORM_SWF_F0) || (sid ==SID_NORM_SWF_F1) || (sid ==SID_NORM_SWF_F2)
|
|
1193
|
if ( (sid ==SID_NORM_SWF_F0) || (sid ==SID_NORM_SWF_F1) || (sid ==SID_NORM_SWF_F2)
|
|
1187
|
|| (sid ==SID_NORM_CWF_F3) || (sid ==SID_BURST_CWF_F2) )
|
|
1194
|
|| (sid ==SID_NORM_CWF_F3) || (sid ==SID_BURST_CWF_F2) )
|
|
1188
|
{
|
|
1195
|
{
|
|
1189
|
sequence_cnt = &sequenceCounters_SCIENCE_NORMAL_BURST;
|
|
1196
|
sequence_cnt = &sequenceCounters_SCIENCE_NORMAL_BURST;
|
|
1190
|
}
|
|
1197
|
}
|
|
@@
-1198,15
+1205,15
void increment_seq_counter_source_id( un
|
|
1198
|
PRINTF1("in increment_seq_counter_source_id *** ERR apid_destid %d not known\n", sid)
|
|
1205
|
PRINTF1("in increment_seq_counter_source_id *** ERR apid_destid %d not known\n", sid)
|
|
1199
|
}
|
|
1206
|
}
|
|
1200
|
|
|
1207
|
|
|
1201
|
segmentation_grouping_flag = (packet_sequence_control[ 0 ] & 0xc0) << 8;
|
|
1208
|
segmentation_grouping_flag = (packet_sequence_control[ 0 ] & 0xc0) << 8;
|
|
1202
|
*sequence_cnt = (*sequence_cnt) & 0x3fff;
|
|
1209
|
*sequence_cnt = (*sequence_cnt) & 0x3fff;
|
|
1203
|
|
|
1210
|
|
|
1204
|
new_packet_sequence_control = segmentation_grouping_flag | *sequence_cnt ;
|
|
1211
|
new_packet_sequence_control = segmentation_grouping_flag | *sequence_cnt ;
|
|
1205
|
|
|
1212
|
|
|
1206
|
packet_sequence_control[0] = (unsigned char) (new_packet_sequence_control >> 8);
|
|
1213
|
packet_sequence_control[0] = (unsigned char) (new_packet_sequence_control >> 8);
|
|
1207
|
packet_sequence_control[1] = (unsigned char) (new_packet_sequence_control );
|
|
1214
|
packet_sequence_control[1] = (unsigned char) (new_packet_sequence_control );
|
|
1208
|
|
|
1215
|
|
|
1209
|
// increment the seuqence counter for the next packet
|
|
1216
|
// increment the sequence counter for the next packet
|
|
1210
|
if ( *sequence_cnt < SEQ_CNT_MAX)
|
|
1217
|
if ( *sequence_cnt < SEQ_CNT_MAX)
|
|
1211
|
{
|
|
1218
|
{
|
|
1212
|
*sequence_cnt = *sequence_cnt + 1;
|
|
1219
|
*sequence_cnt = *sequence_cnt + 1;
|
|
@@
-1215,5
+1222,4
void increment_seq_counter_source_id( un
|
|
1215
|
{
|
|
1222
|
{
|
|
1216
|
*sequence_cnt = 0;
|
|
1223
|
*sequence_cnt = 0;
|
|
1217
|
}
|
|
1224
|
}
|
|
1218
|
|
|
|
|
|
1219
|
}
|
|
1225
|
}
|