Newer
Older
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void printData( unsigned int * data ) {
printf( "Header : %8X%8X%8X%8X%8X%8X%8X%8X\n" , data[7], data[6] ,data[5] ,data[4],
data[3], data[2], data[1], data[0] ) ;
int eventSize = ( ( data[ 0 ] & 0xFF ) ) - 1 ; // minus header
for ( int i = 1 ; i < eventSize ; ++i ) {
printf( "data %3d: %8X%8X%8X%8X%8X%8X%8X%8X\n" , i-1 , data[ 8*i+7 ] , data[ 8*i+6 ] , data[ 8*i+5 ] ,
data[ 8*i+4 ], data[ 8*i+3 ], data[ 8*i+2 ], data[ 8*i+1 ], data[ 8*i ] ) ;
}
printf( "Trailer : %8X%8X%8X%8X%8X%8X%8X%8X\n" , data[8*eventSize+7], data[8*eventSize+6] ,data[8*eventSize+5] ,data[8*eventSize+4],
data[8*eventSize+3], data[8*eventSize+2], data[8*eventSize+1], data[8*eventSize] ) ;
}
printf( "Program to printout the first event read by DMA\n" ) ;
int res = ecs_open( 0 , 0 ) ;
if ( -1 == res ) printf("ERROR: Could not open device (BAR 0)\n") ;
else printf("SUCCESS: Device opened for ECS 0\n");
res = ecs_open( 0 , 2 ) ;
if ( -1 == res ) printf("ERROR: Could not open device (BAR 2)\n") ;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
else printf("SUCCESS: Device opened for ECS 2\n");
// DMA part
res = dma_open( 0 ) ;
if ( -1 == res ) printf("ERROR: Could not open device (DMA)\n") ;
else printf("SUCCESS: Device opened for DMA\n");
//
unsigned int initial_value = pcie40_getNbWordInEvent( 0 ) ;
if ( initial_value == 0 ) pcie40_setNbWordInEvent( 0 , 0xFF ) ;
pcie40_dmaReset( 0 ) ;
pcie40_dmaStop( 0 ) ;
//pcie40_enableGenerator( 0 ) ;
//pcie40_useDataFromGenerator( 0 ) ;
pcie40_disableGenerator( 0 ) ;
pcie40_useDataFromFibers( 0 ) ;
// pcie40_setGeneratorTriggerFrequency( 0 , 30 ) ;
//pcie40_setNbEvents( 0 , 1 ) ;
// start DAQ
pcie40_resetSPages( 0 ) ;
pcie40_dmaSetReadout( 0 ) ;
pcie40_setSizeFromHeader( 0 ) ;
//pcie40_setNbWordInEvent( 0 , 5 ) ;
pcie40_setBusyLevel( 0 , 0x502 ) ;
dma_initialize( 0 ) ;
std::cin.ignore() ;
// start DMA and wait for data
int rv = 0 ;
while ( rv == 0 ) {
rv = pcie40_dmaStart( 0 ) ;
printf( "Number of super page received: %d\n" , rv ) ;
unsigned int * data = pcie40_getSuperPagePointer( 0 , 0 , 0 ) ;
printData( data ) ;
data = pcie40_getSuperPagePointer( 0 , 0 , 1 ) ;
printData( data ) ;
//data = pcie40_getSuperPagePointer( 0 , 1 , 0 ) ;
//printData( data ) ;
//data = pcie40_getSuperPagePointer( 0 , 1 , 1 ) ;
//printData( data ) ;
// rv = pcie40_dmaStart( 0 ) ;
// printf( "Number of super page received: %d\n" , rv ) ;
// data = pcie40_getSuperPagePointer( 0 , 1 , 1 ) ;
// printData( data ) ;
//