mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
@ -622,11 +622,9 @@
|
||||
#define PATTERN_WAIT_TIMER_5_LSB_REG (0x91 << MEM_MAP_SHIFT)
|
||||
#define PATTERN_WAIT_TIMER_5_MSB_REG (0x92 << MEM_MAP_SHIFT)
|
||||
|
||||
|
||||
/* Slow ADC SPI Value RO register */
|
||||
#define ADC_SLOW_DATA_REG (0x93 << MEM_MAP_SHIFT)
|
||||
|
||||
|
||||
/* Slow ADC SPI Value Config register */
|
||||
#define ADC_SLOW_CFG_REG (0x94 << MEM_MAP_SHIFT)
|
||||
/** Read back CFG Register */
|
||||
@ -636,13 +634,13 @@
|
||||
/** Channel sequencer */
|
||||
#define ADC_SLOW_CFG_SEQ_OFST (3)
|
||||
#define ADC_SLOW_CFG_SEQ_MSK (0x00000003 << ADC_SLOW_CFG_SEQ_OFST)
|
||||
#define ADC_SLOW_CFG_SEQ_DSBLE_VAL \
|
||||
#define ADC_SLOW_CFG_SEQ_DSBLE_VAL \
|
||||
((0x0 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK)
|
||||
#define ADC_SLOW_CFG_SEQ_UPDTE_DRNG_SQNCE_VAL \
|
||||
#define ADC_SLOW_CFG_SEQ_UPDTE_DRNG_SQNCE_VAL \
|
||||
((0x1 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK)
|
||||
#define ADC_SLOW_CFG_SEQ_SCN_WTH_TMP_VAL \
|
||||
#define ADC_SLOW_CFG_SEQ_SCN_WTH_TMP_VAL \
|
||||
((0x2 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK)
|
||||
#define ADC_SLOW_CFG_SEQ_SCN_WTHT_TMP_VAL \
|
||||
#define ADC_SLOW_CFG_SEQ_SCN_WTHT_TMP_VAL \
|
||||
((0x3 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK)
|
||||
|
||||
/** Reference/ buffer selection */
|
||||
@ -650,32 +648,33 @@
|
||||
#define ADC_SLOW_CFG_REF_MSK (0x00000007 << ADC_SLOW_CFG_REF_OFST)
|
||||
/** Internal reference. REF = 2.5V buffered output. Temperature sensor enabled.
|
||||
*/
|
||||
#define ADC_SLOW_CFG_REF_INT_2500MV_VAL \
|
||||
#define ADC_SLOW_CFG_REF_INT_2500MV_VAL \
|
||||
((0x0 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_OFST)
|
||||
/** Internal reference. REF = 4.096V buffered output. Temperature sensor
|
||||
* enabled. */
|
||||
#define ADC_SLOW_CFG_REF_INT_4096MV_VAL \
|
||||
#define ADC_SLOW_CFG_REF_INT_4096MV_VAL \
|
||||
((0x1 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK)
|
||||
/** External reference. Temperature sensor enabled. Internal buffer disabled. */
|
||||
#define ADC_SLOW_CFG_REF_EXT_TMP_VAL \
|
||||
#define ADC_SLOW_CFG_REF_EXT_TMP_VAL \
|
||||
((0x2 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK)
|
||||
/** External reference. Temperature sensor enabled. Internal buffer enabled. */
|
||||
#define ADC_SLOW_CFG_REF_EXT_TMP_INTBUF_VAL \
|
||||
#define ADC_SLOW_CFG_REF_EXT_TMP_INTBUF_VAL \
|
||||
((0x3 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK)
|
||||
/** External reference. Temperature sensor disabled. Internal buffer disabled.
|
||||
*/
|
||||
#define ADC_SLOW_CFG_REF_EXT_VAL \
|
||||
#define ADC_SLOW_CFG_REF_EXT_VAL \
|
||||
((0x6 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK)
|
||||
/** External reference. Temperature sensor disabled. Internal buffer enabled. */
|
||||
#define ADC_SLOW_CFG_REF_EXT_INTBUF_VAL \
|
||||
#define ADC_SLOW_CFG_REF_EXT_INTBUF_VAL \
|
||||
((0x7 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK)
|
||||
|
||||
/** bandwidth of low pass filter */
|
||||
#define ADC_SLOW_CFG_BW_OFST (8)
|
||||
#define ADC_SLOW_CFG_BW_MSK (0x00000001 << ADC_SLOW_CFG_REF_OFST)
|
||||
#define ADC_SLOW_CFG_BW_ONE_FOURTH_VAL \
|
||||
#define ADC_SLOW_CFG_BW_ONE_FOURTH_VAL \
|
||||
((0x0 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK)
|
||||
#define ADC_SLOW_CFG_BW_FULL_VAL ((0x1 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK)
|
||||
#define ADC_SLOW_CFG_BW_FULL_VAL \
|
||||
((0x1 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK)
|
||||
|
||||
/** input channel selection IN0 - IN7 */
|
||||
#define ADC_SLOW_CFG_IN_OFST (9)
|
||||
@ -684,28 +683,27 @@
|
||||
/** input channel configuration */
|
||||
#define ADC_SLOW_CFG_INCC_OFST (12)
|
||||
#define ADC_SLOW_CFG_INCC_MSK (0x00000007 << ADC_SLOW_CFG_INCC_OFST)
|
||||
#define ADC_SLOW_CFG_INCC_BPLR_DFFRNTL_PRS_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_BPLR_DFFRNTL_PRS_VAL \
|
||||
((0x0 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
#define ADC_SLOW_CFG_INCC_BPLR_IN_COM_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_BPLR_IN_COM_VAL \
|
||||
((0x2 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
#define ADC_SLOW_CFG_INCC_TMP_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_TMP_VAL \
|
||||
((0x3 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_DFFRNTL_PRS_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_DFFRNTL_PRS_VAL \
|
||||
((0x4 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_IN_COM_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_IN_COM_VAL \
|
||||
((0x6 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL \
|
||||
#define ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL \
|
||||
((0x7 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK)
|
||||
|
||||
/** configuration update */
|
||||
#define ADC_SLOW_CFG_CFG_OFST (15)
|
||||
#define ADC_SLOW_CFG_CFG_MSK (0x00000001 << ADC_SLOW_CFG_CFG_OFST)
|
||||
#define ADC_SLOW_CFG_CFG_NO_UPDATE_VAL \
|
||||
#define ADC_SLOW_CFG_CFG_NO_UPDATE_VAL \
|
||||
((0x0 << ADC_SLOW_CFG_CFG_OFST) & ADC_SLOW_CFG_CFG_MSK)
|
||||
#define ADC_SLOW_CFG_CFG_OVRWRTE_VAL \
|
||||
#define ADC_SLOW_CFG_CFG_OVRWRTE_VAL \
|
||||
((0x1 << ADC_SLOW_CFG_CFG_OFST) & ADC_SLOW_CFG_CFG_MSK)
|
||||
|
||||
|
||||
/* Slow ADC SPI Value Control register */
|
||||
#define ADC_SLOW_CTRL_REG (0x95 << MEM_MAP_SHIFT)
|
||||
|
||||
|
@ -1487,31 +1487,33 @@ int getSlowADC(int ichan) {
|
||||
|
||||
// configure for channel
|
||||
bus_w(ADC_SLOW_CFG_REG,
|
||||
// don't read back config reg
|
||||
ADC_SLOW_CFG_RB_MSK |
|
||||
// disable sequencer (different from config)
|
||||
ADC_SLOW_CFG_SEQ_DSBLE_VAL |
|
||||
// Internal reference. REF = 2.5V buffered output. Temperature sensor
|
||||
// enabled.
|
||||
ADC_SLOW_CFG_REF_INT_2500MV_VAL |
|
||||
// full bandwidth of low pass filter
|
||||
ADC_SLOW_CFG_BW_FULL_VAL |
|
||||
// specific channel (different from config)
|
||||
((ichan << ADC_SLOW_CFG_IN_OFST) & ADC_SLOW_CFG_IN_MSK) |
|
||||
// input channel configuration (unipolar. inx to gnd)
|
||||
ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL |
|
||||
// overwrite configuration
|
||||
ADC_SLOW_CFG_CFG_OVRWRTE_VAL);
|
||||
|
||||
// don't read back config reg
|
||||
ADC_SLOW_CFG_RB_MSK |
|
||||
// disable sequencer (different from config)
|
||||
ADC_SLOW_CFG_SEQ_DSBLE_VAL |
|
||||
// Internal reference. REF = 2.5V buffered output. Temperature
|
||||
// sensor enabled.
|
||||
ADC_SLOW_CFG_REF_INT_2500MV_VAL |
|
||||
// full bandwidth of low pass filter
|
||||
ADC_SLOW_CFG_BW_FULL_VAL |
|
||||
// specific channel (different from config)
|
||||
((ichan << ADC_SLOW_CFG_IN_OFST) & ADC_SLOW_CFG_IN_MSK) |
|
||||
// input channel configuration (unipolar. inx to gnd)
|
||||
ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL |
|
||||
// overwrite configuration
|
||||
ADC_SLOW_CFG_CFG_OVRWRTE_VAL);
|
||||
|
||||
// start converting
|
||||
bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) | ADC_SLOW_CTRL_STRT_MSK);
|
||||
bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK);
|
||||
bus_w(ADC_SLOW_CTRL_REG,
|
||||
bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK);
|
||||
|
||||
// wait for it to be done
|
||||
volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST);
|
||||
volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >>
|
||||
ADC_SLOW_CTRL_DONE_OFST);
|
||||
while (!done) {
|
||||
done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST);
|
||||
done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >>
|
||||
ADC_SLOW_CTRL_DONE_OFST);
|
||||
}
|
||||
|
||||
// readout
|
||||
@ -1522,16 +1524,18 @@ int getSlowADC(int ichan) {
|
||||
int regMinuv = 0;
|
||||
int maxSteps = 0xFFFF + 1;
|
||||
int retval = 0;
|
||||
if (ConvertToDifferentRange(0, maxSteps, regMinuv, refMaxuv, regval, &retval) == FAIL) {
|
||||
LOG(logERROR, ("Could not convert slow adc channel (regval:0x%x) to uv\n", regval));
|
||||
return -1;
|
||||
if (ConvertToDifferentRange(0, maxSteps, regMinuv, refMaxuv, regval,
|
||||
&retval) == FAIL) {
|
||||
LOG(logERROR,
|
||||
("Could not convert slow adc channel (regval:0x%x) to uv\n",
|
||||
regval));
|
||||
return -1;
|
||||
}
|
||||
|
||||
LOG(logINFO,
|
||||
("\tRead slow adc [%d]: %d uV (reg: 0x%x)\n", ichan, retval, regval));
|
||||
|
||||
return retval;
|
||||
|
||||
}
|
||||
|
||||
int getSlowADCTemperature() {
|
||||
@ -1539,30 +1543,33 @@ int getSlowADCTemperature() {
|
||||
|
||||
// configure for channel
|
||||
bus_w(ADC_SLOW_CFG_REG,
|
||||
// don't read back config reg
|
||||
ADC_SLOW_CFG_RB_MSK |
|
||||
// disable sequencer (different from config)
|
||||
ADC_SLOW_CFG_SEQ_DSBLE_VAL |
|
||||
// Internal reference. REF = 2.5V buffered output. Temperature sensor
|
||||
// enabled.
|
||||
ADC_SLOW_CFG_REF_INT_2500MV_VAL |
|
||||
// full bandwidth of low pass filter
|
||||
ADC_SLOW_CFG_BW_FULL_VAL |
|
||||
// all channels
|
||||
ADC_SLOW_CFG_IN_MSK |
|
||||
// temp sensor
|
||||
ADC_SLOW_CFG_INCC_TMP_VAL |
|
||||
// overwrite configuration
|
||||
ADC_SLOW_CFG_CFG_OVRWRTE_VAL);
|
||||
// don't read back config reg
|
||||
ADC_SLOW_CFG_RB_MSK |
|
||||
// disable sequencer (different from config)
|
||||
ADC_SLOW_CFG_SEQ_DSBLE_VAL |
|
||||
// Internal reference. REF = 2.5V buffered output. Temperature
|
||||
// sensor enabled.
|
||||
ADC_SLOW_CFG_REF_INT_2500MV_VAL |
|
||||
// full bandwidth of low pass filter
|
||||
ADC_SLOW_CFG_BW_FULL_VAL |
|
||||
// all channels
|
||||
ADC_SLOW_CFG_IN_MSK |
|
||||
// temp sensor
|
||||
ADC_SLOW_CFG_INCC_TMP_VAL |
|
||||
// overwrite configuration
|
||||
ADC_SLOW_CFG_CFG_OVRWRTE_VAL);
|
||||
|
||||
// start converting
|
||||
bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) | ADC_SLOW_CTRL_STRT_MSK);
|
||||
bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK);
|
||||
bus_w(ADC_SLOW_CTRL_REG,
|
||||
bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK);
|
||||
|
||||
// wait for it to be done
|
||||
volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST);
|
||||
volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >>
|
||||
ADC_SLOW_CTRL_DONE_OFST);
|
||||
while (!done) {
|
||||
done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST);
|
||||
done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >>
|
||||
ADC_SLOW_CTRL_DONE_OFST);
|
||||
}
|
||||
|
||||
// readout
|
||||
@ -1574,9 +1581,10 @@ int getSlowADCTemperature() {
|
||||
int maxSteps = 0xFFFF + 1;
|
||||
int minmv = 0;
|
||||
int maxmv = 2500;
|
||||
if (ConvertToDifferentRange(0, maxSteps, minmv,
|
||||
maxmv, regval, &retval) == FAIL) {
|
||||
LOG(logERROR, ("Could not convert slow adc temp (regval:0x%x) to uv\n", regval));
|
||||
if (ConvertToDifferentRange(0, maxSteps, minmv, maxmv, regval, &retval) ==
|
||||
FAIL) {
|
||||
LOG(logERROR,
|
||||
("Could not convert slow adc temp (regval:0x%x) to uv\n", regval));
|
||||
return -1;
|
||||
}
|
||||
LOG(logDEBUG1, ("voltage read for temp: %d mV\n", retval));
|
||||
@ -1585,7 +1593,7 @@ int getSlowADCTemperature() {
|
||||
double tempCFor1mv = (25.00 / 283.00);
|
||||
double tempValue = tempCFor1mv * (double)retval;
|
||||
LOG(logINFO, ("\tTemp slow adc : %f °C (reg: %d)\n", tempValue, regval));
|
||||
|
||||
|
||||
return tempValue;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user