/* ========================================================================= NAME: resetFIFO ========================================================================= PURPOSE: Reset FIFO functions. INPUT: None. OUTPUT: None. RETURN VALUE: None. COMMENT: AUTHOR: Robert L. Thrift, 2004 Code borrowed from Phil Hornung's rsStart.c ========================================================================= */ void resetFIFO(void) { FPGA_PTR(RF_FIFOControl); /* Ptrs to FPGA registers (rf.h) */ FPGA_PTR(RF_FIFOOutputSelect); FPGA_PTR(RF_InterruptClear); FPGA_PTR(RF_InterruptEnable); FPGA_PTR(RF_ClearCumulativeDuration); /* ------ Remove following line when FIFO reset is wired up ------- */ resetFPGA(); /* Hopefully this will become unnecessary */ *pRF_FIFOControl = 0; /* Trigger FIFO reset */ *pRF_FIFOControl = FIFO_RESET; *pRF_FIFOOutputSelect = 0; /* Select hardware output */ *pRF_FIFOOutputSelect = 1; *pRF_InterruptClear = 0; /* Clear interrupt status bits */ *pRF_InterruptClear = 0x1ff; *pRF_InterruptEnable = 0; /* Enable FIFO interrupts */ *pRF_InterruptEnable = 0x1f; *pRF_ClearCumulativeDuration = 0; /* Clear cumulative duration reg. */ *pRF_ClearCumulativeDuration = 1; }
int main(int argc, char ** argv) { char c ; unsigned int i ; FILE * fr; long start_time, end_time ; double diff_time ; struct timespec cpu_time ; unsigned int size = 0 ; initGPIOs(); init_i2c(1); //parse programm args for(i = 1 ; i < argc ; ) { if(argv[i][0] == '-') { switch(argv[i][1]) { case '\0': i ++ ; break ; case 'r' : resetFPGA(); closeGPIOs(); close(i2c_fd); return 1 ; break ; case 'h' : printHelp(); return 1 ; break; default : printHelp(); return 1 ; break ; } } else { //last argument is file to load break ; } } if(init_spi() < 0) { printf("cannot open spi bus \n"); return -1 ; } fr = fopen (argv[i], "rb"); /* open the file for reading bytes*/ if(fr < 0) { printf("cannot open file %s \n", argv[1]); return -1 ; } memset((void *) configBits, (int) 0, (size_t) 1024*1024); size = fread(configBits, 1, 1024*1024, fr); printf("bit file size : %d \n", size); //8*5 clock cycle more at the end of config if(serialConfig(configBits, size+5) < 0) { printf("config error \n"); exit(0); } else { printf("config success ! \n"); } closeGPIOs(); fclose(fr); close(spi_fd); close(i2c_fd); return 1; }