mythen3: connected busy signal insttead of timer

This commit is contained in:
maliakal_d 2019-12-10 11:03:27 +01:00
parent af9b25fd67
commit 086cbacd84
4 changed files with 59 additions and 55 deletions

View File

@ -96,15 +96,13 @@
#define CONFIG_DYNAMIC_RANGE_16_VAL ((0x2 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK) #define CONFIG_DYNAMIC_RANGE_16_VAL ((0x2 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
#define CONFIG_DYNAMIC_RANGE_24_VAL ((0x3 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK) #define CONFIG_DYNAMIC_RANGE_24_VAL ((0x3 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
/* Control RW register */ // assumed for MY3 /* Control RW register */
#define CONTROL_REG (0x21 * REG_OFFSET + BASE_CONTROL) #define CONTROL_REG (0x21 * REG_OFFSET + BASE_CONTROL)
#define CONTROL_STRT_ACQSTN_OFST (0) #define CONTROL_STRT_ACQSTN_OFST (0)
#define CONTROL_STRT_ACQSTN_MSK (0x00000001 << CONTROL_STRT_ACQSTN_OFST) #define CONTROL_STRT_ACQSTN_MSK (0x00000001 << CONTROL_STRT_ACQSTN_OFST)
#define CONTROL_STP_ACQSTN_OFST (1) #define CONTROL_STP_ACQSTN_OFST (1)
#define CONTROL_STP_ACQSTN_MSK (0x00000001 << CONTROL_STP_ACQSTN_OFST) #define CONTROL_STP_ACQSTN_MSK (0x00000001 << CONTROL_STP_ACQSTN_OFST)
//#define CONTROL_RN_BSY_OFST (2) // assumed for MY3 TODO
//#define CONTROL_RN_BSY_MSK (0x00000001 << CONTROL_RN_BSY_OFST)
#define CONTROL_CRE_RST_OFST (10) #define CONTROL_CRE_RST_OFST (10)
#define CONTROL_CRE_RST_MSK (0x00000001 << CONTROL_CRE_RST_OFST) #define CONTROL_CRE_RST_MSK (0x00000001 << CONTROL_CRE_RST_OFST)
#define CONTROL_PRPHRL_RST_OFST (11) // Only GBE10? #define CONTROL_PRPHRL_RST_OFST (11) // Only GBE10?
@ -125,6 +123,18 @@
/* Pattern status Register*/ /* Pattern status Register*/
#define PAT_STATUS_REG (0x00 * REG_OFFSET + BASE_PATTERN_CONTROL) #define PAT_STATUS_REG (0x00 * REG_OFFSET + BASE_PATTERN_CONTROL)
#define PAT_STATUS_RUN_BUSY_OFST (0)
#define PAT_STATUS_RUN_BUSY_MSK (0x00000001 << PAT_STATUS_RUN_BUSY_OFST)
#define PAT_STATUS_WAIT_FOR_TRGGR_OFST (0)
#define PAT_STATUS_WAIT_FOR_TRGGR_MSK (0x00000001 << PAT_STATUS_WAIT_FOR_TRGGR_OFST)
#define PAT_STATUS_DLY_BFRE_TRGGR_OFST (0)
#define PAT_STATUS_DLY_BFRE_TRGGR_MSK (0x00000001 << PAT_STATUS_DLY_BFRE_TRGGR_OFST)
#define PAT_STATUS_FIFO_FULL_OFST (0)
#define PAT_STATUS_FIFO_FULL_MSK (0x00000001 << PAT_STATUS_FIFO_FULL_OFST)
#define PAT_STATUS_DLY_AFTR_TRGGR_OFST (0)
#define PAT_STATUS_DLY_AFTR_TRGGR_MSK (0x00000001 << PAT_STATUS_DLY_AFTR_TRGGR_OFST)
#define PAT_STATUS_CSM_BUSY_OFST (0)
#define PAT_STATUS_CSM_BUSY_MSK (0x00000001 << PAT_STATUS_CSM_BUSY_OFST)
/* Delay left 64bit Register */ /* Delay left 64bit Register */
#define GET_DELAY_LSB_REG (0x02 * REG_OFFSET + BASE_PATTERN_CONTROL) #define GET_DELAY_LSB_REG (0x02 * REG_OFFSET + BASE_PATTERN_CONTROL)

View File

@ -17,10 +17,6 @@
#include <pthread.h> #include <pthread.h>
#include <time.h> #include <time.h>
#endif #endif
// ------------------------------------------
#include <time.h>
// ------------------------------------------
// Global variable from slsDetectorServer_funcs // Global variable from slsDetectorServer_funcs
extern int debugflag; extern int debugflag;
@ -35,9 +31,6 @@ pthread_t pthread_virtual_tid;
int virtual_status = 0; int virtual_status = 0;
int virtual_stop = 0; int virtual_stop = 0;
#endif #endif
// ------------------------------------------
int temp_status = 0;
// ------------------------------------------
int32_t clkPhase[NUM_CLOCKS] = {0, 0, 0, 0, 0}; int32_t clkPhase[NUM_CLOCKS] = {0, 0, 0, 0, 0};
uint32_t clkFrequency[NUM_CLOCKS] = {0, 0, 0, 0, 0}; uint32_t clkFrequency[NUM_CLOCKS] = {0, 0, 0, 0, 0};
@ -69,7 +62,7 @@ void basictests() {
} }
return; return;
#else #else
FILE_LOG(logINFOBLUE, ("******** Mythen3 Server: do the checks *****************\n")); FILE_LOG(logINFOBLUE, ("************ Mythen3 Server *********************\n"));
if (mapCSP0() == FAIL) { if (mapCSP0() == FAIL) {
strcpy(initErrorMessage, strcpy(initErrorMessage,
"Could not map to memory. Dangerous to continue.\n"); "Could not map to memory. Dangerous to continue.\n");
@ -97,7 +90,7 @@ void basictests() {
if (fwversion >= MIN_REQRD_VRSN_T_RD_API) if (fwversion >= MIN_REQRD_VRSN_T_RD_API)
sw_fw_apiversion = getFirmwareAPIVersion(); sw_fw_apiversion = getFirmwareAPIVersion();
FILE_LOG(logINFOBLUE, ("************ Mythen3 Server *********************\n" FILE_LOG(logINFOBLUE, ("*************************************************\n"
"Hardware Version:\t\t 0x%x\n" "Hardware Version:\t\t 0x%x\n"
"Detector IP Addr:\t\t 0x%x\n" "Detector IP Addr:\t\t 0x%x\n"
@ -1230,9 +1223,6 @@ int startStateMachine(){
FILE_LOG(logINFOBLUE, ("Starting State Machine\n")); FILE_LOG(logINFOBLUE, ("Starting State Machine\n"));
cleanFifos(); cleanFifos();
// ------------------------------------------
temp_status = 1;
// ------------------------------------------
//start state machine //start state machine
bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_STRT_ACQSTN_MSK); bus_w(CONTROL_REG, bus_r(CONTROL_REG) | CONTROL_STRT_ACQSTN_MSK);
@ -1311,45 +1301,53 @@ enum runStatus getRunStatus(){
} }
#endif #endif
FILE_LOG(logDEBUG1, ("Getting status\n")); FILE_LOG(logDEBUG1, ("Getting status\n"));
uint32_t retval = bus_r(PAT_STATUS_REG);
FILE_LOG(logINFO, ("Status Register: %08x\n",retval));
// ------------------------------------------ enum runStatus s;
//uint32_t retval = bus_r(STATUS_REG);
//FILE_LOG(logINFO, ("Status Register: %08x\n",retval));
//running //running
if (temp_status) { if (retval & PAT_STATUS_RUN_BUSY_MSK) {
//if(retval & CONTROL_RN_BSY_MSK) { if (retval & PAT_STATUS_WAIT_FOR_TRGGR_MSK) {
// ------------------------------------------ FILE_LOG(logINFOBLUE, ("Status: WAITING\n"));
FILE_LOG(logINFOBLUE, ("Status: Running\n")); s = WAITING;
return RUNNING; } else {
if (retval & PAT_STATUS_DLY_BFRE_TRGGR_MSK) {
FILE_LOG(logINFO, ("Status: Delay before Trigger\n"));
} else if (retval & PAT_STATUS_DLY_AFTR_TRGGR_MSK) {
FILE_LOG(logINFO, ("Status: Delay after Trigger\n"));
} }
return IDLE; FILE_LOG(logINFOBLUE, ("Status: RUNNING\n"));
s = RUNNING;
}
}
//not running
else {
// stopped or error
if (retval & PAT_STATUS_FIFO_FULL_MSK) {
FILE_LOG(logINFOBLUE, ("Status: STOPPED\n")); //FIFO FULL??
s = STOPPED;
} else if (retval & PAT_STATUS_CSM_BUSY_MSK) {
FILE_LOG(logINFOBLUE, ("Status: READ MACHINE BUSY\n"));
s = TRANSMITTING;
} else if (!retval) {
FILE_LOG(logINFOBLUE, ("Status: IDLE\n"));
s = IDLE;
} else {
FILE_LOG(logERROR, ("Status: Unknown status %08x\n", retval));
s = ERROR;
}
}
return s;
} }
void readFrame(int *ret, char *mess){ void readFrame(int *ret, char *mess){
// wait for status to be done // wait for status to be done
while(runBusy()){
// ------------------------------------------ usleep(500);
//while(runBusy()){
// usleep(500);
//}
int64_t periodns = getPeriod();
int numFrames = getNumFrames();
int frameNr = 0;
// loop over number of frames
for(frameNr=0; frameNr!= numFrames; ++frameNr ) {
// sleep for exposure time
struct timespec begin, end;
clock_gettime(CLOCK_REALTIME, &begin);
usleep(periodns / 1000);
clock_gettime(CLOCK_REALTIME, &end);
} }
usleep(1 * 1000 * 1000);
temp_status = 0;
// ------------------------------------------
#ifdef VIRTUAL #ifdef VIRTUAL
FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n")); FILE_LOG(logINFOGREEN, ("acquisition successfully finished\n"));
@ -1372,13 +1370,9 @@ u_int32_t runBusy() {
#ifdef VIRTUAL #ifdef VIRTUAL
return virtual_status; return virtual_status;
#endif #endif
u_int32_t s = (bus_r(PAT_STATUS_REG) & PAT_STATUS_RUN_BUSY_MSK);
// ------------------------------------------ FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s));
return temp_status; return s;
//u_int32_t s = (bus_r(CONTROL_REG) & CONTROL_RN_BSY_OFST);
//FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s));
//return s;
// ------------------------------------------
} }
/* common */ /* common */

View File

@ -5,8 +5,8 @@
#define APIGUI 0x190723 #define APIGUI 0x190723
#define APIMOENCH 0x190820 #define APIMOENCH 0x190820
#define APIGOTTHARD2 0x191127 #define APIGOTTHARD2 0x191127
#define APIMYTHEN3 0x191127
#define APIGOTTHARD 0x191127 #define APIGOTTHARD 0x191127
#define APIJUNGFRAU 0x191127 #define APIJUNGFRAU 0x191127
#define APICTB 0x191210 #define APICTB 0x191210
#define APIEIGER 0x191210 #define APIEIGER 0x191210
#define APIMYTHEN3 0x191210