mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-05-02 10:50:05 +02:00
75 lines
2.3 KiB
C
75 lines
2.3 KiB
C
#include "MAX1932.h"
|
|
#include "blackfin.h"
|
|
#include "clogger.h"
|
|
#include "common.h"
|
|
#include "commonServerFunctions.h" // blackfin.h, ansi.h
|
|
#include "sls_detector_defs.h"
|
|
|
|
/* MAX1932 HV DEFINES */
|
|
|
|
#define MAX1932_HV_NUMBITS (8)
|
|
#define MAX1932_HV_DATA_OFST (0)
|
|
#define MAX1932_HV_DATA_MSK (0x000000FF << MAX1932_HV_DATA_OFST)
|
|
// higher voltage requires lower dac value, 0 is off
|
|
#define MAX1932_MIN_DAC_VAL (0xFF)
|
|
#define MAX1932_MAX_DAC_VAL (0x1)
|
|
#define MAX1932_POWER_OFF_DAC_VAL (0x0)
|
|
|
|
// defines from the fpga
|
|
uint32_t MAX1932_Reg = 0x0;
|
|
uint32_t MAX1932_CsMask = 0x0;
|
|
uint32_t MAX1932_ClkMask = 0x0;
|
|
uint32_t MAX1932_DigMask = 0x0;
|
|
int MAX1932_DigOffset = 0x0;
|
|
int MAX1932_MinVoltage = 0;
|
|
int MAX1932_MaxVoltage = 0;
|
|
|
|
void MAX1932_SetDefines(uint32_t reg, uint32_t cmsk, uint32_t clkmsk,
|
|
uint32_t dmsk, int dofst, int minMV, int maxMV) {
|
|
LOG(logINFOBLUE, ("Configuring High Voltage\n"));
|
|
MAX1932_Reg = reg;
|
|
MAX1932_CsMask = cmsk;
|
|
MAX1932_ClkMask = clkmsk;
|
|
MAX1932_DigMask = dmsk;
|
|
MAX1932_DigOffset = dofst;
|
|
MAX1932_MinVoltage = minMV;
|
|
MAX1932_MaxVoltage = maxMV;
|
|
}
|
|
|
|
void MAX1932_Disable() {
|
|
bus_w(MAX1932_Reg, (bus_r(MAX1932_Reg) | MAX1932_CsMask | MAX1932_ClkMask) &
|
|
~(MAX1932_DigMask));
|
|
}
|
|
|
|
int MAX1932_Set(int *val) {
|
|
LOG(logDEBUG1, ("Setting high voltage to %d\n", *val));
|
|
if (*val < 0)
|
|
return FAIL;
|
|
|
|
int dacvalue = 0;
|
|
|
|
// limit values (normally < 60 => 0 (off))
|
|
if (*val < MAX1932_MinVoltage) {
|
|
dacvalue = MAX1932_POWER_OFF_DAC_VAL;
|
|
*val = 0;
|
|
}
|
|
// limit values (normally > 200 => 0x1 (max))
|
|
else if (*val > MAX1932_MaxVoltage) {
|
|
dacvalue = MAX1932_MAX_DAC_VAL;
|
|
*val = MAX1932_MaxVoltage;
|
|
}
|
|
// convert value
|
|
else {
|
|
// no failure in conversion as limits handled (range from 0x1 to 0xFF)
|
|
ConvertToDifferentRange(MAX1932_MinVoltage, MAX1932_MaxVoltage,
|
|
MAX1932_MIN_DAC_VAL, MAX1932_MAX_DAC_VAL, *val,
|
|
&dacvalue);
|
|
dacvalue &= MAX1932_HV_DATA_MSK;
|
|
}
|
|
|
|
LOG(logINFO, ("\t%dV (dacval %d)\n", *val, dacvalue));
|
|
serializeToSPI(MAX1932_Reg, dacvalue, MAX1932_CsMask, MAX1932_HV_NUMBITS,
|
|
MAX1932_ClkMask, MAX1932_DigMask, MAX1932_DigOffset, 0);
|
|
return OK;
|
|
}
|