mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 16:20:03 +02:00
my3: added function to change the gain + some functions for my3 flags added
This commit is contained in:
parent
63259ec5c8
commit
7955426682
@ -110,6 +110,190 @@ patternParameters *setChipStatusRegister(int csr) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
patternParameters *setInterpolation(int mask) {
|
||||||
|
int csr;
|
||||||
|
if (mask)
|
||||||
|
csr=chipStatusRegister|(1<< CSR_interp);
|
||||||
|
else
|
||||||
|
csr=chipStatusRegister & ~(1<< CSR_interp);
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
patternParameters *setPumpProbe(int mask) {
|
||||||
|
int csr;
|
||||||
|
if (mask)
|
||||||
|
csr=chipStatusRegister|(1<< CSR_pumprobe);
|
||||||
|
else
|
||||||
|
csr=chipStatusRegister & ~(1<< CSR_pumprobe);
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
|
||||||
|
}
|
||||||
|
patternParameters *setDigitalPulsing(int mask) {
|
||||||
|
|
||||||
|
int csr;
|
||||||
|
if (mask)
|
||||||
|
csr=chipStatusRegister|(1<< CSR_dpulse);
|
||||||
|
else
|
||||||
|
csr=chipStatusRegister & ~(1<< CSR_dpulse);
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
|
||||||
|
}
|
||||||
|
patternParameters *setAnalogPulsing(int mask){
|
||||||
|
|
||||||
|
int csr;
|
||||||
|
if (mask)
|
||||||
|
csr=chipStatusRegister|(1<< CSR_apulse);
|
||||||
|
else
|
||||||
|
csr=chipStatusRegister & ~(1<< CSR_apulse);
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
|
||||||
|
}
|
||||||
|
patternParameters *setNegativePolarity(int mask){
|
||||||
|
|
||||||
|
int csr;
|
||||||
|
if (mask)
|
||||||
|
csr=chipStatusRegister|(1<< CSR_invpol);
|
||||||
|
else
|
||||||
|
csr=chipStatusRegister & ~(1<< CSR_invpol);
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int setGainPreamp(int pgain, int *csr) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
switch (pgain) {
|
||||||
|
case Cp_0:
|
||||||
|
case Cp_15:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C10pre);
|
||||||
|
break;
|
||||||
|
case Cp_10:
|
||||||
|
case Cp_45:
|
||||||
|
*csr=(*csr)|(1<<CSR_C10pre);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad preamp gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (pgain) {
|
||||||
|
case Cp_0:
|
||||||
|
case Cp_10:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C15pre);
|
||||||
|
break;
|
||||||
|
case Cp_15:
|
||||||
|
case Cp_45:
|
||||||
|
*csr=(*csr)|(1<<CSR_C15pre);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad preamp gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
int setGainShaper(int shgain, int *csr){
|
||||||
|
|
||||||
|
|
||||||
|
switch (shgain) {
|
||||||
|
case Csh_0:
|
||||||
|
case Csh_30:
|
||||||
|
case Csh_50:
|
||||||
|
case Csh_80:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C15sh);
|
||||||
|
break;
|
||||||
|
case Csh_15:
|
||||||
|
case Csh_45:
|
||||||
|
case Csh_65:
|
||||||
|
case Csh_95:
|
||||||
|
*csr=(*csr)|(1<<CSR_C15sh);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad shaper gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (shgain) {
|
||||||
|
case Csh_0:
|
||||||
|
case Csh_15:
|
||||||
|
case Csh_50:
|
||||||
|
case Csh_65:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C30sh);
|
||||||
|
break;
|
||||||
|
case Csh_30:
|
||||||
|
case Csh_45:
|
||||||
|
case Csh_80:
|
||||||
|
case Csh_95:
|
||||||
|
*csr=(*csr)|(1<<CSR_C30sh);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad shaper gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
switch (shgain) {
|
||||||
|
case Csh_0:
|
||||||
|
case Csh_15:
|
||||||
|
case Csh_30:
|
||||||
|
case Csh_45:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C50sh);
|
||||||
|
break;
|
||||||
|
case Csh_80:
|
||||||
|
case Csh_50:
|
||||||
|
case Csh_65:
|
||||||
|
case Csh_95:
|
||||||
|
*csr=(*csr)|(1<<CSR_C50sh);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad shaper gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int setGainAC(int acgain, int *csr){
|
||||||
|
|
||||||
|
switch (acgain) {
|
||||||
|
case Cac_450:
|
||||||
|
*csr=(*csr)&~(1<<CSR_C225ACsh);
|
||||||
|
break;
|
||||||
|
case Cac225:
|
||||||
|
*csr=(*csr)|(1<<CSR_C225ACsh);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG(logERROR, ("Bad ac gain"));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
patternParameters *setChipGain(int pgain, int shgain, int acgain){
|
||||||
|
int csr=chipStatusRegister;
|
||||||
|
|
||||||
|
if (setGainPreamp(pgain,&csr))
|
||||||
|
return NULL;
|
||||||
|
if (setGainShaper(shgain,&csr))
|
||||||
|
return NULL;
|
||||||
|
if (setGainAC(acgain,&csr))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return setChipStatusRegister(csr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
patternParameters *setChannelRegisterChip(int ichip, int *mask, int *trimbits) {
|
patternParameters *setChannelRegisterChip(int ichip, int *mask, int *trimbits) {
|
||||||
|
|
||||||
patternParameters *pat = malloc(sizeof(patternParameters));
|
patternParameters *pat = malloc(sizeof(patternParameters));
|
||||||
|
@ -48,12 +48,25 @@
|
|||||||
|
|
||||||
#define CSR_default (1<<CSR_C10pre )|(1<< CSR_C30sh)
|
#define CSR_default (1<<CSR_C10pre )|(1<< CSR_C30sh)
|
||||||
|
|
||||||
|
enum {Cp_0, Cp_10, Cp_15, Cp_45};
|
||||||
|
enum {Csh_0,Csh_15,Csh_30,Csh_45,Csh_50,Csh_65,Csh_80,Csh_95};
|
||||||
|
enum {Cac225, Cac_450};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define default_gain
|
||||||
int setBit(int ibit, int patword);
|
int setBit(int ibit, int patword);
|
||||||
int clearBit(int ibit, int patword);
|
int clearBit(int ibit, int patword);
|
||||||
patternParameters *setChipStatusRegister(int csr);
|
patternParameters *setChipStatusRegister(int csr);
|
||||||
patternParameters *setChannelRegisterChip(int ichip, int *mask, int *trimbits);
|
patternParameters *setChannelRegisterChip(int ichip, int *mask, int *trimbits);
|
||||||
|
patternParameters *setInterpolation(int mask);
|
||||||
|
patternParameters *setPumpProbe(int mask);
|
||||||
|
patternParameters *setDigitalPulsing(int mask);
|
||||||
|
patternParameters *setAnalogPulsing(int mask);
|
||||||
|
patternParameters *setNegativePolarity(int mask);
|
||||||
|
patternParameters *setChipGain(int pgain, int shgain, int acgain);
|
||||||
|
int setGainAC(int shgain, int *csr);
|
||||||
|
int setGainShaper(int shgain, int *csr);
|
||||||
|
int setGainPreamp(int pgain, int *csr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1145,8 +1145,6 @@ int setModule(sls_detector_module myMod, char *mess) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int setTrimbits(int *trimbits) {
|
int setTrimbits(int *trimbits) {
|
||||||
|
|
||||||
|
|
||||||
// remember previous run clock
|
// remember previous run clock
|
||||||
uint32_t prevRunClk = clkDivider[SYSTEM_C0];
|
uint32_t prevRunClk = clkDivider[SYSTEM_C0];
|
||||||
patternParameters *pat=NULL;
|
patternParameters *pat=NULL;
|
||||||
@ -1177,7 +1175,6 @@ int setTrimbits(int *trimbits) {
|
|||||||
}
|
}
|
||||||
LOG(logINFO, ("All trimbits have been loaded\n"));
|
LOG(logINFO, ("All trimbits have been loaded\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
trimmingPrint = logINFO;
|
trimmingPrint = logINFO;
|
||||||
// set back to previous clock
|
// set back to previous clock
|
||||||
if (setClockDivider(SYSTEM_C0, prevRunClk) == FAIL) {
|
if (setClockDivider(SYSTEM_C0, prevRunClk) == FAIL) {
|
||||||
@ -1188,7 +1185,6 @@ int setTrimbits(int *trimbits) {
|
|||||||
if (error != 0) {
|
if (error != 0) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2664,3 +2660,52 @@ int getNumberOfChips() { return NCHIP; }
|
|||||||
int getNumberOfDACs() { return NDAC; }
|
int getNumberOfDACs() { return NDAC; }
|
||||||
int getNumberOfChannelsPerChip() { return NCHAN; }
|
int getNumberOfChannelsPerChip() { return NCHAN; }
|
||||||
|
|
||||||
|
int setGain(int gain) {
|
||||||
|
// remember previous run clock
|
||||||
|
uint32_t prevRunClk = clkDivider[SYSTEM_C0];
|
||||||
|
patternParameters *pat=NULL;
|
||||||
|
int error=0;
|
||||||
|
// set to trimming clock
|
||||||
|
if (setClockDivider(SYSTEM_C0, DEFAULT_TRIMMING_RUN_CLKDIV) == FAIL) {
|
||||||
|
LOG(logERROR,
|
||||||
|
("Could not start trimming. Could not set to trimming clock\n"));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
int pgain=Cp_10;
|
||||||
|
int shgain=Csh_30;
|
||||||
|
int acgain=Cac_450;
|
||||||
|
/*
|
||||||
|
acgain=gain%2;
|
||||||
|
gain/=2;
|
||||||
|
shgain=gain%8;
|
||||||
|
gain/=8;
|
||||||
|
pgain=gain
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
pat=setChipGain(pgain, shgain, acgain);
|
||||||
|
if (pat) {
|
||||||
|
error|=loadPattern(pat);
|
||||||
|
if (error==0)
|
||||||
|
startPattern();
|
||||||
|
free(pat);
|
||||||
|
} else
|
||||||
|
error=1;
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
if (error == 0) {
|
||||||
|
|
||||||
|
LOG(logINFO, ("The gain has been changed\n"));
|
||||||
|
}
|
||||||
|
trimmingPrint = logINFO;
|
||||||
|
// set back to previous clock
|
||||||
|
if (setClockDivider(SYSTEM_C0, prevRunClk) == FAIL) {
|
||||||
|
LOG(logERROR, ("Could not set to previous run clock after trimming\n"));
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error != 0) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user