@@ -231,6 +231,9 rtems_task hous_task(rtems_task_argument | |||||
231 | rtems_status_code spare_status; |
|
231 | rtems_status_code spare_status; | |
232 | rtems_id queue_id; |
|
232 | rtems_id queue_id; | |
233 | rtems_rate_monotonic_period_status period_status; |
|
233 | rtems_rate_monotonic_period_status period_status; | |
|
234 | bool isSynchronized; | |||
|
235 | ||||
|
236 | isSynchronized = false; | |||
234 |
|
237 | |||
235 | status = get_message_queue_id_send( &queue_id ); |
|
238 | status = get_message_queue_id_send( &queue_id ); | |
236 | if (status != RTEMS_SUCCESSFUL) |
|
239 | if (status != RTEMS_SUCCESSFUL) | |
@@ -259,11 +262,12 rtems_task hous_task(rtems_task_argument | |||||
259 | status = rtems_rate_monotonic_period( HK_id, SY_LFR_TIME_SYN_TIMEOUT_in_ticks ); |
|
262 | status = rtems_rate_monotonic_period( HK_id, SY_LFR_TIME_SYN_TIMEOUT_in_ticks ); | |
260 | status = rtems_rate_monotonic_get_status( HK_id, &period_status ); |
|
263 | status = rtems_rate_monotonic_get_status( HK_id, &period_status ); | |
261 | DEBUG_PRINTF1("startup HK, HK_id status = %d\n", period_status.state) |
|
264 | DEBUG_PRINTF1("startup HK, HK_id status = %d\n", period_status.state) | |
262 |
while(period_status.state != RATE_MONOTONIC_EXPIRED |
|
265 | while( (period_status.state != RATE_MONOTONIC_EXPIRED) | |
|
266 | && (isSynchronized == false) ) // after SY_LFR_TIME_SYN_TIMEOUT ms, starts HK anyway | |||
263 | { |
|
267 | { | |
264 | if ((time_management_regs->coarse_time & VAL_LFR_SYNCHRONIZED) == INT32_ALL_0) // check time synchronization |
|
268 | if ((time_management_regs->coarse_time & VAL_LFR_SYNCHRONIZED) == INT32_ALL_0) // check time synchronization | |
265 | { |
|
269 | { | |
266 | break; // break if LFR is synchronized |
|
270 | isSynchronized = true; | |
267 | } |
|
271 | } | |
268 | else |
|
272 | else | |
269 | { |
|
273 | { |
@@ -508,7 +508,8 int spacewire_several_connect_attemps( v | |||||
508 | rtems_status_code status; |
|
508 | rtems_status_code status; | |
509 | int i; |
|
509 | int i; | |
510 |
|
510 | |||
511 | for ( i=0; i<SY_LFR_DPU_CONNECT_ATTEMPT; i++ ) |
|
511 | i = 0; | |
|
512 | while (i < SY_LFR_DPU_CONNECT_ATTEMPT) | |||
512 | { |
|
513 | { | |
513 | PRINTF1("in spacewire_reset_link *** link recovery, try %d\n", i); |
|
514 | PRINTF1("in spacewire_reset_link *** link recovery, try %d\n", i); | |
514 |
|
515 | |||
@@ -520,12 +521,12 int spacewire_several_connect_attemps( v | |||||
520 |
|
521 | |||
521 | if ( status_spw != RTEMS_SUCCESSFUL ) |
|
522 | if ( status_spw != RTEMS_SUCCESSFUL ) | |
522 | { |
|
523 | { | |
523 | PRINTF1("in spacewire_reset_link *** ERR spacewire_start_link code %d\n", status_spw) |
|
524 | i = i + 1; | |
|
525 | PRINTF1("in spacewire_reset_link *** ERR spacewire_start_link code %d\n", status_spw); | |||
524 | } |
|
526 | } | |
525 |
|
527 | else | ||
526 | if ( status_spw == RTEMS_SUCCESSFUL) |
|
|||
527 | { |
|
528 | { | |
528 | break; |
|
529 | i = SY_LFR_DPU_CONNECT_ATTEMPT; | |
529 | } |
|
530 | } | |
530 | } |
|
531 | } | |
531 |
|
532 |
@@ -116,6 +116,8 void spectral_matrices_isr_f0( int statu | |||||
116 | } |
|
116 | } | |
117 | spectral_matrix_regs->status = BIT_READY_1; // [0000 0010] |
|
117 | spectral_matrix_regs->status = BIT_READY_1; // [0000 0010] | |
118 | break; |
|
118 | break; | |
|
119 | default: | |||
|
120 | break; | |||
119 | } |
|
121 | } | |
120 | } |
|
122 | } | |
121 |
|
123 | |||
@@ -174,6 +176,8 void spectral_matrices_isr_f1( int statu | |||||
174 | } |
|
176 | } | |
175 | spectral_matrix_regs->status = BIT_STATUS_F1_1; // [1000 0000] |
|
177 | spectral_matrix_regs->status = BIT_STATUS_F1_1; // [1000 0000] | |
176 | break; |
|
178 | break; | |
|
179 | default: | |||
|
180 | break; | |||
177 | } |
|
181 | } | |
178 | } |
|
182 | } | |
179 |
|
183 | |||
@@ -217,6 +221,8 void spectral_matrices_isr_f2( int statu | |||||
217 | status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); |
|
221 | status_code = rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_3 ); | |
218 | } |
|
222 | } | |
219 | break; |
|
223 | break; | |
|
224 | default: | |||
|
225 | break; | |||
220 | } |
|
226 | } | |
221 | } |
|
227 | } | |
222 |
|
228 |
@@ -585,7 +585,7 rtems_task swbd_task(rtems_task_argument | |||||
585 | if (event_out == RTEMS_EVENT_MODE_NORM_S1_S2) |
|
585 | if (event_out == RTEMS_EVENT_MODE_NORM_S1_S2) | |
586 | { |
|
586 | { | |
587 | acquisitionTimeF0_asLong = get_acquisition_time( (unsigned char *) &ring_node_to_send_swf_f0->coarseTime ); |
|
587 | acquisitionTimeF0_asLong = get_acquisition_time( (unsigned char *) &ring_node_to_send_swf_f0->coarseTime ); | |
588 | build_snapshot_from_ring( ring_node_to_send_swf_f1, 1, acquisitionTimeF0_asLong, |
|
588 | build_snapshot_from_ring( ring_node_to_send_swf_f1, CHANNELF1, acquisitionTimeF0_asLong, | |
589 | &ring_node_swf1_extracted, swf1_extracted ); |
|
589 | &ring_node_swf1_extracted, swf1_extracted ); | |
590 | swf1_ready = true; // the snapshot has been extracted and is ready to be sent |
|
590 | swf1_ready = true; // the snapshot has been extracted and is ready to be sent | |
591 | } |
|
591 | } | |
@@ -770,6 +770,7 void build_snapshot_from_ring( ring_node | |||||
770 | int *swf_extracted) |
|
770 | int *swf_extracted) | |
771 | { |
|
771 | { | |
772 | unsigned int i; |
|
772 | unsigned int i; | |
|
773 | unsigned int node; | |||
773 | unsigned long long int centerTime_asLong; |
|
774 | unsigned long long int centerTime_asLong; | |
774 | unsigned long long int acquisitionTime_asLong; |
|
775 | unsigned long long int acquisitionTime_asLong; | |
775 | unsigned long long int bufferAcquisitionTime_asLong; |
|
776 | unsigned long long int bufferAcquisitionTime_asLong; | |
@@ -813,24 +814,30 void build_snapshot_from_ring( ring_node | |||||
813 | break; |
|
814 | break; | |
814 | default: |
|
815 | default: | |
815 | acquisitionTime_asLong = centerTime_asLong; |
|
816 | acquisitionTime_asLong = centerTime_asLong; | |
|
817 | nb_ring_nodes = 0; | |||
816 | frequency_asLong = FREQ_F2; |
|
818 | frequency_asLong = FREQ_F2; | |
817 | nbTicksPerSample_asLong = TICKS_PER_T2; |
|
819 | nbTicksPerSample_asLong = TICKS_PER_T2; | |
818 | break; |
|
820 | break; | |
819 | } |
|
821 | } | |
820 |
|
822 | |||
821 | //**************************************************************************** |
|
823 | //***************************************************************************** | |
822 | // (4) search the ring_node with the acquisition time <= acquisitionTime_asLong |
|
824 | // (4) search the ring_node with the acquisition time <= acquisitionTime_asLong | |
823 | for (i=0; i<nb_ring_nodes; i++) |
|
825 | node = 0; | |
|
826 | while ( node < nb_ring_nodes) | |||
824 | { |
|
827 | { | |
825 |
//PRINTF1("%d ... ", |
|
828 | //PRINTF1("%d ... ", node); | |
826 |
|
|
829 | bufferAcquisitionTime_asLong = get_acquisition_time( (unsigned char *) &ring_node_to_send->coarseTime ); | |
827 | if (bufferAcquisitionTime_asLong <= acquisitionTime_asLong) |
|
830 | if (bufferAcquisitionTime_asLong <= acquisitionTime_asLong) | |
828 | { |
|
831 | { | |
829 | //PRINTF1("buffer found with acquisition time = %llx\n", bufferAcquisitionTime_asLong); |
|
832 | //PRINTF1("buffer found with acquisition time = %llx\n", bufferAcquisitionTime_asLong); | |
830 |
|
|
833 | node = nb_ring_nodes; | |
831 | } |
|
834 | } | |
|
835 | else | |||
|
836 | { | |||
|
837 | node = node + 1; | |||
832 | ring_node_to_send = ring_node_to_send->previous; |
|
838 | ring_node_to_send = ring_node_to_send->previous; | |
833 | } |
|
839 | } | |
|
840 | } | |||
834 |
|
841 | |||
835 | // (5) compute the number of samples to take in the current buffer |
|
842 | // (5) compute the number of samples to take in the current buffer | |
836 | sampleOffset_asLong = ((acquisitionTime_asLong - bufferAcquisitionTime_asLong) * frequency_asLong ) >> SHIFT_2_BYTES; |
|
843 | sampleOffset_asLong = ((acquisitionTime_asLong - bufferAcquisitionTime_asLong) * frequency_asLong ) >> SHIFT_2_BYTES; |
General Comments 0
You need to be logged in to leave comments.
Login now