jungfrau storage cell bug fix

This commit is contained in:
maliakal_d 2019-10-22 13:38:17 +02:00
parent f2fc187f13
commit 8c6da7da1b
8 changed files with 11 additions and 12 deletions

View File

@ -435,10 +435,9 @@
#define ASIC_CTRL_DS_TMR_MSK (0x000000FF << ASIC_CTRL_DS_TMR_OFST)
#define ASIC_CTRL_DS_TMR_VAL ((0x1F << ASIC_CTRL_DS_TMR_OFST) & ASIC_CTRL_DS_TMR_MSK)
// tET = (ET + 1) * 25ns (increase timeout range between 2 consecutive storage cells)
#define ASIC_CTRL_EXPSRE_TMR_STEPS (25)
#define ASIC_CTRL_EXPSRE_TMR_OFST (16)
#define ASIC_CTRL_EXPSRE_TMR_MSK (0x0000FFFF << ASIC_CTRL_EXPSRE_TMR_OFST)
#define ASIC_CTRL_EXPSRE_TMR_MAX_VAL (0x0000FFFF / (CLK_RUN * 1E-3))
/* ADC 0 Deserializer Control */

View File

@ -653,7 +653,7 @@ int64_t setTimer(enum timerIndex ind, int64_t val) {
((val << ASIC_CTRL_EXPSRE_TMR_OFST) & ASIC_CTRL_EXPSRE_TMR_MSK));
}
retval = ((bus_r(ASIC_CTRL_REG) & ASIC_CTRL_EXPSRE_TMR_MSK) >> ASIC_CTRL_EXPSRE_TMR_OFST);
retval = (((int64_t)((bus_r(ASIC_CTRL_REG) & ASIC_CTRL_EXPSRE_TMR_MSK) >> ASIC_CTRL_EXPSRE_TMR_OFST))/ (1E-3 * CLK_RUN));
FILE_LOG(logDEBUG1, ("Getting storage cell delay: %lldns\n", (long long int)retval));
break;

View File

@ -86,7 +86,7 @@ enum NETWORKINDEX { TXN_FRAME, FLOWCTRL_10G };
#define MAX_TIMESLOT_VAL (0x1F)
#define MAX_THRESHOLD_TEMP_VAL (127999) //millidegrees
#define MAX_STORAGE_CELL_VAL (15) //0xF
#define MAX_STORAGE_CELL_DLY_NS_VAL ((ASIC_CTRL_EXPSRE_TMR_MSK >> ASIC_CTRL_EXPSRE_TMR_OFST) * ASIC_CTRL_EXPSRE_TMR_STEPS)
#define MAX_STORAGE_CELL_DLY_NS_VAL (ASIC_CTRL_EXPSRE_TMR_MAX_VAL)
#define ACQ_TIME_MIN_CLOCK (2)
#define MAX_PHASE_SHIFTS (160)

View File

@ -1875,7 +1875,7 @@ int set_timer(int file_des) {
case STORAGE_CELL_DELAY:
if (tns > MAX_STORAGE_CELL_DLY_NS_VAL) {
ret = FAIL;
sprintf(mess,"Max Storage cell delay value should not exceed %d ns\n", MAX_STORAGE_CELL_DLY_NS_VAL);
sprintf(mess,"Max Storage cell delay value should not exceed %lld ns\n", (long long unsigned int)MAX_STORAGE_CELL_DLY_NS_VAL);
FILE_LOG(logERROR,(mess));
break;
}

View File

@ -1096,7 +1096,7 @@ class CmdProxy {
"[0-15]\n\t[Jungfrau] Storage cell that stores the first acquisition of the series. Default is 15. For advanced users only.");
TIME_COMMAND(storagecell_delay, getStorageCellDelay, setStorageCellDelay,
"[duration (0-1638375 ns)] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] Additional time delay between 2 storage cells. For advanced users only. Resolution is 25 ns.");
"[duration (0-1638375 ns)] [(optional unit) ns|us|ms|s]\n\t[Jungfrau] Additional time delay between 2 consecutive exposures in burst mode (total time gap = (ET + 1 + 86) * 25ns). For advanced users only.");
/* Gotthard Specific */

View File

@ -645,7 +645,7 @@ TEST_CASE("exptimel", "[.cmd][.gotthard]") {
TEST_CASE("periodl", "[.cmd][.gotthard]") {
if (test::type == slsDetectorDefs::GOTTHARD) {
if (test::type == slsDetectorDefs::GOTTHARD || test::type == slsDetectorDefs::JUNGFRAU) {
REQUIRE_NOTHROW(multiSlsDetectorClient("frames 2", PUT));
REQUIRE_NOTHROW(multiSlsDetectorClient("period 5", PUT));
REQUIRE_NOTHROW(multiSlsDetectorClient("start", PUT));
@ -693,20 +693,20 @@ TEST_CASE("storagecell_delay", "[.cmd][.jungfrau]") {
if (test::type == slsDetectorDefs::JUNGFRAU) {
{
std::ostringstream oss;
multiSlsDetectorClient("storagecell_delay 2.25 ms", PUT, nullptr, oss);
REQUIRE(oss.str() == "storagecell_delay 2.25 ms\n");
multiSlsDetectorClient("storagecell_delay 1.62ms", PUT, nullptr, oss);
REQUIRE(oss.str() == "storagecell_delay 1.62ms\n");
}
{
std::ostringstream oss;
multiSlsDetectorClient("storagecell_delay", GET, nullptr, oss);
REQUIRE(oss.str() == "storagecell_delay 2.25s\n");
REQUIRE(oss.str() == "storagecell_delay 1.62ms\n");
}
{
std::ostringstream oss;
multiSlsDetectorClient("storagecell_delay 0", PUT, nullptr, oss);
REQUIRE(oss.str() == "storagecell_delay 0\n");
}
REQUIRE_THROWS(multiSlsDetectorClient("storagecell_delay 1638400 ns", PUT));
REQUIRE_THROWS(multiSlsDetectorClient("storagecell_delay 1638376ns", PUT));
} else {
REQUIRE_THROWS(multiSlsDetectorClient("storagecell_delay", GET));
}

View File

@ -6,7 +6,7 @@
#define APIMOENCH 0x190820
#define APICTB 0x191011
#define APIGOTTHARD 0x191011
#define APIJUNGFRAU 0x191011
#define APIMYTHEN3 0x191011
#define APIGOTTHARD2 0x191017
#define APIEIGER 0x191021
#define APIJUNGFRAU 0x191022