diff --git a/slsDetectorSoftware/jungfrauDetectorServer/Makefile b/slsDetectorSoftware/jungfrauDetectorServer/Makefile index af9c684c4..928dae653 100755 --- a/slsDetectorSoftware/jungfrauDetectorServer/Makefile +++ b/slsDetectorSoftware/jungfrauDetectorServer/Makefile @@ -9,7 +9,7 @@ CC = $(CROSS)gcc CFLAGS += -Wall -DMOENCHD -DMCB_FUNCS -DDACS_INT -DDEBUG #-DVERBOSE #-DVERYVERBOSE #-DVIRTUAL #-DDACS_INT_CSERVER -PROGS= jungfrauDetectorServer +PROGS= jungfrauDetectorServer INSTDIR= /tftpboot INSTMODE= 0777 @@ -23,12 +23,20 @@ OBJS = $(SRCS:%.c=%.o) all: clean $(PROGS) +test: clean jungfrauADCTEst + boot: $(OBJS) -$(PROGS): $(OBJS) +jungfrauDetectorServer: $(OBJS) echo $(OBJS) $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) +jungfrauADCTEst: $(OBJS) + echo $(OBJS) + $(CC) $(CFLAGS) -o $@ $^ $(LDLIBS_$@) $(LDFLAGS_$@) -DTESTADC + + + install: $(PROGS) $(INSTALL) -d $(INSTDIR) diff --git a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c index 204ff3dde..18f74c469 100755 --- a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c @@ -1,3 +1,5 @@ +//#define TESTADC + #include "server_defs.h" #include "firmware_funcs.h" @@ -48,7 +50,7 @@ int phase_shift=0;//DEFAULT_PHASE_SHIFT; int ipPacketSize=DEFAULT_IP_PACKETSIZE; int udpPacketSize=DEFAULT_UDP_PACKETSIZE; -u_int32_t clkDivider[2]={32,32}; +u_int32_t clkDivider[2]={160,32}; int ififostart, ififostop, ififostep, ififo; @@ -263,42 +265,42 @@ int setPhaseShiftOnce(){ int cleanFifo(){ - u_int32_t addr, reg, val, adc_sync; - printf("Cleaning FIFO\n"); - addr=ADC_SYNC_REG; +/* u_int32_t addr, reg, val, adc_sync; */ +/* printf("Cleaning FIFO\n"); */ +/* addr=ADC_SYNC_REG; */ - if(withGotthard) - adc_sync = GOTTHARD_ADCSYNC_VAL; - else - adc_sync = ADCSYNC_VAL; +/* if(withGotthard) */ +/* adc_sync = GOTTHARD_ADCSYNC_VAL; */ +/* else */ +/* adc_sync = ADCSYNC_VAL; */ - reg = bus_r(addr) & CLEAN_FIFO_MASK; +/* reg = bus_r(addr) & CLEAN_FIFO_MASK; */ - //only for start up - if(!reg) reg = adc_sync; +/* //only for start up */ +/* if(!reg) reg = adc_sync; */ - // 88 3 02111 - if (ROI_flag==0) { - val=reg | ADCSYNC_CLEAN_FIFO_BITS | TOKEN_RESTART_DELAY; - bus_w(addr,val); - // 88 0 02111 - val=reg | TOKEN_RESTART_DELAY; - bus_w(addr,val); - } - else { - //1b332214 - val=reg | ADCSYNC_CLEAN_FIFO_BITS | TOKEN_RESTART_DELAY_ROI; - bus_w(addr,val); - //1b032214 - val=reg | TOKEN_RESTART_DELAY_ROI; - bus_w(addr,val); +/* // 88 3 02111 */ +/* if (ROI_flag==0) { */ +/* val=reg | ADCSYNC_CLEAN_FIFO_BITS | TOKEN_RESTART_DELAY; */ +/* bus_w(addr,val); */ +/* // 88 0 02111 */ +/* val=reg | TOKEN_RESTART_DELAY; */ +/* bus_w(addr,val); */ +/* } */ +/* else { */ +/* //1b332214 */ +/* val=reg | ADCSYNC_CLEAN_FIFO_BITS | TOKEN_RESTART_DELAY_ROI; */ +/* bus_w(addr,val); */ +/* //1b032214 */ +/* val=reg | TOKEN_RESTART_DELAY_ROI; */ +/* bus_w(addr,val); */ - } - reg=bus_r(addr); -//#ifdef DDEBUG - printf("ADC SYNC reg 0x19:%x\n",reg); -//#endif +/* } */ +/* reg=bus_r(addr); */ +/* //#ifdef DDEBUG */ +/* printf("ADC SYNC reg 0x19:%x\n",reg); */ +/* //#endif */ return OK; } @@ -363,21 +365,28 @@ u_int32_t readin(int modnum) { u_int32_t setPllReconfigReg(u_int32_t reg, u_int32_t val, int trig) { - u_int32_t vv=reg<1) return -1; + if (ic==1 && d>40) + return -1; + + if (d>160) + return -1; + + if (tot>510) + return -1; + + if (tot<1) + return -1; - l=tot/2; - h=l; - if (tot>2*l) { - h=l+1; - odd=1; - } - printf("Low is %d, High is %d\n",l,h); - if (l>255 || h>255) - return -1; //values out of range + clkDivider[ic]=d; + bus_w(PLL_CNTRL_REG,(1<2*l) { + h=l+1; + odd=1; + } + printf("Counter %d: Low is %d, High is %d\n",i, l,h); + + + val= (i<<18)| (odd<<17) | l | (h<<8); + + printf("Counter %d, val: %08x\n", i, val); + + setPllReconfigReg(PLL_C_COUNTER_REG, val,0); + usleep(10000); + } + - setPllReconfigReg(PLL_C_COUNTER_REG, val,1); setPllReconfigReg(PLL_START_REG, 1,1); usleep(100000); bus_w(PLL_CNTRL_REG, 0); - clkDivider[ic]=d; return clkDivider[ic]; } @@ -502,6 +536,11 @@ int phaseStep(int st, int ic){ /* ic=0; */ /* st*=-1; */ /* } */ + + bus_w(PLL_CNTRL_REG,(1<>(23-i))&0x1)<>(23-i))&0x1)<alreadyExisting==0) { @@ -250,8 +253,8 @@ multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) // setAngularConversionPointer(detectors[i]->getAngularConversionPointer(),detectors[i]->getNModsPointer(),detectors[i]->getNChans()*detectors[i]->getNChips(), i); } - for (int i=thisMultiDetector->numberOfDetectors; inumberOfDetectors; imaxNumberOfChannel[Y] = 0; //0th position - if (detectors[0]){ + if ((detectors[0]) && (thisMultiDetector->numberOfDetectors > 0)){ offsetX = thisMultiDetector->offsetX[0] = 0; offsetY = thisMultiDetector->offsetY[0] = 0; numX = thisMultiDetector->numberOfChannel[X] = detectors[0]->getTotalNumberOfChannels(X); @@ -774,7 +777,6 @@ int multiSlsDetector::removeSlsDetector(int pos) { return thisMultiDetector->numberOfDetectors; //j=pos; - for (j=mi; jmaxNumberOfChannels-=detectors[j]->getMaxNumberOfChannels(); delete detectors[j]; + detectors[j]=0; thisMultiDetector->numberOfDetectors--; - - + if (single) { for (int i=j+1; inumberOfDetectors+1; i++) { @@ -3943,11 +3945,11 @@ int multiSlsDetector::readConfigurationFile(string const fname){ //} } -#ifdef VERBOSE +#ifdef VERBOSE cout << endl; for (int ia=0; iatimerValue[PROBES_NUMBER]==0) { + if (thisDetector->myDetectorType==JUNGFRAUCTB) { + + for (ichan=0; ichandataBytes; ibyte++) { @@ -4430,6 +4447,7 @@ double* slsDetector::decodeData(int *datain, double *fdata) { dataout[ichan]=ival; } } + } } else { for (ichan=0; ichan