Internal timer added

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@39 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
bergamaschi
2011-11-03 13:59:28 +00:00
parent 848305f9ac
commit e4543697c7
5 changed files with 49 additions and 6 deletions

View File

@ -13,8 +13,7 @@ INSTMODE= 0777
SRCS= server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c SRCS= server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c trimming_funcs.c sharedmemory.c
OBJS= $(SRCS:%.c=%.o) OBJS= $(SRCS:%.c=%.o)
CFLAGS+= -Wall -DC_ONLY -DMCB_FUNCS CFLAGS+= -Wall -DC_ONLY -DMCB_FUNCS -DVERBOSE
#-DVERBOSE
#-DVERYVERBOSE #-DVERYVERBOSE
#-Werror #-Werror

View File

@ -580,10 +580,14 @@ int64_t set64BitReg(int64_t value, int aLSB, int aMSB){
int64_t get64BitReg(int aLSB, int aMSB){ int64_t get64BitReg(int aLSB, int aMSB){
int64_t v64; int64_t v64;
u_int32_t vLSB,vMSB; u_int32_t vLSB,vMSB;
vLSB=bus_r(aLSB);
vMSB=bus_r(aMSB); vMSB=bus_r(aMSB);
vLSB=bus_r(aLSB);
v64=vMSB; v64=vMSB;
v64=(v64<<32) | vLSB; v64=(v64<<32) | vLSB;
#ifdef VERBOSE
printf("MSB %08x LSB %08x, %016llx\n", vMSB, vLSB, v64);
#endif
return v64; return v64;
} }
@ -699,6 +703,23 @@ int64_t getProgress() {
} }
int64_t getActualTime(){
return get64BitReg(GET_ACTUAL_TIME_LSB_REG, GET_ACTUAL_TIME_MSB_REG)/(1E-9*CLK_FREQ);
}
int64_t getMeasurementTime(){
int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG);
int64_t mask=0x8000000000000000;
if (v & mask ) {
#ifdef VERBOSE
printf("no measurement time left\n");
#endif
return -1E+9;
} else
return v/(1E-9*CLK_FREQ);
}
int64_t getProbes(){ int64_t getProbes(){
u_int32_t shiftin=bus_r(GET_SHIFT_IN_REG); u_int32_t shiftin=bus_r(GET_SHIFT_IN_REG);

View File

@ -78,7 +78,8 @@ int64_t getProbes();
int64_t getProgress(); int64_t getProgress();
int64_t setProgress(); int64_t setProgress();
int64_t getActualTime();
int64_t getMeasurementTime();
u_int32_t runBusy(void); u_int32_t runBusy(void);
u_int32_t runState(void); u_int32_t runState(void);

View File

@ -52,10 +52,17 @@
#define SET_TRAINS_LSB_REG 0x01E000 #define SET_TRAINS_LSB_REG 0x01E000
#define SET_TRAINS_MSB_REG 0x01F000 #define SET_TRAINS_MSB_REG 0x01F000
#define GET_TRAINS_LSB_REG 0x020000 #define GET_TRAINS_LSB_REG 0x020000
#define GET_TRAINS_MSB_REG 0x021000 #define GET_TRAINS_MSB_REG 0x021000
#define GET_SHIFT_IN_REG 0x022000 #define GET_SHIFT_IN_REG 0x022000
#define GET_MEASUREMENT_TIME_LSB_REG 0x023000
#define GET_MEASUREMENT_TIME_MSB_REG 0x024000
#define GET_ACTUAL_TIME_LSB_REG 0x025000
#define GET_ACTUAL_TIME_MSB_REG 0x026000
#define MOD_DACS1_REG 0x030000 #define MOD_DACS1_REG 0x030000
#define MOD_DACS2_REG 0x040000 #define MOD_DACS2_REG 0x040000

View File

@ -74,7 +74,7 @@ int decode_function() {
#endif #endif
n = receiveDataOnly(&fnum,sizeof(fnum)); n = receiveDataOnly(&fnum,sizeof(fnum));
if (n <= 0) { if (n <= 0) {
printf("ERROR reading from socket %d", n); printf("ERROR reading from socket %d\n", n);
return FAIL; return FAIL;
} }
#ifdef VERBOSE #ifdef VERBOSE
@ -1965,6 +1965,12 @@ int get_time_left(int fnum) {
case PROGRESS: case PROGRESS:
retval=getProgress(); retval=getProgress();
break; break;
case ACTUAL_TIME:
retval=getActualTime();
break;
case MEASUREMENT_TIME:
retval=getMeasurementTime();
break;
default: default:
ret=FAIL; ret=FAIL;
sprintf(mess,"timer index unknown %d\n",ind); sprintf(mess,"timer index unknown %d\n",ind);
@ -1976,12 +1982,21 @@ int get_time_left(int fnum) {
printf("get time left failed\n"); printf("get time left failed\n");
} }
#ifdef VERBOSE
printf("time left on timer %d is %lld\n",ind, retval);
#endif
n = sendDataOnly(&ret,sizeof(ret)); n = sendDataOnly(&ret,sizeof(ret));
if (ret!=OK) { if (ret!=OK) {
n += sendDataOnly(mess,sizeof(mess)); n += sendDataOnly(mess,sizeof(mess));
} else { } else {
n = sendDataOnly(&retval,sizeof(retval)); n = sendDataOnly(&retval,sizeof(retval));
} }
#ifdef VERBOSE
printf("data sent\n");
#endif
return ret; return ret;