Merging with anna's jungfrau detector server version

This commit is contained in:
bergamaschi 2016-02-22 15:02:42 +01:00
parent 0b1710c267
commit e7a7dd8c6b
3 changed files with 275 additions and 400 deletions

View File

@ -1,6 +1,7 @@
//#define TESTADC
#define TESTADC1
//#define TIMEDBG
#include "server_defs.h"
#include "firmware_funcs.h"
@ -97,7 +98,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;
@ -436,10 +441,10 @@ void configurePll(int i) {
// printf("PLL reconfig reset\N"); bus_w(PLL_CNTRL_REG,(1<<PLL_CNTR_RECONFIG_RESET_BIT)); usleep(100); bus_w(PLL_CNTRL_REG, 0);
#ifndef NEW_PLL_RECONFIG
printf("PLL mode\n"); setPllReconfigReg(PLL_MODE_REG,1,0);
// usleep(10000);
#endif
if (i<2) {
@ -496,15 +501,20 @@ void configurePll(int i) {
// printf("Phase, val: %08x\n", val);
setPllReconfigReg(PLL_PHASE_SHIFT_REG,val,0); //shifts counter 0
val=phase | (2<<16);// | (inv<<21);
#ifndef NEW_PLL_RECONFIG
printf("Start reconfig\n"); setPllReconfigReg(PLL_START_REG, 1,0);
// bus_w(PLL_CNTRL_REG, 0);
printf("Status register\n"); getPllReconfigReg(PLL_STATUS_REG,0);
// sleep(1);
printf("PLL mode\n"); setPllReconfigReg(PLL_MODE_REG,1,0);
// usleep(10000);
#endif
printf("**************** phase word %08x\n",val);
val=phase | (2<<16);// | (inv<<21);
// printf("Phase, val: %08x\n", val);
setPllReconfigReg(PLL_PHASE_SHIFT_REG,val,0); //shifts counter 0
}
@ -512,12 +522,13 @@ void configurePll(int i) {
}
#ifndef NEW_PLL_RECONFIG
printf("Start reconfig\n"); setPllReconfigReg(PLL_START_REG, 1,0);
// bus_w(PLL_CNTRL_REG, 0);
printf("Status register\n"); getPllReconfigReg(PLL_STATUS_REG,0);
// sleep(1);
#endif
// printf("PLL mode\n"); setPllReconfigReg(PLL_MODE_REG,0,0);
usleep(10000);
if (i<2) {
@ -578,13 +589,21 @@ int phaseStep(int st){
if (st>65535 || st<-65535)
return clkPhase[0];
#ifdef NEW_PLL_RECONFIG
printf("reset pll\n");
bus_w(PLL_CNTRL_REG,((1<<PLL_CNTR_PLL_RESET_BIT))); //reset PLL
usleep(100);
bus_w(PLL_CNTRL_REG, 0);
printf("phase %d\n", st);
clkPhase[1]=st;
#else
clkPhase[1]=st-clkPhase[0];
#endif
printf("phase %d\n", clkPhase[1] );
configurePll(2);
clkPhase[0]=st;
return clkPhase[0];
@ -1241,7 +1260,7 @@ int64_t setPeriod(int64_t value){
/* time is in ns */
if (value!=-1) {
// value*=(1E-9*CLK_FREQ);
value*=(1E-3*clkDivider[0]);
value*=(1E-3*clkDivider[1]);
}
if (value%2==0) {
@ -1264,7 +1283,7 @@ int64_t getPeriod(){
int64_t setDelay(int64_t value){
/* time is in ns */
if (value!=-1) {
value*=(1E-3*clkDivider[0]);//(1E-9*CLK_FREQ);
value*=(1E-3*clkDivider[1]);//(1E-9*CLK_FREQ);
}
return set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG)/(1E-3*clkDivider[0]);//(1E-9*CLK_FREQ);
}
@ -1539,52 +1558,60 @@ int getTemperature(int tempSensor, int imod){
int initHighVoltage(int val, int imod){
printf("*******SetHV: Doing nothing - still to be implemented!\n");
/* #ifdef VERBOSE */
/* printf("Setting/Getting High Voltage of module:%d with val:%d\n",imod,val); */
/* #endif */
/* volatile u_int32_t addr=HV_REG; */
/* int writeVal,writeVal2; */
/* switch(val){ */
/* case -1: break; */
/* case 0: writeVal=0x0; writeVal2=0x0; break; */
/* case 90: writeVal=0x0; writeVal2=0x1; break; */
/* case 110:writeVal=0x2; writeVal2=0x3; break; */
/* case 120:writeVal=0x4; writeVal2=0x5; break; */
/* case 150:writeVal=0x6; writeVal2=0x7; break; */
/* case 180:writeVal=0x8; writeVal2=0x9; break; */
/* case 200:writeVal=0xA; writeVal2=0xB; break; */
/* default :printf("Invalid voltage\n");return -2;break; */
/* } */
/* //to set value */
/* if(val!=-1){ */
/* //set value to converted value */
/* bus_w(addr,writeVal); */
/* bus_w(addr,writeVal2); */
/* #ifdef VERBOSE */
/* printf("Value sent is %d and then %d\n",writeVal,writeVal2); */
/* #endif */
/* } */
/* //read value and return the converted value */
/* val=bus_r(addr); */
/* #ifdef VERBOSE */
/* printf("Value read from reg is %d\n",val); */
/* #endif */
/* switch(val){ */
/* case 0x0:val=0;break; */
/* case 0x1:val=90;break; */
/* case 0x3:val=110;break; */
/* case 0x5:val=120;break; */
/* case 0x7:val=150;break; */
/* case 0x9:val=180;break; */
/* case 0xB:val=200;break; */
/* default:printf("Weird value read:%d\n",val);return -3;break; */
/* } */
/* #ifdef VERBOSE */
/* printf("High voltage of module:%d is %d\n",imod,val); */
/* #endif */
return val;
u_int32_t offw,codata;
u_int16_t valw, dacvalue;
int iru,i,ddx,csdx,cdx;
float alpha=0.55, fval=val;
if (val>=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<<csdx))));bus_w(offw,valw); //chip sel bar down
for (i=0;i<8;i++) {
valw=(valw&(~(0x1<<cdx)));bus_w(offw,valw); //cldwn
valw=((valw&(~(0x1<<ddx)))+(((codata>>(7-i))&0x1)<<ddx));bus_w(offw,valw);//write data (i)
valw=((valw&(~(0x1<<cdx)))+(0x1<<cdx));bus_w(offw,valw);//clkup
}
valw=((valw&(~(0x1<<csdx)))+(0x1<<csdx));bus_w(offw,valw); //csup
valw=(valw&(~(0x1<<cdx)));bus_w(offw,valw); //cldwn
valw=0xffff; bus_w(offw,(valw)); // stop point =start point of course */
printf("Writing %d in HVDAC \n",dacvalue);
bus_w(HV_REG,val);
}
return bus_r(HV_REG);
// return val;
}
@ -1664,22 +1691,15 @@ int setADC(int adc){
}
int configureMAC(uint32_t destip,uint64_t destmac,uint64_t sourcemac,int sourceip,int ival,uint32_t destport) {
//int configureMAC(int ipad,long long int macad,long long int detectormacad, int detipad, int ival, int udpport){
uint32_t sourceport = 0x7e9a; // 0xE185;
long int calcChecksum(int sourceip, int destip) {
//setheader(0xF452142F3200,0x00ad29ae39fd,0x0a000264,0x0A00020d ,0x8436, 0x7e9a);
/* void setheader(uint64_t destmac, uint64_t sourcemac, uint32_t destip, uint32_t sourceip, uint32_t destport, */
/* uint32_t sourceport){ */
ip_header ip;
int count;
unsigned short *addr;
long int sum = 0;
long int checksum;
volatile u_int32_t conf= bus_r(CONFIG_REG);
ip.ip_ver = 0x4;
ip.ip_ihl = 0x5;
@ -1707,7 +1727,61 @@ ip.ip_destip = destip;
printf("IP checksum is 0x%lx\n",checksum);
return checksum;
}
#ifdef NEW_GBE_INTERFACE
int writeGbeReg(int ivar, uint32_t val, int addr, int interface) {
/* #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 */
uint32_t ctrl=((ivar&GBE_CTRL_VAR_MASK)<<GBE_CTRL_VAR_OFFSET)|((addr&GBE_CTRL_RAMADDR_MASK)<<GBE_CTRL_RAMADDR_OFFSET)| (interface<<GBE_CTRL_INTERFACE);
bus_w(GBE_CNTRL_REG,ctrl);
bus_w(GBE_PARAM_REG,val);
bus_w(GBE_CNTRL_REG,ctrl|(1<<GBE_CTRL_WSTROBE));
usleep(100);
bus_w(GBE_CNTRL_REG,ctrl);
}
#endif
int configureInterface(uint32_t destip,uint64_t destmac,uint64_t sourcemac,int sourceip,int ival,uint32_t destport, uint32_t sourceport, int interface) {
//int configureMAC(int ipad,long long int macad,long long int detectormacad, int detipad, int ival, int udpport){
volatile u_int32_t conf= bus_r(CONFIG_REG);
long int checksum=calcChecksum(sourceip, destip);
#ifdef NEW_GBE_INTERFACE
printf("Configure interface %d\n",interface);
const int nvar=12;
uint32_t vals[nvar];
int ivar;
int addr=0;
vals[RX_UDP_IP_ADDR]=destip;
vals[RX_UDP_PORTS_ADDR]=destport;
vals[RX_UDP_MAC_L_ADDR]=(destmac)&0xFFFFFFFF;
vals[RX_UDP_MAC_H_ADDR]=(destmac>>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; ivar<nvar; ivar++) {
writeGbeReg(ivar, vals[ivar], addr, interface);
}
#else
bus_w(DETECTORIP_AREG,sourceip);//detectorip_AReg_c
bus_w(RX_UDP_AREG,destip);//rx_udpip_AReg_c
@ -1718,6 +1792,9 @@ ip.ip_destip = destip;
bus_w(UDPPORTS_AREG,((sourceport&0xFFFF)<<16)+(destport&0xFFFF));//udpports_AReg_c
bus_w(IPCHKSUM_AREG,(checksum&0xFFFF));//ipchksum_AReg_c
#endif
bus_w(CONTROL_REG,GB10_RESET_BIT);
sleep(1);
bus_w(CONTROL_REG,0);
@ -1726,197 +1803,50 @@ ip.ip_destip = destip;
printf("System status register is %08x\n",bus_r(SYSTEM_STATUS_REG));
return 0; //any value doesnt matter - dhanya
/* } */
/* #ifdef DDEBUG */
/* printf("Chip of Intrst Reg:%x\n",bus_r(CHIP_OF_INTRST_REG)); */
/* printf("IP Packet Size:%d\n",ipPacketSize); */
/* printf("UDP Packet Size:%d\n",udpPacketSize); */
/* #endif */
/* //configuring mac */
/* u_int32_t addrr=MULTI_PURPOSE_REG; */
/* u_int32_t offset=ENET_CONF_REG, offset2=TSE_CONF_REG; */
/* mac_conf *mac_conf_regs; */
/* tse_conf *tse_conf_regs; */
/* long int sum = 0; */
/* long int checksum; */
/* int count,val; */
/* unsigned short *addr; */
/* mac_conf_regs=(mac_conf*)(CSP0BASE+offset*2); */
/* tse_conf_regs=(tse_conf*)(CSP0BASE+offset2*2); */
/* #ifdef DDEBUG */
/* printf("***Configuring MAC*** \n"); */
/* #endif */
/* if(ival) */
/* bus_w(addrr,(RESET_BIT|DIGITAL_TEST_BIT)); //0x080,reset mac (reset) */
/* else */
/* bus_w(addrr,RESET_BIT); //0x080,reset mac (reset) */
/* val=bus_r(addrr); */
/* #ifdef VERBOSE */
/* printf("Value read from Multi-purpose Reg:%x\n",val); */
/* #endif */
/* // if(val!=0x080) return -1; */
/* usleep(500000); */
/* if(ival) */
/* bus_w(addrr,(ENET_RESETN_BIT|WRITE_BACK_BIT|DIGITAL_TEST_BIT)); //0x840,write shadow regs(enet reset,write bak) */
/* else */
/* bus_w(addrr,(ENET_RESETN_BIT|WRITE_BACK_BIT)); //0x840,write shadow regs(enet reset,write bak) */
/* val=bus_r(addrr); */
/* #ifdef VERBOSE */
/* printf("Value read from Multi-purpose Reg:%x\n",val); */
/* #endif */
/* // if(val!=0x840) return -1; */
/* if(ival) */
/* bus_w(addrr,(ENET_RESETN_BIT|DIGITAL_TEST_BIT)); //0x800,nreset phy(enet reset) */
/* else */
/* bus_w(addrr,ENET_RESETN_BIT); //0x800,nreset phy(enet reset) */
/* val=bus_r(addrr); */
/* #ifdef VERBOSE */
/* printf("Value read from Multi-purpose Reg:%x\n",val); */
/* #endif */
/* // if(val!=0x800) return -1; */
/* mac_conf_regs->mac.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; */
int configureMAC(uint32_t destip,uint64_t destmac,uint64_t sourcemac,int sourceip,int ival,uint32_t destport) {
//int configureMAC(int ipad,long long int macad,long long int detectormacad, int detipad, int ival, int udpport){
uint32_t sourceport = 0x7e9a; // 0xE185;
int interface=0;
int ngb;
volatile u_int32_t conf= bus_r(CONFIG_REG);
#ifdef NEW_GBE_INTERFACE
ngb=2;
printf("--------- New XGB interface\n");
#else
ngb=1;
printf("********* Old XGB interface\n");
#endif
for (interface=0; interface <ngb; interface++)
configureInterface(destip, destmac, sourcemac+interface, sourceip+interface, ival, destport+interface, sourceport+interface, interface);
bus_w(CONTROL_REG,GB10_RESET_BIT);
bus_w(CONTROL_REG,0);
usleep(10000);
bus_w(CONFIG_REG,conf | GB10_NOT_CPU_BIT);
printf("System status register is %08x\n",bus_r(SYSTEM_STATUS_REG));
return;
}

View File

@ -35,96 +35,6 @@
#define ADC_OFFSET_REG 66<<11 //same as ADC_PIPELINE_REG
#define ADC_INVERSION_REG 67<<11
/* 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
@ -238,17 +148,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
@ -270,6 +185,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
@ -382,14 +298,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
@ -551,8 +469,40 @@
#define PPL_BW_PARAM_DEFAULT 0x2EE0
#define PPL_VCO_PARAM_DEFAULT 0x1
#define PLL_VCO_FREQ_MHZ 480//800
#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

View File

@ -1079,7 +1079,6 @@ int set_dac(int file_des) {
ret=FAIL;
sprintf(mess,"Detector locked by %s\n",lastClientIP);
} else{
if (ind<16) {
if (mV) {
@ -1109,21 +1108,13 @@ 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) {
@ -1132,8 +1123,9 @@ int set_dac(int file_des) {
printf("%d mV \n",retval1);
} else
retval1=retval;
}
}
} else
retval1=retval;
#endif
#ifdef VERBOSE
@ -2000,10 +1992,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");