diff --git a/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorFunctionList.c b/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorFunctionList.c index f687c1054..9e8e94146 100644 --- a/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorSoftware/jungfrauDetectorServer/slsDetectorFunctionList.c @@ -383,7 +383,7 @@ int powerChip (int on){ bus_w(CHIP_POWER_REG, bus_r(CHIP_POWER_REG) & ~CHIP_POWER_ENABLE_MSK); } } - return bus_r(CHIP_POWER_REG); + return (bus_r(CHIP_POWER_REG & CHIP_POWER_STATUS_MSK) >> CHIP_POWER_STATUS_OFST); } void cleanFifos() { @@ -1147,6 +1147,7 @@ void configurePll() { int setThresholdTemperature(int val) { + if (val >= 0) { printf("\nThreshold Temperature: %d\n", val); @@ -1154,8 +1155,8 @@ int setThresholdTemperature(int val) { #ifdef VERBOSE printf("Converted Threshold Temperature: %d\n", val); #endif - - bus_w(TEMP_CTRL_REG, bus_r(TEMP_CTRL_REG) | (((val << TEMP_CTRL_PROTCT_THRSHLD_OFST) & TEMP_CTRL_PROTCT_THRSHLD_MSK))); + bus_w(TEMP_CTRL_REG, (bus_r(TEMP_CTRL_REG) &~(TEMP_CTRL_PROTCT_THRSHLD_MSK) &~(TEMP_CTRL_OVR_TMP_EVNT_MSK)) + | (((val << TEMP_CTRL_PROTCT_THRSHLD_OFST) & TEMP_CTRL_PROTCT_THRSHLD_MSK))); #ifdef VERBOSE printf("Converted Threshold Temperature set to %d\n", ((bus_r(TEMP_CTRL_REG) & TEMP_CTRL_PROTCT_THRSHLD_MSK) >> TEMP_CTRL_PROTCT_THRSHLD_OFST)); #endif @@ -1176,7 +1177,8 @@ int setTemperatureControl(int val) { // binary value if (val > 0 ) val = 1; printf("\nTemperature control: %d\n", val); - bus_w(TEMP_CTRL_REG, bus_r(TEMP_CTRL_REG) | (((val << TEMP_CTRL_PROTCT_ENABLE_OFST) & TEMP_CTRL_PROTCT_ENABLE_MSK))); + bus_w(TEMP_CTRL_REG, (bus_r(TEMP_CTRL_REG) &~(TEMP_CTRL_PROTCT_ENABLE_MSK) &~(TEMP_CTRL_OVR_TMP_EVNT_MSK)) + | (((val << TEMP_CTRL_PROTCT_ENABLE_OFST) & TEMP_CTRL_PROTCT_ENABLE_MSK))); #ifdef VERBOSE printf("Temperature control set to %d\n", ((bus_r(TEMP_CTRL_REG) & TEMP_CTRL_PROTCT_ENABLE_MSK) >> TEMP_CTRL_PROTCT_ENABLE_OFST)); #endif @@ -1190,7 +1192,8 @@ int setTemperatureEvent(int val) { // set bit to clear it val = 1; printf("\nTemperature Event: %d\n", val); - bus_w(TEMP_CTRL_REG, bus_r(TEMP_CTRL_REG) | (((val << TEMP_CTRL_OVR_TMP_EVNT_OFST) & TEMP_CTRL_OVR_TMP_EVNT_MSK))); + bus_w(TEMP_CTRL_REG, (bus_r(TEMP_CTRL_REG) &~TEMP_CTRL_OVR_TMP_EVNT_MSK) + | (((val << TEMP_CTRL_OVR_TMP_EVNT_OFST) & TEMP_CTRL_OVR_TMP_EVNT_MSK))); #ifdef VERBOSE printf("Temperature Event set to %d\n", ((bus_r(TEMP_CTRL_REG) & TEMP_CTRL_OVR_TMP_EVNT_MSK) >> TEMP_CTRL_OVR_TMP_EVNT_OFST)); #endif @@ -1206,7 +1209,8 @@ int setNetworkParameter(enum NETWORKINDEX mode, int value) { if (value >= 0) { printf("\nSetting transmission delay: %d\n", value); - bus_w(CONFIG_REG, bus_r(CONFIG_REG) | (((value << CONFIG_TDMA_TIMESLOT_OFST) & CONFIG_TDMA_TIMESLOT_MSK))); + bus_w(CONFIG_REG, (bus_r(CONFIG_REG) &~CONFIG_TDMA_TIMESLOT_MSK) + | (((value << CONFIG_TDMA_TIMESLOT_OFST) & CONFIG_TDMA_TIMESLOT_MSK))); #ifdef VERBOSE printf("Transmission delay set to %d\n", ((bus_r(CONFIG_REG) & CONFIG_TDMA_TIMESLOT_MSK) >> CONFIG_TDMA_TIMESLOT_OFST)); #endif diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 28d3bcc23..3e44902cd 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -2641,8 +2641,6 @@ int slsDetector::setThresholdTemperature(int val, int imod) { setErrorMask((getErrorMask())|(TEMPERATURE_CONTROL)); } disconnectStop(); - if (ret==FORCE_UPDATE) - updateDetector(); } } @@ -2683,8 +2681,6 @@ int slsDetector::setTemperatureControl(int val, int imod) { setErrorMask((getErrorMask())|(TEMPERATURE_CONTROL)); } disconnectStop(); - if (ret==FORCE_UPDATE) - updateDetector(); } } @@ -2726,8 +2722,6 @@ int slsDetector::setTemperatureEvent(int val, int imod) { setErrorMask((getErrorMask())|(TEMPERATURE_CONTROL)); } disconnectStop(); - if (ret==FORCE_UPDATE) - updateDetector(); } } diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index 9912c7afa..617343135 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -4733,7 +4733,10 @@ int power_chip(int file_des) { ret=OK; } else { ret=FAIL; - sprintf(mess,"Powering chip failed, wrote %d but read %d\n", arg, retval); + if(setTemperatureEvent(-1) == 1) + sprintf(mess,"Powering chip failed due to over-temperature event. Clear event & power chip again.\n", arg, retval); + else + sprintf(mess,"Powering chip failed, wrote %d but read %d\n", arg, retval); cprintf(RED, "Warning: %s", mess); } }