@@ -0,0 +1,31 | |||||
|
1 | import time | |||
|
2 | ||||
|
3 | proxy.loadSysDriver("SpwPlugin","SpwPlugin0") | |||
|
4 | SpwPlugin0.selectBridge("STAR-Dundee Spw USB Brick") | |||
|
5 | ||||
|
6 | proxy.loadSysDriverToParent("dsu3plugin","SpwPlugin0") | |||
|
7 | proxy.loadSysDriverToParent("LFRControlPlugin","SpwPlugin0") | |||
|
8 | ||||
|
9 | availableBrickCount = SpwPlugin0.StarDundeeGetAvailableBrickCount() | |||
|
10 | print str(availableBrickCount) + " SpaceWire brick(s) found" | |||
|
11 | ||||
|
12 | SpwPlugin0.StarDundeeSelectBrick(1) | |||
|
13 | SpwPlugin0.StarDundeeSetBrickAsARouter(1) | |||
|
14 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) | |||
|
15 | SpwPlugin0.connectBridge() | |||
|
16 | ||||
|
17 | #SpwPlugin0.TCPServerSetIP("127.0.0.1") | |||
|
18 | SpwPlugin0.TCPServerConnect() | |||
|
19 | ||||
|
20 | # OPEN SPACEWIRE SERVER | |||
|
21 | #LFRControlPlugin0.SetSpwServerIP(129,104,27,164) | |||
|
22 | LFRControlPlugin0.TCPServerConnect() | |||
|
23 | ||||
|
24 | # OPEN TM ECHO BRIDGE SERVER | |||
|
25 | LFRControlPlugin0.TMEchoBridgeOpenPort() | |||
|
26 | ||||
|
27 | # START SENDING TIMECODES AT 1 Hz | |||
|
28 | SpwPlugin0.StarDundeeStartTimecodes( 1 ) | |||
|
29 | ||||
|
30 | # it is possible to change the time code frequency | |||
|
31 | #RMAPPlugin0.changeTimecodeFrequency(2) |
@@ -0,0 +1,14 | |||||
|
1 | # LOAD FSW USING LINK 1 | |||
|
2 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) | |||
|
3 | ||||
|
4 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") | |||
|
5 | #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |||
|
6 | dsu3plugin0.loadFile() | |||
|
7 | ||||
|
8 | dsu3plugin0.run() | |||
|
9 | ||||
|
10 | # START SENDING TIMECODES AT 1 Hz | |||
|
11 | #SpwPlugin0.StarDundeeStartTimecodes( 1 ) | |||
|
12 | ||||
|
13 | # it is possible to change the time code frequency | |||
|
14 | #RMAPPlugin0.changeTimecodeFrequency(2) |
@@ -0,0 +1,13 | |||||
|
1 | # LOAD FSW USING LINK 1 | |||
|
2 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) | |||
|
3 | ||||
|
4 | dsu3plugin0.openFile("/opt/LFR/LFR-FSW/3.0.0.10/fsw") | |||
|
5 | dsu3plugin0.loadFile() | |||
|
6 | ||||
|
7 | dsu3plugin0.run() | |||
|
8 | ||||
|
9 | # START SENDING TIMECODES AT 1 Hz | |||
|
10 | SpwPlugin0.StarDundeeStartTimecodes( 1 ) | |||
|
11 | ||||
|
12 | # it is possible to change the time code frequency | |||
|
13 | #RMAPPlugin0.changeTimecodeFrequency(2) |
@@ -1,2 +1,2 | |||||
1 | 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters |
|
1 | 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters | |
2 | 1ffa3d630b9ced4a87a362dafb10d9838e9cc0d9 header/lfr_common_headers |
|
2 | 94f0f2fccbcb8030d9437ffbb69ee0eefaaea188 header/lfr_common_headers |
@@ -16,8 +16,8 | |||||
16 | #include "avf1_prc1.h" |
|
16 | #include "avf1_prc1.h" | |
17 | #include "avf2_prc2.h" |
|
17 | #include "avf2_prc2.h" | |
18 |
|
18 | |||
19 |
extern rtems_name Task_name[ |
|
19 | extern rtems_name Task_name[]; /* array of task names */ | |
20 |
extern rtems_id Task_id[ |
|
20 | extern rtems_id Task_id[]; /* array of task ids */ | |
21 | extern rtems_name timecode_timer_name; |
|
21 | extern rtems_name timecode_timer_name; | |
22 | extern rtems_id timecode_timer_id; |
|
22 | extern rtems_id timecode_timer_id; | |
23 | extern unsigned char pa_bia_status_info; |
|
23 | extern unsigned char pa_bia_status_info; |
@@ -28,6 +28,8 extern void CCR_getInstructionAndDataErr | |||||
28 |
|
28 | |||
29 | rtems_name name_hk_rate_monotonic; // name of the HK rate monotonic |
|
29 | rtems_name name_hk_rate_monotonic; // name of the HK rate monotonic | |
30 | rtems_id HK_id; // id of the HK rate monotonic period |
|
30 | rtems_id HK_id; // id of the HK rate monotonic period | |
|
31 | rtems_name name_avgv_rate_monotonic; // name of the AVGV rate monotonic | |||
|
32 | rtems_id AVGV_id; // id of the AVGV rate monotonic period | |||
31 |
|
33 | |||
32 | void timer_configure( unsigned char timer, unsigned int clock_divider, |
|
34 | void timer_configure( unsigned char timer, unsigned int clock_divider, | |
33 | unsigned char interrupt_level, rtems_isr (*timer_isr)() ); |
|
35 | unsigned char interrupt_level, rtems_isr (*timer_isr)() ); | |
@@ -50,6 +52,7 void set_apbuart_scaler_reload_register( | |||||
50 | // RTEMS TASKS |
|
52 | // RTEMS TASKS | |
51 | rtems_task load_task( rtems_task_argument argument ); |
|
53 | rtems_task load_task( rtems_task_argument argument ); | |
52 | rtems_task hous_task( rtems_task_argument argument ); |
|
54 | rtems_task hous_task( rtems_task_argument argument ); | |
|
55 | rtems_task avgv_task( rtems_task_argument argument ); | |||
53 | rtems_task dumb_task( rtems_task_argument unused ); |
|
56 | rtems_task dumb_task( rtems_task_argument unused ); | |
54 |
|
57 | |||
55 | void init_housekeeping_parameters( void ); |
|
58 | void init_housekeeping_parameters( void ); |
@@ -26,7 +26,7 | |||||
26 | #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER |
|
26 | #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER | |
27 | #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER |
|
27 | #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER | |
28 |
|
28 | |||
29 | #define CONFIGURE_MAXIMUM_TASKS 20 |
|
29 | #define CONFIGURE_MAXIMUM_TASKS 21 // number of tasks concurrently active including INIT | |
30 | #define CONFIGURE_RTEMS_INIT_TASKS_TABLE |
|
30 | #define CONFIGURE_RTEMS_INIT_TASKS_TABLE | |
31 | #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) |
|
31 | #define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) | |
32 | #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 |
|
32 | #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 | |
@@ -34,7 +34,7 | |||||
34 | #define CONFIGURE_INIT_TASK_MODE (RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT) |
|
34 | #define CONFIGURE_INIT_TASK_MODE (RTEMS_DEFAULT_MODES | RTEMS_NO_PREEMPT) | |
35 | #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) |
|
35 | #define CONFIGURE_INIT_TASK_ATTRIBUTES (RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT) | |
36 | #define CONFIGURE_MAXIMUM_DRIVERS 16 |
|
36 | #define CONFIGURE_MAXIMUM_DRIVERS 16 | |
37 | #define CONFIGURE_MAXIMUM_PERIODS 5 |
|
37 | #define CONFIGURE_MAXIMUM_PERIODS 5 // [hous] [load] [avgv] | |
38 | #define CONFIGURE_MAXIMUM_TIMERS 5 // [spiq] [link] [spacewire_reset_link] |
|
38 | #define CONFIGURE_MAXIMUM_TIMERS 5 // [spiq] [link] [spacewire_reset_link] | |
39 | #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 5 |
|
39 | #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 5 | |
40 | #ifdef PRINT_STACK_REPORT |
|
40 | #ifdef PRINT_STACK_REPORT | |
@@ -143,10 +143,10 rtems_task Init( rtems_task_argument ign | |||||
143 |
|
143 | |||
144 | PRINTF("*************************\n") |
|
144 | PRINTF("*************************\n") | |
145 | PRINTF("** LFR Flight Software **\n") |
|
145 | PRINTF("** LFR Flight Software **\n") | |
146 |
PRINTF1("** %d |
|
146 | PRINTF1("** %d-", SW_VERSION_N1) | |
147 |
PRINTF1("%d |
|
147 | PRINTF1("%d-" , SW_VERSION_N2) | |
148 |
PRINTF1("%d |
|
148 | PRINTF1("%d-" , SW_VERSION_N3) | |
149 | PRINTF1("%d **\n", SW_VERSION_N4) |
|
149 | PRINTF1("%d **\n", SW_VERSION_N4) | |
150 |
|
150 | |||
151 | vhdlVersion = (unsigned char *) (REGS_ADDR_VHDL_VERSION); |
|
151 | vhdlVersion = (unsigned char *) (REGS_ADDR_VHDL_VERSION); | |
152 | PRINTF("** VHDL **\n") |
|
152 | PRINTF("** VHDL **\n") | |
@@ -342,6 +342,7 void create_names( void ) // create all | |||||
342 | */ |
|
342 | */ | |
343 |
|
343 | |||
344 | // task names |
|
344 | // task names | |
|
345 | Task_name[TASKID_AVGV] = rtems_build_name( 'A', 'V', 'G', 'V' ); | |||
345 | Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' ); |
|
346 | Task_name[TASKID_RECV] = rtems_build_name( 'R', 'E', 'C', 'V' ); | |
346 | Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' ); |
|
347 | Task_name[TASKID_ACTN] = rtems_build_name( 'A', 'C', 'T', 'N' ); | |
347 | Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' ); |
|
348 | Task_name[TASKID_SPIQ] = rtems_build_name( 'S', 'P', 'I', 'Q' ); | |
@@ -364,6 +365,7 void create_names( void ) // create all | |||||
364 |
|
365 | |||
365 | // rate monotonic period names |
|
366 | // rate monotonic period names | |
366 | name_hk_rate_monotonic = rtems_build_name( 'H', 'O', 'U', 'S' ); |
|
367 | name_hk_rate_monotonic = rtems_build_name( 'H', 'O', 'U', 'S' ); | |
|
368 | name_avgv_rate_monotonic = rtems_build_name( 'A', 'V', 'G', 'V' ); | |||
367 |
|
369 | |||
368 | misc_name[QUEUE_RECV] = rtems_build_name( 'Q', '_', 'R', 'V' ); |
|
370 | misc_name[QUEUE_RECV] = rtems_build_name( 'Q', '_', 'R', 'V' ); | |
369 | misc_name[QUEUE_SEND] = rtems_build_name( 'Q', '_', 'S', 'D' ); |
|
371 | misc_name[QUEUE_SEND] = rtems_build_name( 'Q', '_', 'S', 'D' ); | |
@@ -553,6 +555,14 int create_all_tasks( void ) // create a | |||||
553 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_HOUS] |
|
555 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_HOUS] | |
554 | ); |
|
556 | ); | |
555 | } |
|
557 | } | |
|
558 | if (status == RTEMS_SUCCESSFUL) // AVGV | |||
|
559 | { | |||
|
560 | status = rtems_task_create( | |||
|
561 | Task_name[TASKID_AVGV], TASK_PRIORITY_AVGV, RTEMS_MINIMUM_STACK_SIZE, | |||
|
562 | RTEMS_DEFAULT_MODES, | |||
|
563 | RTEMS_DEFAULT_ATTRIBUTES | RTEMS_FLOATING_POINT, &Task_id[TASKID_AVGV] | |||
|
564 | ); | |||
|
565 | } | |||
556 |
|
566 | |||
557 | return status; |
|
567 | return status; | |
558 | } |
|
568 | } | |
@@ -708,6 +718,13 int start_all_tasks( void ) // start all | |||||
708 | BOOT_PRINTF("in INIT *** Error starting TASK_HOUS\n") |
|
718 | BOOT_PRINTF("in INIT *** Error starting TASK_HOUS\n") | |
709 | } |
|
719 | } | |
710 | } |
|
720 | } | |
|
721 | if (status == RTEMS_SUCCESSFUL) // AVGV | |||
|
722 | { | |||
|
723 | status = rtems_task_start( Task_id[TASKID_AVGV], avgv_task, 1 ); | |||
|
724 | if (status!=RTEMS_SUCCESSFUL) { | |||
|
725 | BOOT_PRINTF("in INIT *** Error starting TASK_AVGV\n") | |||
|
726 | } | |||
|
727 | } | |||
711 | if (status == RTEMS_SUCCESSFUL) // DUMB |
|
728 | if (status == RTEMS_SUCCESSFUL) // DUMB | |
712 | { |
|
729 | { | |
713 | status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 ); |
|
730 | status = rtems_task_start( Task_id[TASKID_DUMB], dumb_task, 1 ); |
@@ -335,6 +335,91 rtems_task hous_task(rtems_task_argument | |||||
335 | return; |
|
335 | return; | |
336 | } |
|
336 | } | |
337 |
|
337 | |||
|
338 | rtems_task avgv_task(rtems_task_argument argument) | |||
|
339 | { | |||
|
340 | #define MOVING_AVERAGE 16 | |||
|
341 | rtems_status_code status; | |||
|
342 | unsigned int v[MOVING_AVERAGE]; | |||
|
343 | unsigned int e1[MOVING_AVERAGE]; | |||
|
344 | unsigned int e2[MOVING_AVERAGE]; | |||
|
345 | float average_v; | |||
|
346 | float average_e1; | |||
|
347 | float average_e2; | |||
|
348 | unsigned char k; | |||
|
349 | unsigned char indexOfOldValue; | |||
|
350 | ||||
|
351 | BOOT_PRINTF("in AVGV ***\n"); | |||
|
352 | ||||
|
353 | if (rtems_rate_monotonic_ident( name_avgv_rate_monotonic, &HK_id) != RTEMS_SUCCESSFUL) { | |||
|
354 | status = rtems_rate_monotonic_create( name_avgv_rate_monotonic, &AVGV_id ); | |||
|
355 | if( status != RTEMS_SUCCESSFUL ) { | |||
|
356 | PRINTF1( "rtems_rate_monotonic_create failed with status of %d\n", status ); | |||
|
357 | } | |||
|
358 | } | |||
|
359 | ||||
|
360 | status = rtems_rate_monotonic_cancel(AVGV_id); | |||
|
361 | if( status != RTEMS_SUCCESSFUL ) { | |||
|
362 | PRINTF1( "ERR *** in AVGV *** rtems_rate_monotonic_cancel(AVGV_id) ***code: %d\n", status ); | |||
|
363 | } | |||
|
364 | else { | |||
|
365 | DEBUG_PRINTF("OK *** in AVGV *** rtems_rate_monotonic_cancel(AVGV_id)\n"); | |||
|
366 | } | |||
|
367 | ||||
|
368 | // initialize values | |||
|
369 | k = 0; | |||
|
370 | indexOfOldValue = MOVING_AVERAGE - 1; | |||
|
371 | for (k = 0; k < MOVING_AVERAGE; k++) | |||
|
372 | { | |||
|
373 | v[k] = 0; | |||
|
374 | e1[k] = 0; | |||
|
375 | e2[k] = 0; | |||
|
376 | average_v = 0.; | |||
|
377 | average_e1 = 0.; | |||
|
378 | average_e2 = 0.; | |||
|
379 | } | |||
|
380 | ||||
|
381 | k = 0; | |||
|
382 | ||||
|
383 | while(1){ // launch the rate monotonic task | |||
|
384 | status = rtems_rate_monotonic_period( AVGV_id, AVGV_PERIOD ); | |||
|
385 | if ( status != RTEMS_SUCCESSFUL ) { | |||
|
386 | PRINTF1( "in AVGV *** ERR period: %d\n", status); | |||
|
387 | } | |||
|
388 | else { | |||
|
389 | // store new value in buffer | |||
|
390 | v[k] = waveform_picker_regs->v; | |||
|
391 | e1[k] = waveform_picker_regs->e1; | |||
|
392 | e2[k] = waveform_picker_regs->e2; | |||
|
393 | if (k == (MOVING_AVERAGE - 1)) | |||
|
394 | { | |||
|
395 | indexOfOldValue = 0; | |||
|
396 | } | |||
|
397 | else | |||
|
398 | { | |||
|
399 | indexOfOldValue = k + 1; | |||
|
400 | } | |||
|
401 | average_v = average_v + v[k] - v[indexOfOldValue]; | |||
|
402 | average_e1 = average_e1 + e1[k] - e1[indexOfOldValue]; | |||
|
403 | average_e2 = average_e2 + e2[k] - e2[indexOfOldValue]; | |||
|
404 | } | |||
|
405 | if (k == (MOVING_AVERAGE-1)) | |||
|
406 | { | |||
|
407 | k = 0; | |||
|
408 | printf("tick\n"); | |||
|
409 | } | |||
|
410 | else | |||
|
411 | { | |||
|
412 | k++; | |||
|
413 | } | |||
|
414 | } | |||
|
415 | ||||
|
416 | PRINTF("in AVGV *** deleting task\n") | |||
|
417 | ||||
|
418 | status = rtems_task_delete( RTEMS_SELF ); // should not return | |||
|
419 | ||||
|
420 | return; | |||
|
421 | } | |||
|
422 | ||||
338 | rtems_task dumb_task( rtems_task_argument unused ) |
|
423 | rtems_task dumb_task( rtems_task_argument unused ) | |
339 | { |
|
424 | { | |
340 | /** This RTEMS taks is used to print messages without affecting the general behaviour of the software. |
|
425 | /** This RTEMS taks is used to print messages without affecting the general behaviour of the software. |
General Comments 0
You need to be logged in to leave comments.
Login now