##// END OF EJS Templates
rev 1.0.0.4
paul -
r110:321cef60967c VHDLib206
parent child
Show More
@@ -1,6 +1,6
1 1 #############################################################################
2 2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Thu Mar 27 13:16:57 2014
3 # Generated by qmake (2.01a) (Qt 4.8.5) on: Thu Mar 27 14:01:46 2014
4 4 # Project: fsw-qt.pro
5 5 # Template: app
6 6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -10,7 +10,7
10 10
11 11 CC = sparc-rtems-gcc
12 12 CXX = sparc-rtems-g++
13 DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=3 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=4 -DVHDL_DEV -DPRINT_MESSAGES_ON_CONSOLE
14 14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters
@@ -1,7 +1,7
1 1 TEMPLATE = app
2 2 # CONFIG += console v8 sim
3 3 # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** vhdl_dev *** debug_tch
4 CONFIG += console verbose
4 CONFIG += console verbose vhdl_dev
5 5 CONFIG -= qt
6 6
7 7 include(./sparc.pri)
@@ -11,7 +11,7 SWVERSION=-1-0
11 11 DEFINES += SW_VERSION_N1=1 # major
12 12 DEFINES += SW_VERSION_N2=0 # minor
13 13 DEFINES += SW_VERSION_N3=0 # patch
14 DEFINES += SW_VERSION_N4=3 # internal
14 DEFINES += SW_VERSION_N4=4 # internal
15 15
16 16 contains( CONFIG, debug_tch ) {
17 17 DEFINES += DEBUG_TCH
@@ -1,6 +1,6
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.0.1, 2014-03-27T07:16:29. -->
3 <!-- Written by QtCreator 3.0.1, 2014-03-28T07:03:40. -->
4 4 <qtcreator>
5 5 <data>
6 6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -32,9 +32,8 rtems_task hous_task( rtems_task_argumen
32 32 rtems_task dumb_task( rtems_task_argument unused );
33 33
34 34 void init_housekeeping_parameters( void );
35
36 35 void increment_seq_counter( unsigned char *packet_sequence_control);
37
38 36 void getTime( unsigned char *time);
37 void send_dumb_hk( void );
39 38
40 39 #endif // FSW_MISC_H_INCLUDED
@@ -92,14 +92,17 rtems_task Init( rtems_task_argument ign
92 92 PRINTF("*************************\n")
93 93 PRINTF("\n\n")
94 94
95 reset_wfp_burst_enable(); // stop the waveform picker if it was running
96 init_waveform_rings(); // initialize the waveform rings
97 init_sm_rings();
98
99 95 init_parameter_dump();
100 96 init_local_mode_parameters();
101 97 init_housekeeping_parameters();
102 98
99 init_waveform_rings(); // initialize the waveform rings
100 init_sm_rings(); // initialize spectral matrices rings
101
102 reset_wfp_burst_enable();
103 reset_wfp_status();
104 set_wfp_data_shaping();
105
103 106 updateLFRCurrentMode();
104 107
105 108 BOOT_PRINTF1("in INIT *** lfrCurrentMode is %d\n", lfrCurrentMode)
@@ -161,7 +164,7 rtems_task Init( rtems_task_argument ign
161 164 PRINTF1("in INIT *** ERR start_recv_send_tasks code %d\n", status )
162 165 }
163 166
164 // suspend science tasks. they will be restarted later depending on the mode
167 // suspend science tasks, they will be restarted later depending on the mode
165 168 status = suspend_science_tasks(); // suspend science tasks (not done in stop_current_mode if current mode = STANDBY)
166 169 if (status != RTEMS_SUCCESSFUL)
167 170 {
@@ -196,6 +199,8 rtems_task Init( rtems_task_argument ign
196 199
197 200 BOOT_PRINTF("delete INIT\n")
198 201
202 send_dumb_hk();
203
199 204 status = rtems_task_delete(RTEMS_SELF);
200 205
201 206 }
@@ -221,7 +221,7 rtems_task hous_task(rtems_task_argument
221 221 spacewire_update_statistics();
222 222
223 223 // SEND PACKET
224 status = rtems_message_queue_send( queue_id, &housekeeping_packet,
224 status = rtems_message_queue_urgent( queue_id, &housekeeping_packet,
225 225 PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES);
226 226 if (status != RTEMS_SUCCESSFUL) {
227 227 PRINTF1("in HOUS *** ERR send: %d\n", status)
@@ -363,3 +363,52 void getTime( unsigned char *time)
363 363 time[5] = (unsigned char) (time_management_regs->fine_time);
364 364 }
365 365
366 void send_dumb_hk( void )
367 {
368 Packet_TM_LFR_HK_t dummy_hk_packet;
369 unsigned char *parameters;
370 unsigned int i;
371 rtems_id queue_id;
372
373 dummy_hk_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
374 dummy_hk_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
375 dummy_hk_packet.reserved = DEFAULT_RESERVED;
376 dummy_hk_packet.userApplication = CCSDS_USER_APP;
377 dummy_hk_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_HK >> 8);
378 dummy_hk_packet.packetID[1] = (unsigned char) (TM_PACKET_ID_HK);
379 dummy_hk_packet.packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE;
380 dummy_hk_packet.packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT;
381 dummy_hk_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_HK >> 8);
382 dummy_hk_packet.packetLength[1] = (unsigned char) (PACKET_LENGTH_HK );
383 dummy_hk_packet.spare1_pusVersion_spare2 = DEFAULT_SPARE1_PUSVERSION_SPARE2;
384 dummy_hk_packet.serviceType = TM_TYPE_HK;
385 dummy_hk_packet.serviceSubType = TM_SUBTYPE_HK;
386 dummy_hk_packet.destinationID = TM_DESTINATION_ID_GROUND;
387 dummy_hk_packet.sid = SID_HK;
388
389 // init status word
390 dummy_hk_packet.lfr_status_word[0] = 0xff;
391 dummy_hk_packet.lfr_status_word[1] = 0xff;
392 // init software version
393 dummy_hk_packet.lfr_sw_version[0] = SW_VERSION_N1;
394 dummy_hk_packet.lfr_sw_version[1] = SW_VERSION_N2;
395 dummy_hk_packet.lfr_sw_version[2] = SW_VERSION_N3;
396 dummy_hk_packet.lfr_sw_version[3] = SW_VERSION_N4;
397 // init fpga version
398 parameters = (unsigned char *) (REGS_ADDR_WAVEFORM_PICKER + 0xd0);
399 dummy_hk_packet.lfr_fpga_version[0] = parameters[1]; // n1
400 dummy_hk_packet.lfr_fpga_version[1] = parameters[2]; // n2
401 dummy_hk_packet.lfr_fpga_version[2] = parameters[3]; // n3
402
403 parameters = (unsigned char *) &dummy_hk_packet.hk_lfr_cpu_load;
404
405 for (i=0; i<100; i++)
406 {
407 parameters[i] = 0xff;
408 }
409
410 get_message_queue_id_send( &queue_id );
411
412 rtems_message_queue_urgent( queue_id, &dummy_hk_packet,
413 PACKET_LENGTH_HK + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES);
414 }
@@ -164,6 +164,7 int action_enter_mode(ccsdsTelecommandPa
164 164 requestedMode = TC->dataAndCRC[1];
165 165
166 166 status = check_mode_value( requestedMode );
167
167 168 if ( status != LFR_SUCCESSFUL )
168 169 {
169 170 send_tm_lfr_tc_exe_inconsistent( TC, queue_id, BYTE_POS_CP_LFR_MODE, requestedMode );
@@ -412,11 +413,11 int stop_current_mode( void )
412 413 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
413 414 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX ); // clear spectral matrix interrupt
414 415
415 // (3) reset registers
416 // waveform picker
416 // (3) reset waveform picker registers
417 417 reset_wfp_burst_enable(); // reset burst and enable bits
418 418 reset_wfp_status(); // reset all the status bits
419 // spectral matrices
419
420 // (4) reset spectral matrices registers
420 421 set_irq_on_new_ready_matrix( 0 ); // stop the spectral matrices
421 422 set_run_matrix_spectral( 0 ); // run_matrix_spectral is set to 0
422 423 reset_extractSWF(); // reset the extractSWF flag to false
@@ -642,7 +643,7 void launch_spectral_matrix( unsigned ch
642 643 struct grgpio_regs_str *grgpio_regs = (struct grgpio_regs_str *) REGS_ADDR_GRGPIO;
643 644 grgpio_regs->io_port_direction_register =
644 645 grgpio_regs->io_port_direction_register | 0x01; // [0001 1000], 0 = output disabled, 1 = output enabled
645 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x01; // set the bit 0 to 1
646 grgpio_regs->io_port_output_register = grgpio_regs->io_port_output_register | 0x00; // set the bit 0 to 1
646 647 set_irq_on_new_ready_matrix( 1 );
647 648 LEON_Clear_interrupt( IRQ_SPECTRAL_MATRIX );
648 649 LEON_Unmask_interrupt( IRQ_SPECTRAL_MATRIX );
@@ -1013,13 +1013,13 void build_snapshot_from_ring( ring_node
1013 1013 deltaT_F2 = 262144; // (2048. / 256. / 2.) * 65536. = 262144;
1014 1014 sampleOffset_asLong = 0x00;
1015 1015
1016 // get the f0 acquisition time
1016 // (1) get the f0 acquisition time
1017 1017 build_acquisition_time( &acquisitionTimeF0_asLong, current_ring_node_f0 );
1018 1018
1019 // compute the central reference time
1019 // (2) compute the central reference time
1020 1020 centerTime_asLong = acquisitionTimeF0_asLong + deltaT_F0;
1021 1021
1022 // compute the acquisition time of the current snapshot
1022 // (3) compute the acquisition time of the current snapshot
1023 1023 switch(frequencyChannel)
1024 1024 {
1025 1025 case 1: // 1 is for F1 = 4096 Hz
@@ -1042,7 +1042,7 void build_snapshot_from_ring( ring_node
1042 1042 }
1043 1043
1044 1044 //****************************************************************************
1045 // 1) search the ring_node with the acquisition time <= acquisitionTime_asLong
1045 // (4) search the ring_node with the acquisition time <= acquisitionTime_asLong
1046 1046 for (i=0; i<nb_ring_nodes; i++)
1047 1047 {
1048 1048 PRINTF1("%d ... ", i)
@@ -1055,18 +1055,16 void build_snapshot_from_ring( ring_node
1055 1055 ring_node_to_send = ring_node_to_send->previous;
1056 1056 }
1057 1057
1058 //*************************************************
1059 // (2) once the buffer is found, build the snapshot
1060
1061 // compute the number of samples to take in the current buffer
1058 // (5) compute the number of samples to take in the current buffer
1062 1059 sampleOffset_asLong = ((acquisitionTime_asLong - bufferAcquisitionTime_asLong) * frequency_asLong ) >> 16;
1063 1060 nbSamplesPart1_asLong = NB_SAMPLES_PER_SNAPSHOT - sampleOffset_asLong;
1061 PRINTF2("sampleOffset_asLong = %lld, nbSamplesPart1_asLong = %lld\n", sampleOffset_asLong, nbSamplesPart1_asLong)
1064 1062
1065 // compute the final acquisition time
1063 // (6) compute the final acquisition time
1066 1064 acquisitionTime_asLong = bufferAcquisitionTime_asLong +
1067 1065 sampleOffset_asLong * nbTicksPerSample_asLong;
1068 1066
1069 // copy the acquisition time at the beginning of the extrated snapshot
1067 // (7) copy the acquisition time at the beginning of the extrated snapshot
1070 1068 ptr1 = (unsigned char*) &acquisitionTime_asLong;
1071 1069 ptr2 = (unsigned char*) wf_snap_extracted;
1072 1070 ptr2[0] = ptr1[ 2 + 2 ];
@@ -1157,13 +1155,13 void reset_waveform_picker_regs(void)
1157 1155 *
1158 1156 */
1159 1157
1160 // waveform_picker_regs->data_shaping = 0x01; // 0x00 *** R1 R0 SP1 SP0 BW
1161 waveform_picker_regs->run_burst_enable = 0x00; // 0x04 *** [run *** burst f2, f1, f0 *** enable f3, f2, f1, f0 ]
1158 set_wfp_data_shaping(); // 0x00 *** R1 R0 SP1 SP0 BW
1159 reset_wfp_burst_enable(); // 0x04 *** [run *** burst f2, f1, f0 *** enable f3, f2, f1, f0 ]
1162 1160 waveform_picker_regs->addr_data_f0 = current_ring_node_f0->buffer_address; // 0x08
1163 1161 waveform_picker_regs->addr_data_f1 = current_ring_node_f1->buffer_address; // 0x0c
1164 1162 waveform_picker_regs->addr_data_f2 = current_ring_node_f2->buffer_address; // 0x10
1165 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_a); // 0x14
1166 waveform_picker_regs->status = 0x00; // 0x18
1163 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3_a); // 0x14
1164 reset_wfp_status(); // 0x18
1167 1165 //
1168 1166 set_wfp_delta_snapshot(); // 0x1c
1169 1167 set_wfp_delta_f0_f0_2(); // 0x20, 0x24
General Comments 0
You need to be logged in to leave comments. Login now