From 13db6a7df5e7da5f1684348763157afae6109ef1 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Mon, 22 Feb 2016 13:59:53 +0100 Subject: [PATCH] New interface for PLL reconfig of Junfraus server; moved some_fifo_full_bit and added stopped status --- .../commonFiles/sls_detector_defs.h | 3 +- .../jungfrauDetectorServer/ansi.h | 1 + .../jungfrauDetectorServer/firmware_funcs.c | 435 +++++++----------- .../jungfrauDetectorServer/registers_m.h | 152 ++---- .../jungfrauDetectorServer/server_funcs.c | 40 +- .../slsDetector/slsDetector.cpp | 2 + 6 files changed, 252 insertions(+), 381 deletions(-) create mode 120000 slsDetectorSoftware/jungfrauDetectorServer/ansi.h diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index 5dc57e871..53a83cb96 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -348,7 +348,8 @@ enum dacIndex { E_Vcn, /**< eiger */ E_Vis, /**< eiger */ IO_DELAY, /**< eiger io delay */ - ADC_VPP /**< adc vpp for jctb */ + ADC_VPP, /**< adc vpp for jctb */ + HV_NEW /**< new hv index for jungfrau & c */ }; /** diff --git a/slsDetectorSoftware/jungfrauDetectorServer/ansi.h b/slsDetectorSoftware/jungfrauDetectorServer/ansi.h new file mode 120000 index 000000000..a122db0ad --- /dev/null +++ b/slsDetectorSoftware/jungfrauDetectorServer/ansi.h @@ -0,0 +1 @@ +../../slsReceiverSoftware/include/ansi.h \ No newline at end of file diff --git a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c index c2fcde194..53186cfda 100755 --- a/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/jungfrauDetectorServer/firmware_funcs.c @@ -1,6 +1,7 @@ //#define TESTADC #define TESTADC1 + //#define TIMEDBG #include "server_defs.h" #include "firmware_funcs.h" @@ -96,7 +97,11 @@ int phase_shift=0;//DEFAULT_PHASE_SHIFT; int ipPacketSize=DEFAULT_IP_PACKETSIZE; int udpPacketSize=DEFAULT_UDP_PACKETSIZE; +#ifndef NEW_PLL_RECONFIG u_int32_t clkDivider[2]={32,16}; +#else +u_int32_t clkDivider[2]={40,20}; +#endif int32_t clkPhase[2]={0,0}; u_int32_t adcDisableMask=0; @@ -438,10 +443,10 @@ void configurePll(int i) { // printf("PLL reconfig reset\N"); bus_w(PLL_CNTRL_REG,(1<65535 || st<-65535) return clkPhase[0]; - - printf("phase %d\n", st); - - clkPhase[1]=st-clkPhase[0]; - +#ifdef NEW_PLL_RECONFIG + printf("reset pll\n"); + bus_w(PLL_CNTRL_REG,((1<=0) { + + if (val<60) { + dacvalue=0; + val=60; + } else if (val>=200) { + dacvalue=0x1; + val=200; + } else { + dacvalue=1.+(200.-val)/alpha; + val=200.-(dacvalue-1)*alpha; + } + printf ("****************************** setting val %d, dacval %d\n",val, dacvalue); + offw=DAC_REG; + + ddx=8; csdx=10; cdx=9; + codata=((dacvalue)&0xff); + + + + + valw=0xffff; bus_w(offw,(valw)); // start point + valw=((valw&(~(0x1<>(7-i))&0x1)<>32)&0xFFFFFFFF; + vals[IPCHECKSUM_ADDR]=checksum; + vals[GBE_DELAY_ADDR]=0; + vals[GBE_RESERVED1_ADDR]=sourceport; + vals[GBE_RESERVED2_ADDR]=interface; + vals[DETECTOR_MAC_L_ADDR]=(sourcemac)&0xFFFFFFFF; + vals[DETECTOR_MAC_H_ADDR]=(sourcemac>>32)&0xFFFFFFFF; + vals[DETECTOR_IP_ADDR]=sourceip; + + for (ivar=0; ivarmac.mac_dest_mac1 =((macad>>(8*5))&0xFF);// 0x00; //pc7060 */ -/* mac_conf_regs->mac.mac_dest_mac2 =((macad>>(8*4))&0xFF);// 0x19; //pc7060 */ -/* mac_conf_regs->mac.mac_dest_mac3 =((macad>>(8*3))&0xFF);// 0x99; //pc7060 */ -/* mac_conf_regs->mac.mac_dest_mac4 =((macad>>(8*2))&0xFF);// 0x24; //pc7060 */ -/* mac_conf_regs->mac.mac_dest_mac5 =((macad>>(8*1))&0xFF);// 0xEB; //pc7060 */ -/* mac_conf_regs->mac.mac_dest_mac6 =((macad>>(8*0))&0xFF);// 0xEE; //pc7060 */ - -/* /\* */ -/* mac_conf_regs->mac.mac_src_mac1 = 0x00; */ -/* mac_conf_regs->mac.mac_src_mac2 = 0xAA; */ -/* mac_conf_regs->mac.mac_src_mac3 = 0xBB; */ -/* mac_conf_regs->mac.mac_src_mac4 = 0xCC; */ -/* mac_conf_regs->mac.mac_src_mac5 = 0xDD; */ -/* mac_conf_regs->mac.mac_src_mac6 = 0xEE; */ -/* *\/ */ -/* mac_conf_regs->mac.mac_src_mac1 =((detectormacad>>(8*5))&0xFF); */ -/* mac_conf_regs->mac.mac_src_mac2 =((detectormacad>>(8*4))&0xFF); */ -/* mac_conf_regs->mac.mac_src_mac3 =((detectormacad>>(8*3))&0xFF); */ -/* mac_conf_regs->mac.mac_src_mac4 =((detectormacad>>(8*2))&0xFF); */ -/* mac_conf_regs->mac.mac_src_mac5 =((detectormacad>>(8*1))&0xFF); */ -/* mac_conf_regs->mac.mac_src_mac6 =((detectormacad>>(8*0))&0xFF); */ -/* mac_conf_regs->mac.mac_ether_type = 0x0800; //ipv4 */ - - - -/* mac_conf_regs->ip.ip_ver = 0x4; */ -/* mac_conf_regs->ip.ip_ihl = 0x5; */ -/* mac_conf_regs->ip.ip_tos = 0x0; */ -/* mac_conf_regs->ip.ip_len = ipPacketSize;//0x0522; // was 0x0526; */ -/* mac_conf_regs->ip.ip_ident = 0x0000; */ -/* mac_conf_regs->ip.ip_flag = 0x2; */ -/* mac_conf_regs->ip.ip_offset = 0x00; */ -/* mac_conf_regs->ip.ip_ttl = 0x70; */ -/* mac_conf_regs->ip.ip_protocol = 0x11; */ -/* mac_conf_regs->ip.ip_chksum = 0x0000 ; //6E42 now is automatically computed */ -/* mac_conf_regs->ip.ip_sourceip = detipad; //0x8181CA2E;129.129.202.46 */ -/* mac_conf_regs->ip.ip_destip = ipad; //CA57 */ - -/* //#ifdef VERBOSE */ -/* printf("mac_dest:%llx %x:%x:%x:%x:%x:%x\n", */ -/* macad, */ -/* mac_conf_regs->mac.mac_dest_mac1, */ -/* mac_conf_regs->mac.mac_dest_mac2, */ -/* mac_conf_regs->mac.mac_dest_mac3, */ -/* mac_conf_regs->mac.mac_dest_mac4, */ -/* mac_conf_regs->mac.mac_dest_mac5, */ -/* mac_conf_regs->mac.mac_dest_mac6); */ -/* printf("mac_src:%llx %x:%x:%x:%x:%x:%x\n", */ -/* detectormacad, */ -/* mac_conf_regs->mac.mac_src_mac1, */ -/* mac_conf_regs->mac.mac_src_mac2, */ -/* mac_conf_regs->mac.mac_src_mac3, */ -/* mac_conf_regs->mac.mac_src_mac4, */ -/* mac_conf_regs->mac.mac_src_mac5, */ -/* mac_conf_regs->mac.mac_src_mac6); */ -/* printf("ip_ttl:%x\n",mac_conf_regs->ip.ip_ttl); */ -/* printf("det_ip: %x %x\n",detipad, mac_conf_regs->ip.ip_sourceip); */ -/* printf("dest_ip: %x %x\n",ipad, mac_conf_regs->ip.ip_destip); */ - -/* //#endif */ - -/* //checksum */ -/* count=sizeof(mac_conf_regs->ip); */ -/* addr=&(mac_conf_regs->ip); */ -/* while( count > 1 ) { */ -/* sum += *addr++; */ -/* count -= 2; */ -/* } */ -/* if( count > 0 ) sum += *addr; // Add left-over byte, if any */ -/* while (sum>>16) sum = (sum & 0xffff) + (sum >> 16);// Fold 32-bit sum to 16 bits */ -/* checksum = (~sum)&0xffff; */ -/* mac_conf_regs->ip.ip_chksum = checksum; */ -/* //#ifdef VERBOSE */ -/* printf("IP header checksum is 0x%x s\n",(unsigned int)(checksum)); */ -/* //#endif */ - -/* mac_conf_regs->udp.udp_srcport = 0xE185; */ -/* mac_conf_regs->udp.udp_destport = udpport;//0xC351; */ -/* mac_conf_regs->udp.udp_len = udpPacketSize;//0x050E; //was 0x0512; */ -/* mac_conf_regs->udp.udp_chksum = 0x0000; */ - -/* #ifdef VERBOSE */ -/* printf("Configuring TSE\n"); */ -/* #endif */ -/* tse_conf_regs->rev = 0xA00; */ -/* tse_conf_regs->scratch = 0xCCCCCCCC; */ -/* tse_conf_regs->command_config = 0xB; */ -/* tse_conf_regs->mac_0 = 0x17231C00; */ -/* tse_conf_regs->mac_1 = 0xCB4A; */ -/* tse_conf_regs->frm_length = 0x5DC; //max frame length (1500 bytes) (was 0x41C) */ -/* tse_conf_regs->pause_quant = 0x0; */ -/* tse_conf_regs->rx_section_empty = 0x7F0; */ -/* tse_conf_regs->rx_section_full = 0x10; */ -/* tse_conf_regs->tx_section_empty = 0x3F8; //was 0x7F0; */ -/* tse_conf_regs->tx_section_full = 0x16; */ -/* tse_conf_regs->rx_almost_empty = 0x8; */ -/* tse_conf_regs->rx_almost_full = 0x8; */ -/* tse_conf_regs->tx_almost_empty = 0x8; */ -/* tse_conf_regs->tx_almost_full = 0x3; */ -/* tse_conf_regs->mdio_addr0 = 0x12; */ -/* tse_conf_regs->mdio_addr1 = 0x0; */ - -/* mac_conf_regs->cdone = 0xFFFFFFFF; */ - - -/* if(ival) */ -/* bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT|DIGITAL_TEST_BIT)); //0x2840,write shadow regs.. */ -/* else */ -/* bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|WRITE_BACK_BIT)); //0x2840,write shadow regs.. */ - -/* val=bus_r(addrr); */ -/* #ifdef VERBOSE */ -/* printf("Value read from Multi-purpose Reg:%x\n",val); */ -/* #endif */ -/* // if(val!=0x2840) return -1; */ - -/* usleep(100000); */ - -/* if(ival) */ -/* bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT|DIGITAL_TEST_BIT)); //0x2820,write shadow regs.. */ -/* else */ -/* bus_w(addrr,(INT_RSTN_BIT|ENET_RESETN_BIT|SW1_BIT)); //0x2820,write shadow regs.. */ - -/* val=bus_r(addrr); */ -/* #ifdef VERBOSE */ -/* printf("Value read from Multi-purpose Reg:%x\n",val); */ -/* #endif */ -/* // if(val!=0x2820) return -1; */ - - - - -/* return adcConfigured; */ } diff --git a/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h b/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h index 1931ac8c0..42dde5675 100755 --- a/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h +++ b/slsDetectorSoftware/jungfrauDetectorServer/registers_m.h @@ -20,96 +20,6 @@ #define FPGA_INIT_ADDR 0xb0000000 - - -/* constant FPGAVersionReg_c : integer:= 0; */ -/* constant FixedPatternReg_c : integer:= 1; */ -/* constant StatusReg_c : integer:= 2; */ -/* constant LookAtMeReg_c : integer:= 3; */ -/* constant SystemStatusReg_c : integer:= 4; */ - -/* constant PLL_ParamOutReg_c : integer:=5; -- RO register to check control signals going to the chip */ - - -/* --time registers use only even numbers! */ -/* constant TimeFromStartReg_c : integer:= 16; */ -/* --constant TimeFromStartReg_c : integer:= 17; MSB */ -/* constant GetDelayReg_c : integer:= 18; */ -/* --constant GetDelayReg_c : integer:= 19; MSB */ -/* constant GetCyclesReg_c : integer:= 20; */ -/* --constant GetTrainsReg_c : integer:= 21; MSB */ -/* constant GetFramesReg_c : integer:= 22; */ -/* --constant GetFramesReg_c : integer:= 23; MSB */ -/* constant GetPeriodReg_c : integer:= 24; */ -/* --constant GetPeriodReg_c : integer:= 25; MSB */ -/* constant GetExpTimeReg_c : integer:= 26; */ -/* --constant GetExpTimeReg_c : integer:= 27; MSB */ -/* constant GetGatesReg_c : integer:= 28; */ -/* --constant GetGatesReg_c : integer:= 29; MSB */ - - - - - -/* -----rw: */ - -/* constant DACReg_c : integer:= 64; */ -/* constant ADCWriteReg_c : integer:= 65; */ -/* constant ADCsyncReg_c : integer:= 66; */ -/* constant HVReg_c : integer:= 67; */ -/* constant DummyReg_c : integer:= 68; */ - -/* constant rx_udpip_AReg_c : integer:= 69; */ -/* constant udpports_AReg_c : integer:= 70; */ -/* constant rx_udpmacL_AReg_c : integer:= 71; */ -/* constant rx_udpmacH_AReg_c : integer:= 72; */ -/* constant detectormacL_AReg_c : integer:= 73; */ -/* constant detectormacH_AReg_c : integer:= 74; */ -/* constant detectorip_AReg_c : integer:= 75; */ -/* constant ipchksum_AReg_c : integer:= 76; */ - -/* constant ConfigReg_c : integer:= 77; */ -/* constant ExtSignalReg_c : integer:= 78; */ -/* constant ControlReg_c : integer:= 79; */ - - - -/* constant PLL_ParamReg_c : integer:= 80; */ -/* constant PLL_CntrlReg_c : integer:=81; */ - - - - -/* --time registers use only even numbers! */ -/* -- DELAY_AFTER_TRIGGER, */ -/* constant SetDelayReg_c : integer:= 96; */ -/* --constant SetDelayReg_c : integer:= 97; MSB */ -/* -- CYCLES_NUMBER, */ -/* constant SetCyclesReg_c : integer:= 98; */ -/* --constant SetCyclesReg_c : integer:= 99;MSB */ -/* -- FRAME_NUMBER, */ -/* constant SetFramesReg_c : integer:= 100; */ -/* --constant SetFramesReg_c : integer:= 101; MSB */ -/* -- FRAME_PERIOD, */ -/* constant SetPeriodReg_c : integer:= 102; */ -/* --constant SetPeriodReg_c : integer:= 103; MSB */ -/* -- ACQUISITION_TIME, */ -/* constant SetExpTimeReg_c : integer:= 104; */ -/* --constant SetExpTimeReg_c : integer:= 105; MSB */ -/* -- GATES_NUMBER, */ -/* constant SetGatesReg_c : integer:= 106; */ -/* --constant SetGatesReg_c : integer:= 107; MSB */ - - - - - - - - - - - #define DAC_REG 64<<11//0x17<<11// control the dacs //ADC #define ADC_WRITE_REG 65<<11//0x18<<11 @@ -223,17 +133,22 @@ #define PLL_CNTRL_REG 81<<11//0x34<<11 +#ifdef NEW_GBE_INTERFACE +#define GBE_PARAM_OUT_REG 40<<11 +#define GBE_PARAM_REG 69<<11 +#define GBE_CNTRL_REG 70<<11 +#else +#define RX_UDP_AREG 69<<11 //rx_udpip_AReg_c : integer:= 69; *\/ +#define UDPPORTS_AREG 70<<11// udpports_AReg_c : integer:= 70; *\/ +#define RX_UDPMACL_AREG 71<<11//rx_udpmacL_AReg_c : integer:= 71; *\/ +#define RX_UDPMACH_AREG 72<<11//rx_udpmacH_AReg_c : integer:= 72; *\/ +#define DETECTORMACL_AREG 73<<11//detectormacL_AReg_c : integer:= 73; *\/ +#define DETECTORMACH_AREG 74<<11//detectormacH_AReg_c : integer:= 74; *\/ +#define DETECTORIP_AREG 75<<11//detectorip_AReg_c : integer:= 75; *\/ +#define IPCHKSUM_AREG 76<<11//ipchksum_AReg_c : integer:= 76; *\/ */ +#endif -#define RX_UDP_AREG 69<<11 //rx_udpip_AReg_c : integer:= 69; */ -#define UDPPORTS_AREG 70<<11// udpports_AReg_c : integer:= 70; */ -#define RX_UDPMACL_AREG 71<<11//rx_udpmacL_AReg_c : integer:= 71; */ -#define RX_UDPMACH_AREG 72<<11//rx_udpmacH_AReg_c : integer:= 72; */ -#define DETECTORMACL_AREG 73<<11//detectormacL_AReg_c : integer:= 73; */ -#define DETECTORMACH_AREG 74<<11//detectormacH_AReg_c : integer:= 74; */ -#define DETECTORIP_AREG 75<<11//detectorip_AReg_c : integer:= 75; */ -#define IPCHKSUM_AREG 76<<11//ipchksum_AReg_c : integer:= 76; */ - #define PATTERN_CNTRL_REG 82<<11 #define PATTERN_LIMITS_AREG 83<<11 @@ -255,6 +170,7 @@ #define DAQ_REG 93<<11 #define ADC_LATCH_DISABLE_REG 94<<11 +#define HV_REG 95<<11 #define PATTERN_IOCTRL_REG_LSB 108<<11 #define PATTERN_IOCTRL_REG_MSB 109<<11 @@ -367,14 +283,16 @@ #define READSTATE_0_BIT 0x00000100 #define READSTATE_1_BIT 0x00000200 #define READSTATE_2_BIT 0x00000400 -#define PLL_RECONFIG_BUSY 0x00100000 +#define SOME_FIFO_FULL_BIT 0x00000800 // error! + #define RUNSTATE_0_BIT 0x00001000 #define RUNSTATE_1_BIT 0x00002000 #define RUNSTATE_2_BIT 0x00004000 -#define SOME_FIFO_FULL_BIT 0x00008000 // error! +#define STOPPED_BIT 0x00008000 // error! #define ALL_FIFO_EMPTY_BIT 0x00010000 // data ready #define RUNMACHINE_BUSY_BIT 0x00020000 #define READMACHINE_BUSY_BIT 0x00040000 +#define PLL_RECONFIG_BUSY 0x00100000 @@ -536,11 +454,43 @@ #define PPL_BW_PARAM_DEFAULT 0x2EE0 #define PPL_VCO_PARAM_DEFAULT 0x1 +#define NEW_PLL_RECONFIG + +#ifdef NEW_PLL_RECONFIG +#define PLL_VCO_FREQ_MHZ 400//480//800 +#else #define PLL_VCO_FREQ_MHZ 480//800 +#endif + +/* + GBE parameter and control registers definitions +*/ + +#define GBE_CTRL_WSTROBE 0 +#define GBE_CTRL_VAR_OFFSET 16 +#define GBE_CTRL_VAR_MASK 0XF +#define GBE_CTRL_RAMADDR_OFFSET 24 +#define GBE_CTRL_RAMADDR_MASK 0X3F +#define GBE_CTRL_INTERFACE 23 + +#define RX_UDP_IP_ADDR 0 +#define RX_UDP_PORTS_ADDR 1 +#define RX_UDP_MAC_L_ADDR 2 +#define RX_UDP_MAC_H_ADDR 3 +#define IPCHECKSUM_ADDR 4 +#define GBE_DELAY_ADDR 5 +#define GBE_RESERVED1_ADDR 6 +#define GBE_RESERVED2_ADDR 7 +#define DETECTOR_MAC_L_ADDR 8 +#define DETECTOR_MAC_H_ADDR 9 +#define DETECTOR_IP_ADDR 10 + + + /**------------------ -- pattern registers definitions --------------------------------------------- */ diff --git a/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c index 30afd1dbf..e00ca8b28 100755 --- a/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c +++ b/slsDetectorSoftware/jungfrauDetectorServer/server_funcs.c @@ -1029,30 +1029,23 @@ int set_dac(int file_des) { } retval=adcvpp;; - } + } else if (ind==HV_NEW ) + retval=initHighVoltageByModule(val,imod); + else + printf("**********No dac with index %d\n",ind); } } if(ret==OK){ - /* ret=FAIL; */ -/* if(idac==HIGH_VOLTAGE){ */ -/* if(retval==-2) */ -/* strcpy(mess,"Invalid Voltage.Valid values are 0,90,110,120,150,180,200"); */ -/* else if(retval==-3) */ -/* strcpy(mess,"Weird value read back or it has not been set yet\n"); */ -/* else */ -/* ret=OK; */ -/* }//since v r saving only msb */ -/* else if ((retval-val)<=3 || val==-1) */ -/* ret=OK; */ - if (ind<16) { - if (mV) { + if (ind<16) { + if (mV) { - printf("%d DACu is ",retval); - retval1=2500*retval/16535; - printf("%d mV \n",retval1); - } else + printf("%d DACu is ",retval); + retval1=2500*retval/16535; + printf("%d mV \n",retval1); + } else + retval1=retval; + } else retval1=retval; - } #endif #ifdef VERBOSE @@ -1864,10 +1857,13 @@ int get_run_status(int file_des) { // else if(!(retval&RUNMACHINE_BUSY_BIT)){ //commented by Anna 24.10.2012 else if(!(retval&RUN_BUSY_BIT)){ // by Anna 24.10.2012 + if((retval&STOPPED_BIT) ){ // - //and readbusy=1, its last frame read - if((retval&READMACHINE_BUSY_BIT) ){ // + printf("-----------------------------------STOPPED--------------------------\n"); + s=STOPPED; + } else if((retval&READMACHINE_BUSY_BIT) ){ // ///and readbusy=1, its last frame read + printf("-----------------------------------READ MACHINE BUSY--------------------------\n"); @@ -1898,7 +1894,7 @@ int get_run_status(int file_des) { printf("-----------------------------------RUNNING-----------------------------------\n"); s=RUNNING; } - } + } diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 8b0581c8b..428d21a3e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -2176,6 +2176,8 @@ dacs_t slsDetector::setDAC(dacs_t val, dacIndex index, int mV, int imod){ int ret=FAIL; char mess[100]; int arg[3]; + if ( (thisDetector->myDetectorType != GOTTHARD) && index==HV_POT) + index=HV_NEW; arg[0]=index; arg[1]=imod; arg[2]=mV;