@@ -1,2 +1,2 | |||||
1 | 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters |
|
1 | 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters | |
2 | db74b38fe91cd826fa49fa4eb6f93d626637ceb9 header/lfr_common_headers |
|
2 | 1b9238c8848953d545d6ff9c9b8b15d19a597fb6 header/lfr_common_headers |
@@ -137,6 +137,7 rtems_task hous_task( rtems_task_argumen | |||||
137 | rtems_task avgv_task( rtems_task_argument argument ); |
|
137 | rtems_task avgv_task( rtems_task_argument argument ); | |
138 | rtems_task dumb_task( rtems_task_argument unused ); |
|
138 | rtems_task dumb_task( rtems_task_argument unused ); | |
139 | rtems_task scrubbing_task( rtems_task_argument unused ); |
|
139 | rtems_task scrubbing_task( rtems_task_argument unused ); | |
|
140 | rtems_task calibration_sweep_task( rtems_task_argument unused ); | |||
140 |
|
141 | |||
141 | void init_housekeeping_parameters( void ); |
|
142 | void init_housekeeping_parameters( void ); | |
142 | void increment_seq_counter(unsigned short *packetSequenceControl); |
|
143 | void increment_seq_counter(unsigned short *packetSequenceControl); |
@@ -37,6 +37,8 | |||||
37 | #define CAL_NB_PTS 256 |
|
37 | #define CAL_NB_PTS 256 | |
38 | #define CAL_DATA_MASK 0xfff |
|
38 | #define CAL_DATA_MASK 0xfff | |
39 | #define CAL_F_DIVISOR 38 // 25 MHz => 160 256 (39 - 1) |
|
39 | #define CAL_F_DIVISOR 38 // 25 MHz => 160 256 (39 - 1) | |
|
40 | #define CAL_F_DIVISOR_MIN 38 | |||
|
41 | #define CAL_F_DIVISOR_MAX (38*2*2*2*2) | |||
40 | // INTERLEAVED MODE |
|
42 | // INTERLEAVED MODE | |
41 | #define CAL_FS_INTER 240384.615 |
|
43 | #define CAL_FS_INTER 240384.615 | |
42 | #define CAL_NB_PTS_INTER 384 |
|
44 | #define CAL_NB_PTS_INTER 384 |
@@ -27,7 +27,7 | |||||
27 | #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER |
|
27 | #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER | |
28 | #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER |
|
28 | #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER | |
29 |
|
29 | |||
30 |
#define CONFIGURE_MAXIMUM_TASKS 2 |
|
30 | #define CONFIGURE_MAXIMUM_TASKS 23 // number of tasks concurrently active including INIT | |
31 | #define CONFIGURE_RTEMS_INIT_TASKS_TABLE |
|
31 | #define CONFIGURE_RTEMS_INIT_TASKS_TABLE | |
32 | #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) |
|
32 | #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) | |
33 | #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 |
|
33 | #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 | |
@@ -378,6 +378,7 void create_names( void ) // create all | |||||
378 | Task_name[TASKID_AVF2] = rtems_build_name( 'A', 'V', 'F', '2' ); |
|
378 | Task_name[TASKID_AVF2] = rtems_build_name( 'A', 'V', 'F', '2' ); | |
379 | Task_name[TASKID_PRC2] = rtems_build_name( 'P', 'R', 'C', '2' ); |
|
379 | Task_name[TASKID_PRC2] = rtems_build_name( 'P', 'R', 'C', '2' ); | |
380 | Task_name[TASKID_SCRB] = rtems_build_name( 'S', 'C', 'R', 'B' ); |
|
380 | Task_name[TASKID_SCRB] = rtems_build_name( 'S', 'C', 'R', 'B' ); | |
|
381 | Task_name[TASKID_CALI] = rtems_build_name( 'C', 'A', 'L', 'I' ); | |||
381 |
|
382 | |||
382 | // rate monotonic period names |
|
383 | // rate monotonic period names | |
383 | name_hk_rate_monotonic = rtems_build_name( 'H', 'O', 'U', 'S' ); |
|
384 | name_hk_rate_monotonic = rtems_build_name( 'H', 'O', 'U', 'S' ); | |
@@ -587,6 +588,14 int create_all_tasks( void ) // create a | |||||
587 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVGV] |
|
588 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVGV] | |
588 | ); |
|
589 | ); | |
589 | } |
|
590 | } | |
|
591 | if (status == RTEMS_SUCCESSFUL) // CALI | |||
|
592 | { | |||
|
593 | status = rtems_task_create( | |||
|
594 | Task_name[TASKID_CALI], TASK_PRIORITY_CALI, RTEMS_MINIMUM_STACK_SIZE, | |||
|
595 | RTEMS_DEFAULT_MODES, | |||
|
596 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_CALI] | |||
|
597 | ); | |||
|
598 | } | |||
590 |
|
599 | |||
591 | return status; |
|
600 | return status; | |
592 | } |
|
601 | } | |
@@ -770,6 +779,13 int start_all_tasks( void ) // start all | |||||
770 | BOOT_PRINTF("in INIT *** Error starting TASK_LOAD\n") |
|
779 | BOOT_PRINTF("in INIT *** Error starting TASK_LOAD\n") | |
771 | } |
|
780 | } | |
772 | } |
|
781 | } | |
|
782 | if (status == RTEMS_SUCCESSFUL) // CALI | |||
|
783 | { | |||
|
784 | status = rtems_task_start( Task_id[TASKID_CALI], calibration_sweep_task, 1 ); | |||
|
785 | if (status!=RTEMS_SUCCESSFUL) { | |||
|
786 | BOOT_PRINTF("in INIT *** Error starting TASK_LOAD\n") | |||
|
787 | } | |||
|
788 | } | |||
773 |
|
789 | |||
774 | return status; |
|
790 | return status; | |
775 | } |
|
791 | } |
@@ -523,7 +523,7 rtems_task dumb_task( rtems_task_argumen | |||||
523 |
|
523 | |||
524 | rtems_task scrubbing_task( rtems_task_argument unused ) |
|
524 | rtems_task scrubbing_task( rtems_task_argument unused ) | |
525 | { |
|
525 | { | |
526 | /** This RTEMS taks is to avoid entering IDLE task and also scrub memory to increase scubbing frequency. |
|
526 | /** This RTEMS taks is used to avoid entering IDLE task and also scrub memory to increase scubbing frequency. | |
527 | * |
|
527 | * | |
528 | * @param unused is the starting argument of the RTEMS task |
|
528 | * @param unused is the starting argument of the RTEMS task | |
529 | * |
|
529 | * | |
@@ -542,6 +542,44 rtems_task scrubbing_task( rtems_task_ar | |||||
542 | } |
|
542 | } | |
543 | } |
|
543 | } | |
544 |
|
544 | |||
|
545 | rtems_task calibration_sweep_task( rtems_task_argument unused ) | |||
|
546 | { | |||
|
547 | /** This RTEMS taks is used to change calibration signal smapling frequency between snapshots. | |||
|
548 | * | |||
|
549 | * @param unused is the starting argument of the RTEMS task | |||
|
550 | * | |||
|
551 | * If calibration is enabled, this task will divide by two the calibration signal smapling frequency between snapshots. | |||
|
552 | * When minimum sampling frequency is reach it will jump to maximum sampling frequency to loop indefinitely. | |||
|
553 | * | |||
|
554 | */ | |||
|
555 | rtems_event_set event_out; | |||
|
556 | BOOT_PRINTF("in calibration sweep *** \n"); | |||
|
557 | rtems_interval ticks_per_seconds = rtems_clock_get_ticks_per_second(); | |||
|
558 | while(1){ | |||
|
559 | // Waiting for next F0 snapshot | |||
|
560 | rtems_event_receive(RTEMS_EVENT_CAL_SWEEP_WAKE, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &event_out); | |||
|
561 | if(time_management_regs->calDACCtrl & BIT_CAL_ENABLE) | |||
|
562 | { | |||
|
563 | unsigned int delta_snapshot; | |||
|
564 | delta_snapshot = (parameter_dump_packet.sy_lfr_n_swf_p[0] * CONST_256) | |||
|
565 | + parameter_dump_packet.sy_lfr_n_swf_p[1]; | |||
|
566 | // We are woken almost in the center of a snapshot -> let's wait for sy_lfr_n_swf_p / 2 | |||
|
567 | rtems_task_wake_after( ticks_per_seconds * delta_snapshot / 2); | |||
|
568 | if(time_management_regs->calDivisor >= CAL_F_DIVISOR_MAX){ | |||
|
569 | time_management_regs->calDivisor = CAL_F_DIVISOR_MIN; | |||
|
570 | } | |||
|
571 | else{ | |||
|
572 | time_management_regs->calDivisor *= 2; | |||
|
573 | } | |||
|
574 | } | |||
|
575 | ||||
|
576 | ||||
|
577 | ||||
|
578 | } | |||
|
579 | ||||
|
580 | } | |||
|
581 | ||||
|
582 | ||||
545 | //***************************** |
|
583 | //***************************** | |
546 | // init housekeeping parameters |
|
584 | // init housekeeping parameters | |
547 |
|
585 |
@@ -204,6 +204,7 inline void waveform_isr_normal_sbm1_sbm | |||||
204 | } |
|
204 | } | |
205 | // send an event to the WFRM task for resynchro activities |
|
205 | // send an event to the WFRM task for resynchro activities | |
206 | status = rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_SWF_RESYNCH ); |
|
206 | status = rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_SWF_RESYNCH ); | |
|
207 | status = rtems_event_send( Task_id[TASKID_CALI], RTEMS_EVENT_CAL_SWEEP_WAKE ); | |||
207 | } |
|
208 | } | |
208 |
|
209 | |||
209 | //*** |
|
210 | //*** |
General Comments 0
You need to be logged in to leave comments.
Login now