eiger server: added overflow, noverflow to the flags to show/not show saturation when there is overflow in any of the single subframes in 32 bit mode

This commit is contained in:
2018-05-22 18:43:13 +02:00
parent 0ed82d4ef7
commit cb635d800a
15 changed files with 158 additions and 33 deletions

View File

@ -415,6 +415,43 @@ int Beb_Activate(int enable){
}
int Beb_Set32bitOverflow(int val) {
if(!Beb_activated)
return val;
//mapping new memory
u_int32_t* csp0base=0;
u_int32_t valueread = 0;
u_int32_t offset = FLOW_REG_OFFSET;
if(val>0) val = 1;
//open file pointer
int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR);
if(fd < 0){
cprintf(BG_RED,"Could not read register to set overflow flag in 32 bit mode. FAIL\n");
return -1;
}
else{
if(val > -1){
// reset bit
valueread = Beb_Read32(csp0base, offset);
Beb_Write32(csp0base, offset,valueread & ~FLOW_REG_OVERFLOW_32_BIT_MSK);
// set bit
valueread = Beb_Read32(csp0base, offset);
Beb_Write32(csp0base, offset,valueread |
((val << FLOW_REG_OVERFLOW_32_BIT_OFST) & FLOW_REG_OVERFLOW_32_BIT_MSK));
}
valueread = (Beb_Read32(csp0base, offset) & FLOW_REG_OVERFLOW_32_BIT_MSK) >> FLOW_REG_OVERFLOW_32_BIT_OFST;
}
//close file pointer
if(fd > 0)
Beb_close(fd,csp0base);
return valueread;
}
int Beb_SetNetworkParameter(enum NETWORKINDEX mode, int val){
if(!Beb_activated)
@ -441,7 +478,7 @@ int Beb_SetNetworkParameter(enum NETWORKINDEX mode, int val){
strcpy(modename,"Transmission Delay Frame");
break;
case FLOWCTRL_10G:
offset = TXM_FLOW_CONTROL_10G;
offset = FLOW_REG_OFFSET;
strcpy(modename,"Flow Control for 10G");
if(val>0) val = 1;
break;
@ -455,14 +492,29 @@ int Beb_SetNetworkParameter(enum NETWORKINDEX mode, int val){
}
else{
if(val > -1){
valueread = Beb_Read32(csp0base, offset);
//cprintf(BLUE, "%s value before:%d\n",modename,valueread);
Beb_Write32(csp0base, offset,val);
cprintf(BLUE,"%s value:%d\n", modename,valueread);
if (mode != FLOWCTRL_10G) {
valueread = Beb_Read32(csp0base, offset);
Beb_Write32(csp0base, offset,val);
}
// flow control reg has other bits for other control
else {
// reset bit
valueread = Beb_Read32(csp0base, offset);
Beb_Write32(csp0base, offset,valueread & ~FLOW_REG_TXM_FLOW_CNTRL_10G_MSK);
// set bit
valueread = Beb_Read32(csp0base, offset);
Beb_Write32(csp0base, offset,valueread |
((val << FLOW_REG_TXM_FLOW_CNTRL_10G_OFST) & FLOW_REG_TXM_FLOW_CNTRL_10G_MSK));
}
}
valueread = Beb_Read32(csp0base, offset);
//cprintf(BLUE,"%s value:%d\n", modename,valueread);
if (mode == FLOWCTRL_10G)
valueread = (valueread & FLOW_REG_TXM_FLOW_CNTRL_10G_MSK) >> FLOW_REG_TXM_FLOW_CNTRL_10G_OFST;
}
//close file pointer
if(fd > 0)

View File

@ -51,6 +51,7 @@ struct BebInfo{
int Beb_SetMasterViaSoftware();
int Beb_SetSlaveViaSoftware();
int Beb_Activate(int enable);
int Beb_Set32bitOverflow(int val);
int Beb_SetNetworkParameter(enum NETWORKINDEX mode, int val);
int Beb_ResetToHardwareSettings();
u_int32_t Beb_GetFirmwareRevision();

View File

@ -139,7 +139,12 @@
#define TXM_DELAY_LEFT_OFFSET 0x180
#define TXM_DELAY_RIGHT_OFFSET 0x1A0
#define TXM_DELAY_FRAME_OFFSET 0x1C0
#define TXM_FLOW_CONTROL_10G 0x140
#define FLOW_REG_OFFSET 0x140
#define FLOW_REG_TXM_FLOW_CNTRL_10G_OFST (0)
#define FLOW_REG_TXM_FLOW_CNTRL_10G_MSK (0x1 << FLOW_REG_TXM_FLOW_CNTRL_10G_OFST)
#define FLOW_REG_OVERFLOW_32_BIT_OFST (2)
#define FLOW_REG_OVERFLOW_32_BIT_MSK (0x1 << FLOW_REG_OVERFLOW_32_BIT_OFST)
//command memory
#define LEFT_OFFSET 0x0

View File

@ -1,9 +1,9 @@
Path: slsDetectorsPackage/slsDetectorSoftware/eigerDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 23d73ae5aee55e52d1d05452c633073ac1c6ad1a
Revision: 334
Branch: developer
Repsitory UUID: 0ed82d4ef7a10d8a935b5d075a990509da288e32
Revision: 338
Branch: 32bitoverflow
Last Changed Author: Dhanya_Thattil
Last Changed Rev: 3817
Last Changed Date: 2018-05-15 16:16:15.000000002 +0200 ./FebRegisterDefs.h
Last Changed Rev: 3831
Last Changed Date: 2018-05-22 18:04:57.000000002 +0200 ./Beb.c

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "23d73ae5aee55e52d1d05452c633073ac1c6ad1a"
#define GITREPUUID "0ed82d4ef7a10d8a935b5d075a990509da288e32"
#define GITAUTH "Dhanya_Thattil"
#define GITREV 0x3817
#define GITDATE 0x20180515
#define GITBRANCH "developer"
#define GITREV 0x3831
#define GITDATE 0x20180522
#define GITBRANCH "32bitoverflow"

View File

@ -36,6 +36,7 @@ int eiger_photonenergy = 0;
int eiger_dynamicrange = 0;
int eiger_readoutmode = 0;
int eiger_storeinmem = 0;
int eiger_overflow32 = 0;
int eiger_readoutspeed = 0;
int eiger_triggermode = 0;
int eiger_extgating = 0;
@ -333,7 +334,9 @@ void setupDetector() {
setTimer(FRAME_PERIOD, DEFAULT_PERIOD);
setDynamicRange(DEFAULT_DYNAMIC_RANGE);
eiger_photonenergy = DEFAULT_PHOTON_ENERGY;
setReadOutFlags(DEFAULT_READOUT_FLAG);
setReadOutFlags(DEFAULT_READOUT_MODE);
setReadOutFlags(DEFAULT_READOUT_STOREINRAM_MODE);
setReadOutFlags(DEFAULT_READOUT_OVERFLOW32_MODE);
setSpeed(CLOCK_DIVIDER, DEFAULT_CLK_SPEED);//clk_devider,half speed
setIODelay(DEFAULT_IO_DELAY, DEFAULT_MOD_INDEX);
setTiming(DEFAULT_TIMING_MODE);
@ -430,7 +433,24 @@ enum readOutFlags setReadOutFlags(enum readOutFlags val){
eiger_readoutmode = val;
else return -1;
}else{
}
else if (val&0xF00000) {
switch(val){
case SHOW_OVERFLOW: val=1; printf(" Setting Read out Flag: Overflow in 32 bit mode\n"); break;
case NOOVERFLOW: val=0; printf(" Setting Read out Flag: No overflow in 32 bit mode\n"); break;
default:
cprintf(RED,"Cannot set unknown readout flag. 0x%x\n", val);
return -1;
}
printf(" Setting Read out Flag: %d\n",val);
if(Beb_Set32bitOverflow(val) != -1)
eiger_overflow32 = val;
else return -1;
}
else{
switch(val){
case STORE_IN_RAM: val=1; printf(" Setting Read out Flag: Store in Ram\n"); break;
case CONTINOUS_RO: val=0; printf(" Setting Read out Flag: Continuous Readout\n"); break;
@ -451,10 +471,19 @@ enum readOutFlags setReadOutFlags(enum readOutFlags val){
case E_SAFE: retval=SAFE; break;
}
switch(eiger_overflow32){
case 1: retval|=SHOW_OVERFLOW; break;
case 0: retval|=NOOVERFLOW; break;
}
switch(eiger_storeinmem){
case 0: retval|=CONTINOUS_RO; break;
case 1: retval|=STORE_IN_RAM; break;
}
printf("Read out Flag: 0x%x\n",retval);
return retval;
}

View File

@ -76,7 +76,10 @@ enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G};
#define DEFAULT_SUBFRAME_EXPOSURE (2621440) // 2.6ms
#define DEFAULT_SUBFRAME_PERIOD (0)
#define DEFAULT_DYNAMIC_RANGE (16)
#define DEFAULT_READOUT_FLAG (NONPARALLEL)
#define DEFAULT_READOUT_MODE (NONPARALLEL)
#define DEFAULT_READOUT_STOREINRAM_MODE (CONTINOUS_RO)
#define DEFAULT_READOUT_OVERFLOW32_MODE (NOOVERFLOW)
#define DEFAULT_CLK_SPEED (HALF_SPEED)
#define DEFAULT_IO_DELAY (650)
#define DEFAULT_TIMING_MODE (AUTO_TIMING)