mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 23:30:03 +02:00
jungfrau board 2 adc defines, full speed limitation for old boards
This commit is contained in:
parent
7fdab08256
commit
2c2fb7358c
@ -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)
|
||||
|
Binary file not shown.
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -8,4 +8,4 @@
|
||||
#define APIEIGER 0x190516
|
||||
#define APICTB 0x190516
|
||||
|
||||
#define APIJUNGFRAU 0x190517
|
||||
#define APIJUNGFRAU 0x190527
|
||||
|
Loading…
x
Reference in New Issue
Block a user