/** * @author Ian Johnson * @version 1.0 */ //#include //#include //#include //#include //#include //#include #include #include #include #include "xparameters.h" #include "FebInterface.h" struct LocalLinkInterface ll_local,* ll; unsigned int Feb_Interface_nfebs; unsigned int* Feb_Interface_feb_numb; int Feb_Interface_send_ndata; unsigned int Feb_Interface_send_buffer_size; unsigned int* Feb_Interface_send_data_raw; unsigned int* Feb_Interface_send_data; int Feb_Interface_recv_ndata; unsigned int Feb_Interface_recv_buffer_size; unsigned int* Feb_Interface_recv_data_raw; unsigned int* Feb_Interface_recv_data; void Feb_Interface_FebInterface(){ ll = &ll_local; Feb_Interface_nfebs = 0; Feb_Interface_feb_numb = 0; Feb_Interface_send_ndata = 0; Feb_Interface_send_buffer_size = 1026; Feb_Interface_send_data_raw = malloc((Feb_Interface_send_buffer_size+1) * sizeof(unsigned int)); Feb_Interface_send_data = &Feb_Interface_send_data_raw[1]; Feb_Interface_recv_ndata = 0; Feb_Interface_recv_buffer_size = 1026; Feb_Interface_recv_data_raw = malloc((Feb_Interface_recv_buffer_size+1) * sizeof(unsigned int)); Feb_Interface_recv_data = &Feb_Interface_recv_data_raw[1]; Local_LocalLinkInterface1(ll,XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_RIGHT_BASEADDR); } void Feb_Interface_SendCompleteList(unsigned int n,unsigned int* list){ unsigned int i; if(Feb_Interface_feb_numb) free(Feb_Interface_feb_numb); Feb_Interface_nfebs = n; Feb_Interface_feb_numb = malloc(n * sizeof(unsigned int)); for(i=0;i0xfff) return 0; #ifdef MARTIN cprintf(YELLOW, "FIW ch %d\n", ch); #endif Feb_Interface_send_data_raw[0] = 0x8fff0000; if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_data_raw[0] = 0x90000000 | (ch<<16); if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_data_raw[0] = 0xc0000000; return ((Feb_Interface_send_ndata+1)*4==Local_Write(ll,(Feb_Interface_send_ndata+1)*4,Feb_Interface_send_data_raw)); } int Feb_Interface_ReadFrom(unsigned int ch, unsigned int ntrys){ unsigned int t; if(ch>=0xfff) return 0; Feb_Interface_recv_data_raw[0] = 0xa0000000 | (ch<<16); Local_Write(ll,4,Feb_Interface_recv_data_raw); usleep(20); Feb_Interface_recv_ndata=-1; for(t=0;t0){ Feb_Interface_recv_ndata--; break; } usleep(1000); } return (Feb_Interface_recv_ndata>=0); } int Feb_Interface_SetByteOrder(){ Feb_Interface_send_data_raw[0] = 0x8fff0000; if(Local_Write(ll,4,Feb_Interface_send_data_raw)!=4) return 0; Feb_Interface_send_ndata = 2; Feb_Interface_send_data[0] = 0; Feb_Interface_send_data[1] = 0; unsigned int i; unsigned int dst = 0xff; for(i=0;iFeb_Interface_send_buffer_size-2) return 0; Feb_Interface_send_ndata = nreads+2; Feb_Interface_send_data[0] = 0x20000000 | nreads << 14; for(i=0;iFeb_Interface_send_buffer_size-2) return 0; //cout<<"Write register : "<0){ n_to_send = ndata_countdownFeb_Interface_send_buffer_size-2) {printf("error herer: nwrites:%d\n",nwrites);return 0;}//*d-1026 Feb_Interface_send_ndata = nwrites+2;//*d-1026 Feb_Interface_send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address Feb_Interface_send_data[nwrites+1] = 0; for(i=0;i