# HG changeset patch # User paul # Date 2013-11-14 10:58:23 # Node ID 33209c6bcdbaae4a13b30589c0d67ee589edd2f9 # Parent 890d9198a9aa65c5e5ba5f44fdedf20d7ece3938 Modifications to the interruption handler waveforms_isr diff --git a/FSW-qt/Makefile b/FSW-qt/Makefile --- a/FSW-qt/Makefile +++ b/FSW-qt/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: bin/fsw -# Generated by qmake (2.01a) (Qt 4.8.5) on: Wed Nov 13 13:54:37 2013 +# Generated by qmake (2.01a) (Qt 4.8.5) on: Thu Nov 14 09:47:53 2013 # Project: fsw-qt.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro @@ -10,7 +10,7 @@ CC = sparc-rtems-gcc CXX = sparc-rtems-g++ -DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=22 -DPRINT_MESSAGES_ON_CONSOLE +DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=22 -DPRINT_MESSAGES_ON_CONSOLE -DPRINT_TASK_STATISTICS CFLAGS = -pipe -O3 -Wall $(DEFINES) CXXFLAGS = -pipe -O3 -Wall $(DEFINES) INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header diff --git a/FSW-qt/fsw-qt.pro b/FSW-qt/fsw-qt.pro --- a/FSW-qt/fsw-qt.pro +++ b/FSW-qt/fsw-qt.pro @@ -1,7 +1,7 @@ TEMPLATE = app # CONFIG += console v8 sim # CONFIG options = verbose *** boot_messages *** debug_messages *** cpu_usage_report *** stack_report *** gsa -CONFIG += console verbose +CONFIG += console verbose cpu_usage_report CONFIG -= qt include(./sparc.pri) diff --git a/FSW-qt/fsw-qt.pro.user b/FSW-qt/fsw-qt.pro.user --- a/FSW-qt/fsw-qt.pro.user +++ b/FSW-qt/fsw-qt.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/src/wf_handler.c b/src/wf_handler.c --- a/src/wf_handler.c +++ b/src/wf_handler.c @@ -22,9 +22,12 @@ Header_TM_LFR_SCIENCE_CWF_t headerCWF_F3 unsigned char doubleSendCWF1 = 0; unsigned char doubleSendCWF2 = 0; +unsigned char fullRecord; rtems_isr waveforms_isr( rtems_vector_number vector ) { + unsigned int statusReg; + /** This is the interrupt sub routine called by the waveform picker core. * * This ISR launch different actions depending mainly on two pieces of information: @@ -33,7 +36,6 @@ rtems_isr waveforms_isr( rtems_vector_nu * */ - rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff00f; // clear new_err and full_err #ifdef GSA @@ -71,17 +73,22 @@ rtems_isr waveforms_isr( rtems_vector_nu #ifdef GSA PRINTF("in waveform_isr *** unexpected waveform picker interruption\n") #else - if ( (new_waveform_picker_regs->run_burst_enable & 0x7) == 0x0 ){ // if no channel is enable - rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); + statusReg = new_waveform_picker_regs->status; + fullRecord = fullRecord | ( statusReg & 0x7 ); +// if ( (new_waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full +// if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) { +// rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); +// } +// new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff888; +// } + if ( fullRecord == 0x7 ){ // f2 f1 and f0 are full + if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) { + rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); + } + fullRecord = 0x00; } - else { - if ( (new_waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full - if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) { - rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ); - } - new_waveform_picker_regs->status = new_waveform_picker_regs->status & 0xfffff888; - } - } + new_waveform_picker_regs->status = ( new_waveform_picker_regs->status & (~statusReg) ) + | ( new_waveform_picker_regs->status & 0xfffffff8 ); #endif break; @@ -462,23 +469,41 @@ void init_waveforms( void ) for (i=0; i< NB_SAMPLES_PER_SNAPSHOT; i++) { +// //*** +// // F0 +// wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; // +// wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; // +// wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; // + +// //*** +// // F1 +// wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111; +// wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333; +// wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; + +// //*** +// // F2 +// wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333; +// wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; +// wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; + //*** // F0 - wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x88887777; // - wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; // - wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x44443333; // + wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x0; // + wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x0; // + wf_snap_f0[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x0; // //*** // F1 - wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x22221111; - wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x44443333; - wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; + wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x0; + wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x0; + wf_snap_f1[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x0; //*** // F2 - wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x44443333; - wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x22221111; - wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0xaaaa0000; + wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 0 + TIME_OFFSET ] = 0x0; + wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 1 + TIME_OFFSET ] = 0x0; + wf_snap_f2[ (i* NB_WORDS_SWF_BLK) + 2 + TIME_OFFSET ] = 0x0; //*** // F3 @@ -723,7 +748,7 @@ int send_waveform_SWF( volatile int *wav for (i=0; i<7; i++) // send waveform { - spw_ioctl_send_SWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) ]; + spw_ioctl_send_SWF.data = (char*) &waveform[ (i * 340 * NB_WORDS_SWF_BLK) + TIME_OFFSET ]; spw_ioctl_send_SWF.hdr = (char*) &headerSWF[ i ]; // BUILD THE DATA if (i==6) { @@ -1089,10 +1114,10 @@ void reset_new_waveform_picker_regs() // new_waveform_picker_regs->delta_snapshot = 0x12800; // 0x1c 296 * 256 = 75776 new_waveform_picker_regs->delta_snapshot = 0x1000; // 0x1c 16 * 256 = 4096 new_waveform_picker_regs->delta_f0 = 0x3f5; // 0x20 *** 1013 - new_waveform_picker_regs->delta_f0_2 = 0x7; // 0x24 *** 7 + new_waveform_picker_regs->delta_f0_2 = 0x7; // 0x24 *** 7 [7 bits] new_waveform_picker_regs->delta_f1 = 0x3c0; // 0x28 *** 960 // new_waveform_picker_regs->delta_f2 = 0x12200; // 0x2c *** 74240 - new_waveform_picker_regs->delta_f2 = 0xc00; // 0x2c *** 12 * 256 = 2048 + new_waveform_picker_regs->delta_f2 = 0xc00; // 0x2c *** 12 * 256 = 3072 new_waveform_picker_regs->nb_data_by_buffer = 0x7ff; // 0x30 *** 2048 -1 new_waveform_picker_regs->snapshot_param = 0x800; // 0x34 *** 2048 new_waveform_picker_regs->start_date = 0x00; // 0x38