diff --git a/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h b/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h index e25b1942f..948fb9fe0 100755 --- a/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h +++ b/slsDetectorServers/jungfrauDetectorServer/RegisterDefs.h @@ -303,10 +303,9 @@ #define SAMPLE_DGTL_DECMT_FACTOR_OFST (12) #define SAMPLE_DGTL_DECMT_FACTOR_MSK (0x00000003 << SAMPLE_DGTL_DECMT_FACTOR_OFST) -// 1 = full speed, 2 = half speed, 4 = quarter speed -#define SAMPLE_DECMT_FACTOR_1_VAL ((0x0 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) -#define SAMPLE_DECMT_FACTOR_2_VAL ((0x1 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) -#define SAMPLE_DECMT_FACTOR_4_VAL ((0x2 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) +#define SAMPLE_DECMT_FACTOR_FULL_VAL ((0x0 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) +#define SAMPLE_DECMT_FACTOR_HALF_VAL ((0x1 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) +#define SAMPLE_DECMT_FACTOR_QUARTER_VAL ((0x2 << SAMPLE_DGTL_DECMT_FACTOR_OFST) & SAMPLE_DGTL_DECMT_FACTOR_MSK) /** Vref Comp Mod Register */ #define VREF_COMP_MOD_REG (0x5C << MEM_MAP_SHIFT) @@ -393,45 +392,30 @@ #define SET_TRIGGER_DELAY_LSB_REG (0x70 << MEM_MAP_SHIFT) #define SET_TRIGGER_DELAY_MSB_REG (0x71 << MEM_MAP_SHIFT) -/* Module Coordinates Register 0 */ -#define COORD_0_REG (0x7C << MEM_MAP_SHIFT) - -#define COORD_0_Y_OFST (0) -#define COORD_0_Y_MSK (0x0000FFFF << COORD_0_Y_OFST) -#define COORD_0_X_OFST (16) -#define COORD_0_X_MSK (0x0000FFFF << COORD_0_X_OFST) - -/* Module Coordinates Register 1 */ -#define COORD_1_REG (0x7D << MEM_MAP_SHIFT) - -#define COORD_0_Z_OFST (0) -#define COORD_0_Z_MSK (0x0000FFFF << COORD_0_Z_OFST) - /** Module row coordinates */ -/*#define COORD_ROW_REG (0x7C << MEM_MAP_SHIFT) +#define COORD_ROW_REG (0x7C << MEM_MAP_SHIFT) #define COORD_ROW_OUTER_OFST (0) #define COORD_ROW_OUTER_MSK (0x0000FFFF << COORD_ROW_OUTER_OFST) #define COORD_ROW_INNER_OFST (16) #define COORD_ROW_INNER_MSK (0x0000FFFF << COORD_ROW_INNER_OFST) -*/ + /** Module column coordinates */ -/*#define COORD_COL_REG (0x7D << MEM_MAP_SHIFT) +#define COORD_COL_REG (0x7D << MEM_MAP_SHIFT) #define COORD_COL_OUTER_OFST (0) #define COORD_COL_OUTER_MSK (0x0000FFFF << COORD_COL_OUTER_OFST) #define COORD_COL_INNER_OFST (16) #define COORD_COL_INNER_MSK (0x0000FFFF << COORD_COL_INNER_OFST) -*/ + /** Module column coordinates */ -/*#define COORD_RESERVED_REG (0x7E << MEM_MAP_SHIFT) +#define COORD_RESERVED_REG (0x7E << MEM_MAP_SHIFT) #define COORD_RESERVED_OUTER_OFST (0) #define COORD_RESERVED_OUTER_MSK (0x0000FFFF << COORD_RESERVED_OUTER_OFST) #define COORD_RESERVED_INNER_OFST (16) #define COORD_RESERVED_INNER_MSK (0x0000FFFF << COORD_RESERVED_INNER_OFST) -*/ /* ASIC Control Register */ #define ASIC_CTRL_REG (0x7F << MEM_MAP_SHIFT) diff --git a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer index 4ed0aa93c..565e857f3 100755 Binary files a/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer and b/slsDetectorServers/jungfrauDetectorServer/bin/jungfrauDetectorServer_developer differ diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c index 463bea38d..6922261ef 100755 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -997,6 +997,11 @@ void setNumberofUDPInterfaces(int val) { } } +int getNumberofUDPInterfaces() { + // return 2 if enabled, else 1 + return ((bus_r(CONFIG_REG) | CONFIG_OPRTN_MDE_2_X_10GbE_MSK) ? 2 : 1); +} + void selectPrimaryInterface(int val) { uint32_t addr = CONFIG_REG; @@ -1169,20 +1174,50 @@ int configureMAC(int numInterfaces, int selInterface, int setDetectorPosition(int pos[]) { int ret = OK; - FILE_LOG(logDEBUG1, ("Setting detector position: (%d, %d)\n", pos[X], pos[Y])); + int innerPos[2] = {pos[X], pos[Y]}; + int outerPos[2] = {pos[X], pos[Y]}; + int numInterfaces = getNumberofUDPInterfaces(); - bus_w(COORD_0_REG, bus_r(COORD_0_REG) & (~(COORD_0_X_MSK))); - bus_w(COORD_0_REG, bus_r(COORD_0_REG) | ((pos[X] << COORD_0_X_OFST) & COORD_0_X_MSK)); - if ((bus_r(COORD_0_REG) & COORD_0_X_MSK) != ((pos[X] << COORD_0_X_OFST) & COORD_0_X_MSK)) + if (numInterfaces == 1) { + FILE_LOG(logDEBUG1, ("Setting detector position: (%d, %d)\n", innerPos[X], innerPos[Y])); + } + else { + ++outerPos[X]; + FILE_LOG(logDEBUG1, ("Setting detector position:\n" + " inner top(%d, %d), outer bottom(%d, %d)\n" + , innerPos[X], innerPos[Y], outerPos[X], outerPos[Y])); + } + + // row + //outer + uint32_t addr = COORD_ROW_REG; + bus_w(addr, (bus_r(addr) &~COORD_ROW_OUTER_MSK) | ((outerPos[X] << COORD_ROW_OUTER_OFST) & COORD_ROW_OUTER_MSK)); + if (((bus_r(addr) & COORD_ROW_OUTER_MSK) >> COORD_ROW_OUTER_OFST) != outerPos[X]) + ret = FAIL; + // inner + bus_w(addr, (bus_r(addr) &~COORD_ROW_INNER_MSK) | ((innerPos[X] << COORD_ROW_INNER_OFST) & COORD_ROW_INNER_MSK)); + if (((bus_r(addr) & COORD_ROW_INNER_MSK) >> COORD_ROW_INNER_OFST) != innerPos[X]) ret = FAIL; - bus_w(COORD_0_REG, bus_r(COORD_0_REG) & (~(COORD_0_Y_MSK))); - bus_w(COORD_0_REG, bus_r(COORD_0_REG) | ((pos[Y] << COORD_0_Y_OFST) & COORD_0_Y_MSK)); - if ((bus_r(COORD_0_REG) & COORD_0_Y_MSK) != ((pos[Y] << COORD_0_Y_OFST) & COORD_0_Y_MSK)) + // col + //outer + addr = COORD_COL_REG; + bus_w(addr, (bus_r(addr) &~COORD_COL_OUTER_MSK) | ((outerPos[Y] << COORD_COL_OUTER_OFST) & COORD_COL_OUTER_MSK)); + if (((bus_r(addr) & COORD_COL_OUTER_MSK) >> COORD_COL_OUTER_OFST) != outerPos[Y]) + ret = FAIL; + // inner + bus_w(addr, (bus_r(addr) &~COORD_COL_INNER_MSK) | ((innerPos[Y] << COORD_COL_INNER_OFST) & COORD_COL_INNER_MSK)); + if (((bus_r(addr) & COORD_COL_INNER_MSK) >> COORD_COL_INNER_OFST) != innerPos[Y]) ret = FAIL; if (ret == OK) { - FILE_LOG(logINFO, ("Position set to [%d, %d]\n", pos[X], pos[Y])); + if (numInterfaces == 1) { + FILE_LOG(logINFO, ("Position set to [%d, %d]\n", innerPos[X], innerPos[Y])); + } + else { + FILE_LOG(logINFO, (" Inner (top) position set to [%d, %d]\n", innerPos[X], innerPos[Y])); + FILE_LOG(logINFO, (" Outer (bottom) position set to [%d, %d]\n", outerPos[X], outerPos[Y])); + } } return ret; } @@ -1384,6 +1419,8 @@ void setAdcPhase(int val, int degrees){ ALTERA_PLL_SetPhaseShift(phase, 1, 0); adcPhase = valShift; + + alignDeserializer(); } int getPhase(degrees) { diff --git a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h index 18ab6eb82..98cdbe596 100755 --- a/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/jungfrauDetectorServer/slsDetectorServer_defs.h @@ -88,17 +88,19 @@ enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G }; #define MAX_STORAGE_CELL_DLY_NS_VAL ((ASIC_CTRL_EXPSRE_TMR_MSK >> ASIC_CTRL_EXPSRE_TMR_OFST) * ASIC_CTRL_EXPSRE_TMR_STEPS) #define ACQ_TIME_MIN_CLOCK (2) -#define SAMPLE_ADC_FULL_SPEED (SAMPLE_ADC_HALF_SPEED) -#define SAMPLE_ADC_HALF_SPEED (SAMPLE_DECMT_FACTOR_2_VAL + SAMPLE_DGTL_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_ADC_SAMPLE_0_VAL) /* 0x1000 */ -#define SAMPLE_ADC_QUARTER_SPEED (SAMPLE_DECMT_FACTOR_4_VAL + SAMPLE_DGTL_SAMPLE_8_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_ADC_SAMPLE_0_VAL) /* 0x2810 */ +#define BOARD_VERSION_2_VAL (0x3F) -#define ADC_OFST_FULL_SPEED_VAL (0x20)//(0x1f) //(0x20) -#define ADC_OFST_HALF_SPEED_VAL (0x20)//(0x1f) //(0x20) -#define ADC_OFST_QUARTER_SPEED_VAL (0x0f) //(0x0f) +#define SAMPLE_ADC_FULL_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_0_VAL + SAMPLE_DGTL_SAMPLE_3_VAL + SAMPLE_DECMT_FACTOR_FULL_VAL) // 0x300 +#define SAMPLE_ADC_HALF_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_1_VAL + SAMPLE_DGTL_SAMPLE_6_VAL + SAMPLE_DECMT_FACTOR_HALF_VAL) // 0x1610 +#define SAMPLE_ADC_QUARTER_SPEED (SAMPLE_ADC_SAMPLE_0_VAL + SAMPLE_ADC_DECMT_FACTOR_3_VAL + SAMPLE_DGTL_SAMPLE_14_VAL + SAMPLE_DECMT_FACTOR_QUARTER_VAL) // 0x2e30 -#define ADC_PHASE_FULL_SPEED (0x2D) //45 -#define ADC_PHASE_HALF_SPEED (0x2D) //45 -#define ADC_PHASE_QUARTER_SPEED (0x2D) //45 +#define ADC_OFST_FULL_SPEED_VAL (0xF) +#define ADC_OFST_HALF_SPEED_VAL (0xB) +#define ADC_OFST_QUARTER_SPEED_VAL (0x7) + +#define ADC_PHASE_FULL_SPEED (0x1E) //30 +#define ADC_PHASE_HALF_SPEED (0x1E) //30 +#define ADC_PHASE_QUARTER_SPEED (0x1E) //30 #define ADC_PORT_INVERT_VAL (0x5A5A5A5A)//(0x453b2a9c) #define MAX_PHASE_SHIFTS (160) diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h index c18fec0dc..85eef8e34 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/slsDetectorFunctionList.h @@ -216,6 +216,7 @@ int getExtSignal(); void calcChecksum(mac_conf* mac, int sourceip, int destip); #elif JUNGFRAUD void setNumberofUDPInterfaces(int val); +int getNumberofUDPInterfaces(); void selectPrimaryInterface(int val); void setupHeader(int iRxEntry, enum interfaceType type, uint32_t destip, uint64_t destmac, uint32_t destport, uint64_t sourcemac, uint32_t sourceip, uint32_t sourceport); void calcChecksum(udp_header* udp); diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 3689a6061..a9e2736fd 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -2007,6 +2007,13 @@ int set_speed(int file_des) { FILE_LOG(logERROR,(mess)); } #endif +#ifdef JUNGFRAUD + if (ret == OK && ind == CLOCK_DIVIDER && val == FULL_SPEED && getHardwareVersionNumber() != BOARD_VERSION_2_VAL) { + ret = FAIL; + strcpy(mess, "Full speed not implemented for this board version.\n"); + FILE_LOG(logERROR,(mess)); + } +#endif if (ret == OK) { // set diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index 689b78438..c0d8472a4 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -8,4 +8,4 @@ #define APIEIGER 0x190516 #define APICTB 0x190516 -#define APIJUNGFRAU 0x190517 +#define APIJUNGFRAU 0x190527