mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-01-17 13:01:12 +01:00
in between
This commit is contained in:
1
slsDetectorServers/gotthardDetectorServer/LTC2620.h
Symbolic link
1
slsDetectorServers/gotthardDetectorServer/LTC2620.h
Symbolic link
@@ -0,0 +1 @@
|
||||
../slsDetectorServer/LTC2620.h
|
||||
@@ -71,24 +71,24 @@
|
||||
//#define TIME_FROM_START_REG (0x16 << MEM_MAP_SHIFT)
|
||||
|
||||
/** DAC Control register */
|
||||
#define DAC_CNTRL_REG (0x17 << MEM_MAP_SHIFT)
|
||||
#define SPI_REG (0x17 << MEM_MAP_SHIFT)
|
||||
|
||||
#define DAC_CNTRL_CS_OFST (0)
|
||||
#define DAC_CNTRL_CS_MSK (0x00000001 << DAC_CNTRL_CS_OFST)
|
||||
#define DAC_CNTRL_CLK_OFST (1)
|
||||
#define DAC_CNTRL_CLK_MSK (0x00000001 << DAC_CNTRL_CLK_OFST)
|
||||
#define DAQ_CNTRL_DGTL_OFST (2)
|
||||
#define DAQ_CNTRL_DGTL_MSK (0x00000001 << DAQ_CNTRL_DGTL_OFST)
|
||||
#define SPI_DAC_SRL_CS_OTPT_OFST (0)
|
||||
#define SPI_DAC_SRL_CS_OTPT_MSK (0x00000001 << SPI_DAC_SRL_CS_OTPT_OFST)
|
||||
#define SPI_DAC_SRL_CLK_OTPT_OFST (1)
|
||||
#define SPI_DAC_SRL_CLK_OTPT_MSK (0x00000001 << SPI_DAC_SRL_CLK_OTPT_OFST)
|
||||
#define SPI_DAC_SRL_DGTL_OTPT_OFST (2)
|
||||
#define SPI_DAC_SRL_DGTL_OTPT_MSK (0x00000001 << SPI_DAC_SRL_DGTL_OTPT_OFST)
|
||||
|
||||
/** ADC SPI register */
|
||||
#define ADC_SPI_REG (0x18 << MEM_MAP_SHIFT)
|
||||
|
||||
#define ADC_SERIAL_CLK_OUT_OFST (0)
|
||||
#define ADC_SERIAL_CLK_OUT_MSK (0x00000001 << ADC_SERIAL_CLK_OUT_OFST)
|
||||
#define ADC_SERIAL_DATA_OUT_OFST (1)
|
||||
#define ADC_SERIAL_DATA_OUT_MSK (0x00000001 << ADC_SERIAL_DATA_OUT_OFST)
|
||||
#define ADC_SERIAL_CS_OUT_OFST (2)
|
||||
#define ADC_SERIAL_CS_OUT_MSK (0x0000001F << ADC_SERIAL_CS_OUT_OFST)
|
||||
#define ADC_SPI_SRL_CLK_OTPT_OFST (0)
|
||||
#define ADC_SPI_SRL_CLK_OTPT_MSK (0x00000001 << ADC_SPI_SRL_CLK_OTPT_OFST)
|
||||
#define ADC_SPI_SRL_DT_OTPT_OFST (1)
|
||||
#define ADC_SPI_SRL_DT_OTPT_MSK (0x00000001 << ADC_SPI_SRL_DT_OTPT_OFST)
|
||||
#define ADC_SPI_SRL_CS_OTPT_OFST (2)
|
||||
#define ADC_SPI_SRL_CS_OTPT_MSK (0x0000001F << ADC_SPI_SRL_CS_OTPT_OFST)
|
||||
|
||||
/** ADC Sync register */
|
||||
#define ADC_SYNC_REG (0x19 << MEM_MAP_SHIFT)
|
||||
@@ -131,6 +131,7 @@
|
||||
#define TEMP_SPI_IN_T2_CLK_MSK (0x00000001 << TEMP_SPI_IN_T2_CLK_OFST)
|
||||
#define TEMP_SPI_IN_T2_CS_OFST (3)
|
||||
#define TEMP_SPI_IN_T2_CS_MSK (0x00000001 << TEMP_SPI_IN_T2_CS_OFST)
|
||||
#define TEMP_SPI_IDLE_MSK (TEMP_SPI_IN_T1_CS_MSK | TEMP_SPI_IN_T2_CS_MSK)
|
||||
|
||||
/** Temperatre SPI Out register */
|
||||
#define TEMP_SPI_OUT_REG (0x1c << MEM_MAP_SHIFT)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
Path: slsDetectorPackage/slsDetectorServers/gotthardDetectorServer
|
||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repsitory UUID: 98b5e893b180217e8ddddb95275b84d3b28a0832
|
||||
Revision: 10
|
||||
Repsitory UUID: 87f75630357249e5082b435a9ba852335881331f
|
||||
Revision: 13
|
||||
Branch: refactor
|
||||
Last Changed Author: Dhanya_Thattil
|
||||
Last Changed Rev: 4175
|
||||
Last Changed Date: 2018-12-04 13:39:41.000000002 +0100 ./.target-makefrag
|
||||
Last Changed Rev: 4181
|
||||
Last Changed Date: 2018-12-06 15:21:07.000000002 +0100 ./RegisterDefs.h
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||
#define GITREPUUID "98b5e893b180217e8ddddb95275b84d3b28a0832"
|
||||
#define GITREPUUID "87f75630357249e5082b435a9ba852335881331f"
|
||||
#define GITAUTH "Dhanya_Thattil"
|
||||
#define GITREV 0x4175
|
||||
#define GITDATE 0x20181204
|
||||
#define GITREV 0x4181
|
||||
#define GITDATE 0x20181206
|
||||
#define GITBRANCH "refactor"
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#ifndef VIRTUAL
|
||||
#include "AD9257.h" // commonServerFunctions.h, blackfin.h, ansi.h
|
||||
#include "AD9252.h" // old board compatibility
|
||||
#include "LTC2620.h" // dacs
|
||||
#else
|
||||
#include "blackfin.h"
|
||||
#include <pthread.h>
|
||||
@@ -372,15 +373,35 @@ void setupDetector() {
|
||||
|
||||
// Initialization
|
||||
setPhaseShiftOnce();
|
||||
/* FIXME: (also check with commenting out #define GOTTHARDD in ad9257.h), check if need to replace with configureADC from firmwarE_funcs.c? */
|
||||
|
||||
// set defines
|
||||
if (getBoardRevision() == 1)
|
||||
prepareADC9252();
|
||||
AD9252_SetDefines(ADC_SPI_REG, ADC_SPI_SRL_CS_OTPT_MSK, ADC_SPI_SRL_CLK_OTPT_MSK, ADC_SPI_SRL_DT_OTPT_MSK, ADC_SPI_SRL_DT_OTPT_OFST);
|
||||
else
|
||||
prepareADC9257();
|
||||
AD9257_SetDefines(ADC_SPI_REG, ADC_SPI_SRL_CS_OTPT_MSK, ADC_SPI_SRL_CLK_OTPT_MSK, ADC_SPI_SRL_DT_OTPT_MSK, ADC_SPI_SRL_DT_OTPT_OFST);
|
||||
LTC2620_SetDefines(SPI_REG, SPI_DAC_SRL_CS_OTPT_MSK, SPI_DAC_SRL_CLK_OTPT_MSK, SPI_DAC_SRL_DGTL_OTPT_MSK, SPI_DAC_SRL_DGTL_OTPT_OFST, NDAC, MAX_DAC_VOLTAGE_VALUE);
|
||||
|
||||
// disable spi
|
||||
if (getBoardRevision() == 1)
|
||||
AD9252_Disable();
|
||||
else
|
||||
AD9257_Disable();
|
||||
LTC2620_Disable();
|
||||
|
||||
bus_w(DAC_CNTRL_REG, DAC_CNTRL_SPI_IDLE_MSK);
|
||||
bus_w(ADC_SPI_REG, ADC_SERIAL_CS_OUT_MSK);
|
||||
bus_w(TEMP_SPI_IN_REG, TEMP_SPI_IDLE_MSK);
|
||||
|
||||
#ifndef VIRTUAL
|
||||
if (getBoardRevision() == 1)
|
||||
AD9252_Configure();
|
||||
else
|
||||
AD9257_Configure();
|
||||
#endif
|
||||
//configureADC();
|
||||
setROIADC(-1); // set adcsyncreg, daqreg, chipofinterestreg, cleanfifos,
|
||||
setGbitReadout();
|
||||
initDac(0); /*FIXME: if it doesnt work, switch to the old dac*/
|
||||
LTC2620_Configure(); /*FIXME: if it doesnt work, switch to the old dac*/
|
||||
|
||||
// master, slave (25um)
|
||||
setMasterSlaveConfiguration();
|
||||
@@ -404,16 +425,11 @@ int setDefaultDacs() {
|
||||
FILE_LOG(logINFOBLUE, ("Setting Default Dac values\n"));
|
||||
{
|
||||
int i = 0;
|
||||
int retval[2]={-1,-1};
|
||||
const int defaultvals[NDAC] = DEFAULT_DAC_VALS;
|
||||
for(i = 0; i < NDAC; ++i) {
|
||||
// if not already default, set it to default
|
||||
if (dacValues[i] != defaultvals[i]) {
|
||||
setDAC((enum DACINDEX)i,defaultvals[i],0,retval);
|
||||
if (retval[0] != defaultvals[i]) {
|
||||
FILE_LOG(logERROR, ("Setting dac %d failed, wrote %d, read %d\n",i ,defaultvals[i], retval[0]));
|
||||
ret = FAIL;
|
||||
}
|
||||
setDAC((enum DACINDEX)i, defaultvals[i], 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1023,9 +1039,9 @@ int setModule(sls_detector_module myMod, char* mess){
|
||||
|
||||
//set dac values
|
||||
{
|
||||
int i = 0, retval[2] = {-1, -1};
|
||||
int i = 0;
|
||||
for(i = 0; i < NDAC; ++i)
|
||||
setDAC((enum DACINDEX)i, myMod.dacs[i], 0, retval);
|
||||
setDAC((enum DACINDEX)i, myMod.dacs[i], 0);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
@@ -1127,99 +1143,31 @@ enum detectorSettings getSettings(){
|
||||
|
||||
/* parameters - dac, adc, hv */
|
||||
|
||||
void initDac(int dacnum) { // FIXME: if needed
|
||||
#ifdef VIRTUAL
|
||||
return;
|
||||
#endif
|
||||
FILE_LOG(logINFOBLUE, ("Initializing dac %d\n",dacnum));
|
||||
|
||||
u_int32_t codata;
|
||||
int csdx = dacnum / NDAC + DAC_CNTRL_CS_OFST; // old board (16 dacs),so can be DAC_SERIAL_CS_OUT_OFST or +1
|
||||
int dacchannel = 0xf; // all channels
|
||||
int dacvalue = 0x6; // can be any random value (just writing to power up)
|
||||
FILE_LOG(logINFO, ("\tWrite to Input Register\n"
|
||||
"\tChip select bit: %d\n"
|
||||
"\tDac Channel: 0x%x\n"
|
||||
"\tDac Value: 0x%x\n",
|
||||
csdx, dacchannel, dacvalue));
|
||||
|
||||
codata = LTC2620_DAC_CMD_WRITE + // command to write to input register
|
||||
((dacchannel << LTC2620_DAC_ADDR_OFST) & LTC2620_DAC_ADDR_MSK) + // all channels
|
||||
((dacvalue << LTC2620_DAC_DATA_OFST) & LTC2620_DAC_DATA_MSK); // any random value
|
||||
serializeToSPI(DAC_CNTRL_REG, codata, (0x1 << csdx), LTC2620_DAC_NUMBITS,
|
||||
DAC_CNTRL_CLK_MSK, DAQ_CNTRL_DGTL_MSK, DAQ_CNTRL_DGTL_OFST);
|
||||
}
|
||||
|
||||
int voltageToDac(int value){
|
||||
int vmin = 0;
|
||||
int vmax = 2500;
|
||||
int nsteps = 4096;
|
||||
if ((value < vmin) || (value > vmax)) {
|
||||
FILE_LOG(logERROR, ("Voltage value (to convert to dac value) is outside bounds: %d\n", value));
|
||||
return -1;
|
||||
}
|
||||
return (int)(((value - vmin) / (vmax - vmin)) * (nsteps - 1) + 0.5);
|
||||
}
|
||||
|
||||
int dacToVoltage(unsigned int digital){
|
||||
int vmin = 0;
|
||||
int vmax = 2500;
|
||||
int nsteps = 4096;
|
||||
int v = vmin + (vmax - vmin) * digital / (nsteps - 1);
|
||||
if((v < 0) || (v > nsteps - 1)) {
|
||||
FILE_LOG(logERROR, ("Voltage value (converted from dac value) is outside bounds: %d\n", v));
|
||||
return -1;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void setDAC(enum DACINDEX ind, int val, int mV, int retval[]) {
|
||||
int dacmV = val;
|
||||
|
||||
//if set and mv, convert to dac
|
||||
if (val > 0) {
|
||||
if (mV)
|
||||
val = voltageToDac(val); //gives -1 on error
|
||||
else
|
||||
dacmV = dacToVoltage(val); //gives -1 on error
|
||||
}
|
||||
|
||||
if ( (val >= 0) || (val == -100)) {
|
||||
void setDAC(enum DACINDEX ind, int val, int mV) {
|
||||
FILE_LOG(logDEBUG1, ("Setting dac[%d]: %d %s \n", (int)ind, val, (mV ? "mV" : "dac units")));
|
||||
int dacval = val;
|
||||
#ifdef VIRTUAL
|
||||
if (mV && LTC2620_VoltageToDac(val, &dacval) == OK)
|
||||
dacValues[ind] = val;
|
||||
#else
|
||||
u_int32_t codata;
|
||||
int csdx = ind / NDAC + DAC_CNTRL_CS_MSK; // old board (16 dacs),so can be DAC_SERIAL_CS_OUT_OFST or +1
|
||||
int dacchannel = ind % NDAC; // 0-8, dac channel number (also for dacnum 9-15 in old board)
|
||||
|
||||
FILE_LOG(logINFO, ("Setting DAC %d: %d dac (%d mV)\n",ind, val, dacmV));
|
||||
// command
|
||||
if (val >= 0) {
|
||||
FILE_LOG(logDEBUG1,("\tWrite to Input Register and Update\n"));
|
||||
codata = LTC2620_DAC_CMD_SET;
|
||||
|
||||
} else if (val == -100) {
|
||||
FILE_LOG(logDEBUG1, ("\tPOWER DOWN\n"));
|
||||
codata = LTC2620_DAC_CMD_POWER_DOWN;
|
||||
}
|
||||
// address
|
||||
FILE_LOG(logDEBUG1, ("\tChip select bit:%d\n"
|
||||
"\tDac Channel:0x%x\n"
|
||||
"\tDac Value:0x%x\n",
|
||||
csdx, dacchannel, val));
|
||||
codata += ((dacchannel << LTC2620_DAC_ADDR_OFST) & LTC2620_DAC_ADDR_MSK) +
|
||||
((val << LTC2620_DAC_DATA_OFST) & LTC2620_DAC_DATA_MSK);
|
||||
// to spi
|
||||
serializeToSPI(DAC_CNTRL_REG, codata, (0x1 << csdx), LTC2620_DAC_NUMBITS,
|
||||
DAC_CNTRL_CLK_MSK, DAQ_CNTRL_DGTL_MSK, DAQ_CNTRL_DGTL_OFST);
|
||||
|
||||
dacValues[ind] = val;
|
||||
if (LTC2620_SetDACValue((int)ind, val, mV, &dacval) == OK)
|
||||
dacValues[ind] = dacval;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
retval[0] = dacValues[ind];
|
||||
retval[1] = dacToVoltage(retval[0]);
|
||||
FILE_LOG(logDEBUG1, ("Getting DAC %d : %d dac (%d mV)\n",ind, retval[0], retval[1]));
|
||||
int getDAC(enum DACINDEX ind, int mV) {
|
||||
if (!mV) {
|
||||
FILE_LOG(logDEBUG1, ("Getting DAC %d : %d dac\n",ind, dacValues[ind]));
|
||||
return dacValues[ind];
|
||||
}
|
||||
int voltage = -1;
|
||||
LTC2620_DacToVoltage(dacValues[ind], &voltage);
|
||||
FILE_LOG(logDEBUG1, ("Getting DAC %d : %d dac (%d mV)\n",ind, dacValues[ind], voltage));
|
||||
return voltage;
|
||||
}
|
||||
|
||||
int getMAXDACUnits() {
|
||||
return LTC2620_MAX_STEPS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -52,20 +52,6 @@ enum DACINDEX {VREF_DS, VCASCN_PB, VCASCP_PB, VOUT_CM, VCASC_OUT, VIN
|
||||
#define DEFAULT_TX_UDP_PORT (0xE185)
|
||||
|
||||
#define MAX_DAC_VOLTAGE_VALUE (2500)
|
||||
#define MAX_DAC_UNIT_VALUE (4096)
|
||||
|
||||
/* LTC2620 DAC DEFINES *///FIXME: if neeeded
|
||||
#define LTC2620_DAC_CMD_OFST (20)
|
||||
#define LTC2620_DAC_CMD_MSK (0x0000000F << LTC2620_DAC_CMD_OFST)
|
||||
#define LTC2620_DAC_ADDR_OFST (16)
|
||||
#define LTC2620_DAC_ADDR_MSK (0x0000000F << LTC2620_DAC_ADDR_OFST)
|
||||
#define LTC2620_DAC_DATA_OFST (4)
|
||||
#define LTC2620_DAC_DATA_MSK (0x00000FFF << LTC2620_DAC_DATA_OFST)
|
||||
|
||||
#define LTC2620_DAC_CMD_WRITE (0x00000000 << LTC2620_DAC_CMD_OFST)
|
||||
#define LTC2620_DAC_CMD_SET (0x00000003 << LTC2620_DAC_CMD_OFST)
|
||||
#define LTC2620_DAC_CMD_POWER_DOWN (0x00000004 << LTC2620_DAC_CMD_OFST)
|
||||
#define LTC2620_DAC_NUMBITS (24)
|
||||
|
||||
/** ENEt conf structs */
|
||||
typedef struct mac_header_struct{
|
||||
|
||||
Reference in New Issue
Block a user