mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-22 09:37:59 +02:00
2. Dev/add jf pedestal feature (#807)
This commit is contained in:
@ -255,6 +255,17 @@
|
||||
#define PLL_CNTRL_ADDR_OFST (16)
|
||||
#define PLL_CNTRL_ADDR_MSK (0x0000003F << PLL_CNTRL_ADDR_OFST)
|
||||
|
||||
|
||||
/* Pedestal Mode Regiser */
|
||||
#define PEDESTAL_MODE_REG (0x57 << MEM_MAP_SHIFT)
|
||||
|
||||
#define PEDESTAL_MODE_ITRTNS_OFST (0)
|
||||
#define PEDESTAL_MODE_ITRTNS_MSK (0x0000FFFF << PEDESTAL_MODE_ITRTNS_OFST)
|
||||
#define PEDESTAL_MODE_LNGTH_OFST (16)
|
||||
#define PEDESTAL_MODE_LNGTH_MSK (0x000000FF << PEDESTAL_MODE_LNGTH_OFST)
|
||||
#define PEDESTAL_MODE_ENBLE_OFST (31)
|
||||
#define PEDESTAL_MODE_ENBLE_MSK (0x00000001 << PEDESTAL_MODE_ENBLE_OFST)
|
||||
|
||||
/* Config Register for chip 1.1 */
|
||||
#define CONFIG_V11_REG (0x58 << MEM_MAP_SHIFT)
|
||||
|
||||
|
Binary file not shown.
@ -55,6 +55,9 @@ int32_t clkPhase[NUM_CLOCKS] = {};
|
||||
int detPos[4] = {};
|
||||
int chipConfigured = 0;
|
||||
|
||||
uint64_t normal_mode_frames = -1;
|
||||
uint64_t normal_mode_triggers = -1;
|
||||
|
||||
int isInitCheckDone() { return initCheckDone; }
|
||||
|
||||
int getInitResult(char **mess) {
|
||||
@ -555,6 +558,13 @@ void setupDetector() {
|
||||
setFlipRows(DEFAULT_FLIP_ROWS);
|
||||
setReadNRows(MAX_ROWS_PER_READOUT);
|
||||
}
|
||||
#ifdef VIRTUAL
|
||||
// setting pedestalmode depends on previous values
|
||||
bus_w(PEDESTAL_MODE_REG,
|
||||
bus_r(PEDESTAL_MODE_REG) & ~PEDESTAL_MODE_ENBLE_MSK);
|
||||
#endif
|
||||
setPedestalMode(DEFAULT_PEDESTAL_MODE, DEFAULT_PEDESTAL_FRAMES,
|
||||
DEFAULT_PEDESTAL_LOOPS);
|
||||
}
|
||||
|
||||
int resetToDefaultDacs(int hardReset) {
|
||||
@ -975,6 +985,9 @@ int getNextFrameNumber(uint64_t *retval) {
|
||||
}
|
||||
|
||||
void setNumFrames(int64_t val) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
if (val > 0) {
|
||||
LOG(logINFO, ("Setting number of frames %lld\n", (long long int)val));
|
||||
set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG);
|
||||
@ -986,6 +999,9 @@ int64_t getNumFrames() {
|
||||
}
|
||||
|
||||
void setNumTriggers(int64_t val) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
if (val > 0) {
|
||||
LOG(logINFO, ("Setting number of triggers %lld\n", (long long int)val));
|
||||
set64BitReg(val, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG);
|
||||
@ -1439,6 +1455,9 @@ void setSynchronization(int enable) {
|
||||
}
|
||||
|
||||
void setTiming(enum timingMode arg) {
|
||||
if (getPedestalMode()) {
|
||||
return;
|
||||
}
|
||||
switch (arg) {
|
||||
case AUTO_TIMING:
|
||||
LOG(logINFO, ("Set Timing: Auto\n"));
|
||||
@ -2513,6 +2532,81 @@ uint64_t getSelectCurrentSource() {
|
||||
}
|
||||
}
|
||||
|
||||
int getPedestalMode() {
|
||||
return ((bus_r(PEDESTAL_MODE_REG) & PEDESTAL_MODE_ENBLE_MSK) >>
|
||||
PEDESTAL_MODE_ENBLE_OFST);
|
||||
}
|
||||
|
||||
void getPedestalParameters(uint8_t *frames, uint16_t *loops) {
|
||||
uint32_t addr = PEDESTAL_MODE_REG;
|
||||
*frames =
|
||||
((bus_r(addr) & PEDESTAL_MODE_LNGTH_MSK) >> PEDESTAL_MODE_LNGTH_OFST);
|
||||
*loops = ((bus_r(PEDESTAL_MODE_REG) & PEDESTAL_MODE_ITRTNS_MSK) >>
|
||||
PEDESTAL_MODE_ITRTNS_OFST);
|
||||
}
|
||||
|
||||
void setPedestalMode(int enable, uint8_t frames, uint16_t loops) {
|
||||
int prevPedestalEnable = getPedestalMode();
|
||||
uint32_t addr = PEDESTAL_MODE_REG;
|
||||
|
||||
if (enable) {
|
||||
LOG(logINFOBLUE, ("Enabling pedestal mode [frames: %hhu, loops: %hu]\n",
|
||||
frames, loops));
|
||||
// enable
|
||||
bus_w(addr, bus_r(addr) | PEDESTAL_MODE_ENBLE_MSK);
|
||||
// frames
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_LNGTH_MSK);
|
||||
bus_w(addr, bus_r(addr) | ((frames << PEDESTAL_MODE_LNGTH_OFST) &
|
||||
PEDESTAL_MODE_LNGTH_MSK));
|
||||
// loops
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_ITRTNS_MSK);
|
||||
bus_w(addr, bus_r(addr) | ((loops << PEDESTAL_MODE_ITRTNS_OFST) &
|
||||
PEDESTAL_MODE_ITRTNS_MSK));
|
||||
|
||||
// if it was switched off before, remember the #frames and #triggers
|
||||
if (prevPedestalEnable == 0) {
|
||||
normal_mode_frames = getNumFrames();
|
||||
normal_mode_triggers = getNumTriggers();
|
||||
LOG(logINFO, ("\tRemembering Normal mode #frames and "
|
||||
"#triggers[%lld, %lld]\n",
|
||||
normal_mode_frames, normal_mode_triggers));
|
||||
}
|
||||
|
||||
// overwrite #frames and #triggers to new values
|
||||
int64_t expFrames = -1;
|
||||
int64_t expTriggers = -1;
|
||||
enum timingMode timing = getTiming();
|
||||
if (timing == AUTO_TIMING ||
|
||||
(timing == TRIGGER_EXPOSURE && normal_mode_frames > 1)) {
|
||||
expFrames = frames * loops * 2;
|
||||
expTriggers = 1;
|
||||
} else {
|
||||
expFrames = 1;
|
||||
expTriggers = frames * loops * 2;
|
||||
}
|
||||
LOG(logINFO, ("\tOverwriting [#frames: %lld, #triggers: %lld]\n",
|
||||
expFrames, expTriggers));
|
||||
set64BitReg(expFrames, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG);
|
||||
set64BitReg(expTriggers, SET_CYCLES_LSB_REG, SET_CYCLES_MSB_REG);
|
||||
|
||||
} else {
|
||||
LOG(logINFOBLUE, ("Disabling pedestal mode\n"));
|
||||
bus_w(addr, bus_r(addr) & ~PEDESTAL_MODE_ENBLE_MSK);
|
||||
|
||||
// if it was switched on before, reset the normal mode #frames and
|
||||
// #triggers
|
||||
if (prevPedestalEnable == 1) {
|
||||
LOG(logINFO,
|
||||
("\tResetting to Normal mode [#frames:%lld, #triggers:%lld\n",
|
||||
normal_mode_frames, normal_mode_triggers));
|
||||
set64BitReg(normal_mode_frames, SET_FRAMES_LSB_REG,
|
||||
SET_FRAMES_MSB_REG);
|
||||
set64BitReg(normal_mode_triggers, SET_CYCLES_LSB_REG,
|
||||
SET_CYCLES_MSB_REG);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int getTenGigaFlowControl() {
|
||||
return ((bus_r(CONFIG_REG) & CONFIG_ETHRNT_FLW_CNTRL_MSK) >>
|
||||
CONFIG_ETHRNT_FLW_CNTRL_OFST);
|
||||
|
@ -5,8 +5,8 @@
|
||||
#include "sls/sls_detector_defs.h"
|
||||
|
||||
#define MIN_REQRD_VRSN_T_RD_API 0x171220
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x230516 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x230515 // 2.0 pcb (version = 011)
|
||||
#define REQRD_FRMWRE_VRSN_BOARD2 0x230920 // 1.0 pcb (version = 010)
|
||||
#define REQRD_FRMWRE_VRSN 0x230921 // 2.0 pcb (version = 011)
|
||||
|
||||
#define NUM_HARDWARE_VERSIONS (2)
|
||||
#define HARDWARE_VERSION_NUMBERS \
|
||||
@ -52,6 +52,9 @@
|
||||
#define DEFAULT_FLIP_ROWS (0)
|
||||
#define DEFAULT_FILTER_RESISTOR (1) // higher resistor
|
||||
#define DEFAULT_FILTER_CELL (0)
|
||||
#define DEFAULT_PEDESTAL_MODE (0)
|
||||
#define DEFAULT_PEDESTAL_FRAMES (1)
|
||||
#define DEFAULT_PEDESTAL_LOOPS (1)
|
||||
|
||||
#define HIGHVOLTAGE_MIN (60)
|
||||
#define HIGHVOLTAGE_MAX (200)
|
||||
|
Reference in New Issue
Block a user