From 134611c6386a2ebedb6f107f0feb70aeb6430a6c Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Tue, 3 Mar 2020 17:49:28 +0100 Subject: [PATCH] gotthard2: switching between period and burst period (not delay and burst period), internal frequency depending on timing source (for all except actualtime and measurement time) --- .../gotthard2DetectorServer/RegisterDefs.h | 4 +- .../bin/gotthard2DetectorServer_developer | Bin 183192 -> 183188 bytes .../slsDetectorFunctionList.c | 69 ++++++++---------- .../slsDetectorServer_defs.h | 1 + slsSupportLib/include/versionAPI.h | 2 +- 5 files changed, 36 insertions(+), 40 deletions(-) diff --git a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h index 1cf6c46ba..e9ad5e392 100644 --- a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h @@ -228,7 +228,7 @@ #define SET_DELAY_LSB_REG (0x22 * REG_OFFSET + BASE_FLOW_CONTROL) #define SET_DELAY_MSB_REG (0x23 * REG_OFFSET + BASE_FLOW_CONTROL) -/* Cylces 64bit Write-register */ +/* Cylces (also #bursts) 64bit Write-register */ #define SET_CYCLES_LSB_REG (0x24 * REG_OFFSET + BASE_FLOW_CONTROL) #define SET_CYCLES_MSB_REG (0x25 * REG_OFFSET + BASE_FLOW_CONTROL) @@ -236,7 +236,7 @@ #define SET_FRAMES_LSB_REG (0x26 * REG_OFFSET + BASE_FLOW_CONTROL) #define SET_FRAMES_MSB_REG (0x27 * REG_OFFSET + BASE_FLOW_CONTROL) -/* Period 64bit Write-register */ +/* Period (also burst period) 64bit Write-register */ #define SET_PERIOD_LSB_REG (0x28 * REG_OFFSET + BASE_FLOW_CONTROL) #define SET_PERIOD_MSB_REG (0x29 * REG_OFFSET + BASE_FLOW_CONTROL) diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer index 2bdf2b037acdc58e7a607e8d0a2f23ab3a0071c7..83d731e553492e69ed52c719b9b21159e331c41a 100755 GIT binary patch delta 53398 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 delta 53341 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 diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 59773421c..8d2143b59 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -39,6 +39,7 @@ int virtual_stop = 0; enum detectorSettings thisSettings = UNINITIALIZED; int32_t clkPhase[NUM_CLOCKS] = {}; uint32_t clkFrequency[NUM_CLOCKS] = {}; +uint32_t systemFrequency = 0; int highvoltage = 0; int dacValues[NDAC] = {0}; int onChipdacValues[ONCHIP_NDAC][NCHIP] = {0}; @@ -49,7 +50,6 @@ uint8_t adcConfiguration[NCHIP][NADC]; int burstMode = BURST_INTERNAL; int64_t numTriggers = 1; int64_t numBursts = 1; -int64_t delayAfterTriggerNs = 0; int64_t burstPeriodNs = 0; int detPos[2] = {}; @@ -346,6 +346,7 @@ void setupDetector() { clkFrequency[SYSTEM_C1] = DEFAULT_SYSTEM_C1; clkFrequency[SYSTEM_C2] = DEFAULT_SYSTEM_C2; clkFrequency[SYSTEM_C3] = DEFAULT_SYSTEM_C3; + systemFrequency = INT_SYSTEM_C0_FREQUENCY; detPos[0] = 0; detPos[1] = 0; @@ -356,7 +357,6 @@ void setupDetector() { burstMode = BURST_INTERNAL; numTriggers = 1; numBursts = 1; - delayAfterTriggerNs = 0; burstPeriodNs = 0; { int i, j; @@ -394,6 +394,7 @@ void setupDetector() { // on chip dacs ASIC_Driver_SetDefines(ONCHIP_DAC_DRIVER_FILE_NAME); #endif + setTimingSource(DEFAULT_TIMING_SOURCE); // Default values setHighVoltage(DEFAULT_HIGH_VOLTAGE); @@ -448,7 +449,6 @@ void setupDetector() { setBurstPeriod(DEFAULT_BURST_PERIOD); setTiming(DEFAULT_TIMING_MODE); setCurrentSource(DEFAULT_CURRENT_SOURCE); - setTimingSource(DEFAULT_TIMING_SOURCE); } int readConfigFile() { @@ -867,12 +867,12 @@ int setExptimeCont(int64_t val) { } int setExptimeBoth(int64_t val) { - val *= (1E-9 * clkFrequency[SYSTEM_C0]); + val *= (1E-9 * systemFrequency); set64BitReg(val, ASIC_INT_EXPTIME_LSB_REG, ASIC_INT_EXPTIME_MSB_REG); // validate for tolerance int64_t retval = getExptimeBoth(); - val /= (1E-9 * clkFrequency[SYSTEM_C0]); + val /= (1E-9 * systemFrequency); if (val != retval) { return FAIL; } @@ -880,18 +880,18 @@ int setExptimeBoth(int64_t val) { } int64_t getExptimeBoth() { - return get64BitReg(ASIC_INT_EXPTIME_LSB_REG, ASIC_INT_EXPTIME_MSB_REG) / (1E-9 * clkFrequency[SYSTEM_C0]); + return get64BitReg(ASIC_INT_EXPTIME_LSB_REG, ASIC_INT_EXPTIME_MSB_REG) / (1E-9 * systemFrequency); } int setPeriodBurst(int64_t val) { FILE_LOG(logINFO, ("Setting period %lld ns [Burst mode]\n", val)); - val *= (1E-9 * clkFrequency[SYSTEM_C0]); + val *= (1E-9 * systemFrequency); set64BitReg(val, ASIC_INT_PERIOD_LSB_REG, ASIC_INT_PERIOD_MSB_REG); // validate for tolerance int64_t retval = getPeriodBurst(); - val /= (1E-9 * clkFrequency[SYSTEM_C0]); + val /= (1E-9 * systemFrequency); if (val != retval) { return FAIL; } @@ -900,17 +900,17 @@ int setPeriodBurst(int64_t val) { int64_t getPeriodBurst() { FILE_LOG(logDEBUG, ("Getting period [Burst mode]\n")); - return get64BitReg(ASIC_INT_PERIOD_LSB_REG, ASIC_INT_PERIOD_MSB_REG)/ (1E-9 * clkFrequency[SYSTEM_C0]); + return get64BitReg(ASIC_INT_PERIOD_LSB_REG, ASIC_INT_PERIOD_MSB_REG)/ (1E-9 * systemFrequency); } int setPeriodCont(int64_t val) { FILE_LOG(logINFO, ("Setting period %lld ns [Continuous mode]\n", val)); - val *= (1E-9 * FIXED_PLL_FREQUENCY); + val *= (1E-9 * systemFrequency); set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); // validate for tolerance int64_t retval = getPeriodCont(); - val /= (1E-9 * FIXED_PLL_FREQUENCY); + val /= (1E-9 * systemFrequency); if (val != retval) { return FAIL; } @@ -919,7 +919,7 @@ int setPeriodCont(int64_t val) { int64_t getPeriodCont() { FILE_LOG(logDEBUG, ("Getting period [Continuous mode]\n")); - return get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG)/ (1E-9 * FIXED_PLL_FREQUENCY); + return get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG)/ (1E-9 * systemFrequency); } int setDelayAfterTrigger(int64_t val) { @@ -928,17 +928,12 @@ int setDelayAfterTrigger(int64_t val) { return FAIL; } FILE_LOG(logINFO, ("Setting delay after trigger %lld ns\n", val)); - delayAfterTriggerNs = val; - val *= (1E-9 * FIXED_PLL_FREQUENCY); - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { - FILE_LOG(logINFO, ("\tBurst and Auto mode: not writing delay to register\n")); - } else { - set64BitReg(val, SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG); - } + val *= (1E-9 * systemFrequency); + set64BitReg(val, SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG); // validate for tolerance int64_t retval = getDelayAfterTrigger(); - val /= (1E-9 * FIXED_PLL_FREQUENCY); + val /= (1E-9 * systemFrequency); if (val != retval) { return FAIL; } @@ -946,10 +941,7 @@ int setDelayAfterTrigger(int64_t val) { } int64_t getDelayAfterTrigger() { - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { - return delayAfterTriggerNs; - } - return get64BitReg(SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG) / (1E-9 * FIXED_PLL_FREQUENCY); + return get64BitReg(SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG) / (1E-9 * systemFrequency); } int setBurstPeriod(int64_t val) { @@ -959,16 +951,16 @@ int setBurstPeriod(int64_t val) { } FILE_LOG(logINFO, ("Setting burst period %lld ns\n", val)); burstPeriodNs = val; - val *= (1E-9 * FIXED_PLL_FREQUENCY); - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { - set64BitReg(val, SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG); + val *= (1E-9 * systemFrequency); + if (burstMode != BURST_OFF) { + set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG); } else { - FILE_LOG(logINFO, ("\tNot (Burst and Auto mode): not writing burst period to register\n")); + FILE_LOG(logINFO, ("\t(Continuous mode): not writing burst period to register\n")); } // validate for tolerance int64_t retval = getBurstPeriod(); - val /= (1E-9 * FIXED_PLL_FREQUENCY); + val /= (1E-9 * systemFrequency); if (val != retval) { return FAIL; } @@ -976,8 +968,8 @@ int setBurstPeriod(int64_t val) { } int64_t getBurstPeriod() { - if (burstMode != BURST_OFF && getTiming() == AUTO_TIMING) { - return get64BitReg(SET_TRIGGER_DELAY_LSB_REG, SET_TRIGGER_DELAY_MSB_REG) / (1E-9 * FIXED_PLL_FREQUENCY); + if (burstMode != BURST_OFF) { + return get64BitReg(SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) / (1E-9 * systemFrequency); } return burstPeriodNs; } @@ -991,11 +983,11 @@ int64_t getNumTriggersLeft() { } int64_t getDelayAfterTriggerLeft() { - return get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG) / (1E-9 * FIXED_PLL_FREQUENCY); + return get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG) / (1E-9 * systemFrequency); } int64_t getPeriodLeft() { - return get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG) / (1E-9 * FIXED_PLL_FREQUENCY); + return get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG) / (1E-9 * systemFrequency); } int64_t getFramesFromStart() { @@ -1210,8 +1202,6 @@ void setTiming( enum timingMode arg){ FILE_LOG(logINFO, ("\tUpdating trigger/burst and delay/burst period registers\n")) setNumTriggers(numTriggers); setNumBursts(numBursts); - setDelayAfterTrigger(delayAfterTriggerNs); - setBurstPeriod(burstPeriodNs); } enum timingMode getTiming() { @@ -1574,6 +1564,10 @@ int setClockDivider(enum CLKINDEX ind, int val) { ALTERA_PLL_C10_SetOuputFrequency (pllIndex, clkIndex, newfreq); clkFrequency[ind] = newfreq; FILE_LOG(logINFO, ("\t%s clock (%d) divider set to %d (%d Hz)\n", clock_names[ind], ind, val, clkFrequency[ind])); + // update system frequency + if (ind == SYSTEM_C0) { + setTimingSource(getTimingSource()); + } // phase is reset by pll (when setting output frequency) if (ind >= READOUT_C0) { @@ -1890,10 +1884,9 @@ int setBurstMode(enum burstMode burst) { return FAIL; } - FILE_LOG(logINFO, ("\tUpdating trigger/burst and delay/burst period registers\n")) + FILE_LOG(logINFO, ("\tUpdating trigger/burst and burst period registers\n")) setNumTriggers(numTriggers); setNumBursts(numBursts); - setDelayAfterTrigger(delayAfterTriggerNs); setBurstPeriod(burstPeriodNs); // set number of frames and period again (set registers according to timing mode) @@ -1982,10 +1975,12 @@ void setTimingSource(enum timingSourceType value) { case TIMING_INTERNAL: FILE_LOG(logINFO, ("Setting timing source to internal\n")); bus_w(addr, (bus_r(addr) &~ CONTROL_TIMING_SOURCE_EXT_MSK)); + systemFrequency = INT_SYSTEM_C0_FREQUENCY; break; case TIMING_EXTERNAL: FILE_LOG(logINFO, ("Setting timing source to exernal\n")); bus_w(addr, (bus_r(addr) | CONTROL_TIMING_SOURCE_EXT_MSK)); + systemFrequency = clkFrequency[SYSTEM_C0]; break; default: FILE_LOG(logERROR, ("Unknown timing source %d\n", value)); diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h index 0104a0ee3..27ad9568f 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h @@ -54,6 +54,7 @@ /* Firmware Definitions */ #define IP_HEADER_SIZE (20) #define FIXED_PLL_FREQUENCY (20000000) // 20MHz +#define INT_SYSTEM_C0_FREQUENCY (144000000) //144 MHz #define READOUT_PLL_VCO_FREQ_HZ (866666688) // 866 MHz #define SYSTEM_PLL_VCO_FREQ_HZ (722222224) // 722 MHz diff --git a/slsSupportLib/include/versionAPI.h b/slsSupportLib/include/versionAPI.h index b5d4b63ac..47138b7e8 100644 --- a/slsSupportLib/include/versionAPI.h +++ b/slsSupportLib/include/versionAPI.h @@ -9,4 +9,4 @@ #define APIRECEIVER 0x200227 #define APIGUI 0x200227 #define APICTB 0x200227 -#define APIGOTTHARD2 0x200228 +#define APIGOTTHARD2 0x200303