From 50596d87d1e575bebdf38accec286aa4f42d3869 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 2 Nov 2016 10:56:13 +0100 Subject: [PATCH] included the delay and frame counters --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 106 ++++++++++++++++++ slsDetectorSoftware/eigerDetectorServer/Beb.h | 2 + .../eigerDetectorServer/FebRegisterDefs.h | 43 +++++++ .../slsDetectorFunctionList.c | 2 +- .../slsDetectorServer_defs.h | 1 + .../eigerDetectorServer/xparameters.h | 6 + 6 files changed, 159 insertions(+), 1 deletion(-) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index bdd47a461..a3025fea9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -24,6 +24,7 @@ #include "Beb.h" +#define MAX(x, y) (((x) > (y)) ? (x) : (y)) struct BebInfo beb_infos[10]; @@ -172,6 +173,111 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ } } + + +void Beb_EndofDataSend(int tengiga){ + //mapping new memory + u_int32_t* csp0base=0; + int l_framepktcounter2, l_txndelaycounter, l_framedelaycounter, r_framepktcounter2, r_txndelaycounter, r_framedelaycounter; + int l_framepktcounter2_new, l_txndelaycounter_new, l_framedelaycounter_new, r_framepktcounter2_new, r_txndelaycounter_new, r_framedelaycounter_new; + int addr_l_framepktcounter2, addr_l_txndelaycounter, addr_l_framedelaycounter, addr_r_framepktcounter2, addr_r_txndelaycounter, addr_r_framedelaycounter; + + switch(tengiga){ + case 0: + addr_l_framepktcounter2 = ONE_GIGA_LEFT_PKT_SEND_COUNTER; + addr_l_txndelaycounter = ONE_GIGA_LEFT_TXN_DELAY_COUNTER; + addr_l_framedelaycounter = ONE_GIGA_LEFT_FRAME_DELAY_COUNTER; + addr_r_framepktcounter2 = ONE_GIGA_RIGHT_PKT_SEND_COUNTER; + addr_r_txndelaycounter = ONE_GIGA_RIGHT_TXN_DELAY_COUNTER; + addr_r_framedelaycounter = ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER; + break; + case 1: + addr_l_framepktcounter2 = TEN_GIGA_LEFT_PKT_SEND_COUNTER; + addr_l_txndelaycounter = TEN_GIGA_LEFT_TXN_DELAY_COUNTER; + addr_l_framedelaycounter = TEN_GIGA_LEFT_FRAME_DELAY_COUNTER; + addr_r_framepktcounter2 = TEN_GIGA_RIGHT_PKT_SEND_COUNTER; + addr_r_txndelaycounter = TEN_GIGA_RIGHT_TXN_DELAY_COUNTER; + addr_r_framedelaycounter = TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER; + break; + } + + + //open file pointer + int fd = Beb_open(&csp0base,XPAR_COUNTER_BASEADDR); + if(fd < 0){ + cprintf(BG_RED,"Delay read counter fail\n"); + return; + }else{ + //read data first time + l_framepktcounter2 = Beb_Read32(csp0base, addr_l_framepktcounter2); + l_txndelaycounter = Beb_Read32(csp0base, addr_l_txndelaycounter); + l_framedelaycounter = Beb_Read32(csp0base, addr_l_framedelaycounter); + r_framepktcounter2 = Beb_Read32(csp0base, addr_r_framepktcounter2); + r_txndelaycounter = Beb_Read32(csp0base, addr_r_txndelaycounter); + r_framedelaycounter = Beb_Read32(csp0base, addr_r_framedelaycounter); +//#ifdef VERBOSE + printf("\nLeft\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n" + "\nRight\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n\n", + l_framepktcounter2,l_txndelaycounter,l_framedelaycounter, + r_framepktcounter2,r_txndelaycounter,r_framedelaycounter); +//#endif + + //keep comparing with previous values + int maxtimer; + while(1){ + maxtimer = MAX(MAX(l_txndelaycounter,l_framedelaycounter),MAX(r_txndelaycounter,r_framedelaycounter)); + maxtimer /= 100; + printf("Will wait for %d us\n",maxtimer); + usleep(maxtimer); + + //read new values + l_framepktcounter2_new = Beb_Read32(csp0base, addr_l_framepktcounter2); + l_txndelaycounter_new = Beb_Read32(csp0base, addr_l_txndelaycounter); + l_framedelaycounter_new = Beb_Read32(csp0base, addr_l_framedelaycounter); + r_framepktcounter2_new = Beb_Read32(csp0base, addr_r_framepktcounter2); + r_txndelaycounter_new = Beb_Read32(csp0base, addr_r_txndelaycounter); + r_framedelaycounter_new = Beb_Read32(csp0base, addr_r_framedelaycounter); +//#ifdef VERBOSE + printf("\nLeft\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n" + "\nRight\n" + "Framepacketcounter: %d\n" + "Txndelaycounter:%d\n" + "Framedelaycounter:%d\n\n", + l_framepktcounter2_new,l_txndelaycounter_new,l_framedelaycounter_new, + r_framepktcounter2_new,r_txndelaycounter_new,r_framedelaycounter_new); +//#endif + + if ((l_framepktcounter2 == l_framepktcounter2_new) && (r_framepktcounter2 == r_framepktcounter2_new)) + break; + + //update old values + l_framepktcounter2 = l_framepktcounter2_new; + l_txndelaycounter = l_txndelaycounter_new; + l_framedelaycounter = l_framedelaycounter_new; + r_framepktcounter2 = r_framepktcounter2_new; + r_txndelaycounter = r_txndelaycounter_new; + r_framedelaycounter = r_framedelaycounter_new; + + } + + printf("Detector has send all data\n"); + //close file pointer + Beb_close(fd,csp0base); + } +} + + + + /* do not work at the moment */ int Beb_SetMasterViaSoftware(){ diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index 535b0e382..9431701ea 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -46,6 +46,8 @@ struct BebInfo{ void Beb_GetModuleCopnfiguration(int* master, int* top); + void Beb_EndofDataSend(int tengiga); + int Beb_SetMasterViaSoftware(); int Beb_SetSlaveViaSoftware(); int Beb_Activate(int enable); diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 93f8ea404..b4b728a3d 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -153,3 +153,46 @@ //temp so far #define FEB_REG_STATUS 0xa +//1g counters +#define ONE_GIGA_LEFT_FRAME_SEND_COUNTER 0x04 +#define ONE_GIGA_LEFT_PKT_SEND_COUNTER 0x24 + +#define ONE_GIGA_LEFT_TXN_DELAY_COUNTER 0x104 +#define ONE_GIGA_LEFT_FRAME_DELAY_COUNTER 0x124 + +#define ONE_GIGA_RIGHT_FRAME_SEND_COUNTER 0x44 +#define ONE_GIGA_RIGHT_PKT_SEND_COUNTER 0x64 + +#define ONE_GIGA_RIGHT_TXN_DELAY_COUNTER 0x144 +#define ONE_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x164 + +//10g counters +#define TEN_GIGA_LEFT_FRAME_SEND_COUNTER 0x84 +#define TEN_GIGA_LEFT_PKT_SEND_COUNTER 0xa4 + +#define TEN_GIGA_LEFT_TXN_DELAY_COUNTER 0x184 +#define TEN_GIGA_LEFT_FRAME_DELAY_COUNTER 0x1a4 + +#define TEN_GIGA_RIGHT_FRAME_SEND_COUNTER 0xc4 +#define TEN_GIGA_RIGHT_PKT_SEND_COUNTER 0xe4 + +#define TEN_GIGA_RIGHT_TXN_DELAY_COUNTER 0x1c4 +#define TEN_GIGA_RIGHT_FRAME_DELAY_COUNTER 0x1e4 + + + + + + + + + + + + + + + + + + diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c index 40caa1ec9..3d904043c 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorFunctionList.c @@ -873,7 +873,7 @@ void readFrame(int *ret, char *mess){ } //wait for detector to send - + Beb_EndofDataSend(send_to_ten_gig); printf("*****Done Waiting...\n"); diff --git a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h index 296e51728..f4dfdc073 100644 --- a/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorSoftware/eigerDetectorServer/slsDetectorServer_defs.h @@ -45,4 +45,5 @@ enum detAdcIndex{TEMP_FPGAEXT, TEMP_10GE, TEMP_DCDC, TEMP_SODL, TEMP_SODR, TEMP_ enum detNetworkParameter{TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G}; + #endif /* SLSDETECTORSERVER_DEFS_H_ */ diff --git a/slsDetectorSoftware/eigerDetectorServer/xparameters.h b/slsDetectorSoftware/eigerDetectorServer/xparameters.h index 424ff8d15..446c89859 100644 --- a/slsDetectorSoftware/eigerDetectorServer/xparameters.h +++ b/slsDetectorSoftware/eigerDetectorServer/xparameters.h @@ -61,6 +61,12 @@ XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR #define XPAR_PLB_GPIO_TEST_HIGHADDR 0xD101FFFF + +/* Definitions for packet, frame and delay down counters */ +#define XPAR_COUNTER_BASEADDR 0xD1020000 +#define XPAR_COUNTER_HIGHADDR 0xD102FFFF + + /* Definitions for peripheral PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT */ #define XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_BASEADDR 0xC4100000 #define XPAR_PLB_LL_FIFO_AURORA_DUAL_CTRL_FEB_LEFT_HIGHADDR 0xC410FFFF