xilinx: slow adcs (#1405)
All checks were successful
Build on RHEL9 / build (push) Successful in 3m29s
Build on RHEL8 / build (push) Successful in 4m41s
Run Simulator Tests on local RHEL9 / build (push) Successful in 14m42s
Build on local RHEL9 / build (push) Successful in 1m26s
Run Simulator Tests on local RHEL8 / build (push) Successful in 16m59s
Build on local RHEL8 / build (push) Successful in 3m33s

* xilinx: slow adcs

* minor

* xilinx: max reference voltage back to 2500mV for slow adcs ad7689
This commit is contained in:
2026-02-27 17:17:11 +01:00
committed by GitHub
parent a3e6cc90ea
commit 60f5db1224
5 changed files with 46 additions and 29 deletions

View File

@@ -1641,7 +1641,9 @@ int get_adc(int file_des) {
// valid index
if (ret == OK) {
LOG(logDEBUG1, ("Getting ADC %d\n", serverAdcIndex));
#if defined(MYTHEN3D) || defined(GOTTHARD2D) || defined(XILINX_CHIPTESTBOARDD)
#if defined(XILINX_CHIPTESTBOARDD)
ret = getADC(serverAdcIndex, &retval, mess);
#elif defined(MYTHEN3D) || defined(GOTTHARD2D)
ret = getADC(serverAdcIndex, &retval);
if (ret == FAIL) {
if (ind == TEMPERATURE_FPGA) {

View File

@@ -1482,11 +1482,8 @@ int setPower(enum DACINDEX ind, int val, char *mess) {
return OK;
}
int getADC(enum ADCINDEX ind, int *value) {
int getADC(enum ADCINDEX ind, int *value, char *mess) {
*value = 0;
#ifdef VIRTUAL
return OK;
#endif
switch (ind) {
// slow adcs
case S_ADC0:
@@ -1498,44 +1495,60 @@ int getADC(enum ADCINDEX ind, int *value) {
case S_ADC6:
case S_ADC7:
LOG(logDEBUG1, ("Reading Slow ADC Channel %d\n", (int)ind - S_ADC0));
return getSlowADC((int)ind - S_ADC0, value);
return getSlowADC((int)ind - S_ADC0, value, mess);
case TEMP_FPGA:
LOG(logDEBUG1, ("Reading FPGA Temperature\n"));
return getTemperature(value);
return getTemperature(value, mess);
default:
LOG(logERROR, ("Adc Index %d not defined \n", (int)ind));
snprintf(mess, MAX_STR_LENGTH, "Adc Index %d not defined\n", (int)ind);
LOG(logERROR, (mess));
return FAIL;
}
}
int getSlowADC(int ichan, int *retval) {
int getSlowADC(int ichan, int *retval, char *mess) {
*retval = 0;
#ifndef VIRTUAL
int fval = 0;
#ifdef VIRTUAL
fval = 1;
#else
char fname[MAX_STR_LENGTH];
memset(fname, 0, MAX_STR_LENGTH);
sprintf(fname, SLOWADC_DRIVER_FILE_NAME, ichan);
LOG(logDEBUG1, ("fname %s\n", fname));
if (readParameterFromFile(fname, "slow adc", retval) == FAIL) {
LOG(logERROR, ("Could not get slow adc\n"));
if (readParameterFromFile(fname, "slow adc", &fval) == FAIL) {
snprintf(mess, MAX_STR_LENGTH, "Could not read slow adc channel %d\n",
ichan);
LOG(logERROR, (mess));
return FAIL;
}
// TODO assuming already converted to uV
// convert to uV
// double value = SLOWDAC_CONVERTION_FACTOR_TO_UV * (double)(*retval);
// LOG(logINFO, ("Slow ADC [%d]: %f uV\n", ichan, value));
//*retval = (int)value;
LOG(logINFO, ("Slow ADC [%d]: %d uV\n", ichan, (*retval)));
#endif
// value in uV
int refMaxuv = SLOW_ADC_MAX_MV * 1000;
int regMinuv = 0;
int maxSteps = SLOW_ADC_MAX_STEPS;
if (ConvertToDifferentRange(0, maxSteps, regMinuv, refMaxuv, fval,
retval) == FAIL) {
snprintf(mess, MAX_STR_LENGTH,
"Could not convert slow adc channel (fval:0x%x) to uv\n",
fval);
LOG(logERROR, (mess));
return -1;
}
LOG(logINFO,
("\tSlow adc [%d]: %d uV (reg: 0x%x)\n", ichan, *retval, fval));
return OK;
}
int getTemperature(int *retval) {
int getTemperature(int *retval, char *mess) {
*retval = 0;
#ifndef VIRTUAL
if (readParameterFromFile(TEMP_DRIVER_FILE_NAME, "temperature", retval) ==
FAIL) {
snprintf(mess, MAX_STR_LENGTH, "Could not read temperature\n");
LOG(logERROR, ("Could not get temperature\n"));
return FAIL;
}

View File

@@ -143,9 +143,9 @@ int getPowerRail(enum PWRINDEX ind, int *retval, char *mess);
int getPower(enum DACINDEX ind, int *retval, char *mess);
int setPower(enum DACINDEX ind, int val, char *mess);
int getADC(enum ADCINDEX ind, int *value);
int getSlowADC(int ichan, int *retval);
int getTemperature(int *retval);
int getADC(enum ADCINDEX ind, int *value, char *mess);
int getSlowADC(int ichan, int *retval, char *mess);
int getTemperature(int *retval, char *mess);
int setHighVoltage(int val);
// parameters - timing, extsig

View File

@@ -65,11 +65,13 @@
#define MAX_ANALOG_SAMPLES (0x3FFF)
#define MAX_DIGITAL_SAMPLES (0x3FFF)
#define DAC_MIN_MV (0)
#define DAC_MAX_MV (2048)
#define POWER_RGLTR_MIN (1041)
#define POWER_RGLTR_MAX (2661)
#define VIO_MIN_MV (1200) // for fpga to function
#define DAC_MIN_MV (0)
#define DAC_MAX_MV (2048)
#define POWER_RGLTR_MIN (1041)
#define POWER_RGLTR_MAX (2661)
#define VIO_MIN_MV (1200) // for fpga to function
#define SLOW_ADC_MAX_MV (2500) // AD7689
#define SLOW_ADC_MAX_STEPS (0xFFFF + 1) // AD7689
/* Defines in the Firmware */
#define WAIT_TIME_PATTERN_READ (10)