ZMOD API
zmoddac1411.h
1 
9 #include "../Zmod/zmod.h"
10 
11 #ifndef _ZMODDAC1411_H
12 #define _ZMODDAC1411_H
13 
14 
15 // ZMODDAC1411 specific registers
16 #define ZMODDAC1411_REG_ADDR_TRIG 0x1C // TRIG register address
17 #define ZMODDAC1411_REG_ADDR_SC1LGMULTCOEF 0x24 // SC1LGMULTCOEF register address
18 #define ZMODDAC1411_REG_ADDR_SC1LGADDCOEF 0x28 // SC1LGADDCOEF register address
19 #define ZMODDAC1411_REG_ADDR_SC1HGMULTCOEF 0x2C // SC1HGMULTCOEF register address
20 #define ZMODDAC1411_REG_ADDR_SC1HGADDCOEF 0x30 // SC1HGADDCOEF register address
21 #define ZMODDAC1411_REG_ADDR_SC2LGMULTCOEF 0x34 // SC2LGMULTCOEF register address
22 #define ZMODDAC1411_REG_ADDR_SC2LGADDCOEF 0x38 // SC2LGADDCOEF register address
23 #define ZMODDAC1411_REG_ADDR_SC2HGMULTCOEF 0x3C // SC2HGMULTCOEF register address
24 #define ZMODDAC1411_REG_ADDR_SC2HGADDCOEF 0x40 // SC2HGADDCOEF register address
25 
26 // ZMODDAC1411 specific register fields
27 
28 #define ZMODDAC1411_REGFLD_CR_DAC_EN ZMOD_REG_ADDR_CR, 4, 1 // DAC_EN field of CR register
29 #define ZMODDAC1411_REGFLD_CR_TEST_MODE ZMOD_REG_ADDR_CR, 5, 1 // TEST_MODE field of CR register
30 #define ZMODDAC1411_REGFLD_CR_OUT_ADDR_CNT_RST ZMOD_REG_ADDR_CR, 6, 1 // OUT_ADDR_CNT_RST field of CR register
31 #define ZMODDAC1411_REGFLD_CR_DIV_RATE ZMOD_REG_ADDR_CR, 16, 14 // DIV_RATE field of CR register
32 
33 #define ZMODDAC1411_REGFLD_SR_BUF_FULL ZMOD_REG_ADDR_SR, 21, 1 // BUF_FULL field of SR register
34 
35 #define ZMODDAC1411_REGFLD_IER_BUF_FULL ZMOD_REG_ADDR_IER, 21, 1 // BUF_FULL field of IER register
36 
37 #define ZMODDAC1411_REGFLD_TRIG_SC1_HG_LG ZMODDAC1411_REG_ADDR_TRIG, 21, 1 // SC1_HG_LG field of TRIG register
38 #define ZMODDAC1411_REGFLD_TRIG_SC2_HG_LG ZMODDAC1411_REG_ADDR_TRIG, 22, 1 // SC2_HG_LG field of TRIG register
39 
40 #define ZMODDAC1411_REGFLD_SC1LGMULTCOEF_VAL ZMODDAC1411_REG_ADDR_SC1LGMULTCOEF, 0, 18 // VAL field of SC1LGMULTCOEF register
41 
42 #define ZMODDAC1411_REGFLD_SC1HGMULTCOEF_VAL ZMODDAC1411_REG_ADDR_SC1HGMULTCOEF, 0, 18 // VAL field of SC1HGMULTCOEF register
43 
44 #define ZMODDAC1411_REGFLD_SC1LGADDCOEF_VAL ZMODDAC1411_REG_ADDR_SC1LGADDCOEF, 0, 18 // VAL field of SC1LGADDCOEF register
45 
46 #define ZMODDAC1411_REGFLD_SC1HGADDCOEF_VAL ZMODDAC1411_REG_ADDR_SC1HGADDCOEF, 0, 18 // VAL field of SC1HGADDCOEF register
47 
48 #define ZMODDAC1411_REGFLD_SC2LGMULTCOEF_VAL ZMODDAC1411_REG_ADDR_SC2LGMULTCOEF, 0, 18 // VAL field of SC2LGMULTCOEF register
49 
50 #define ZMODDAC1411_REGFLD_SC2HGMULTCOEF_VAL ZMODDAC1411_REG_ADDR_SC2HGMULTCOEF, 0, 18 // VAL field of SC2HGMULTCOEF register
51 
52 #define ZMODDAC1411_REGFLD_SC2LGADDCOEF_VAL ZMODDAC1411_REG_ADDR_SC2LGADDCOEF, 0, 18 // VAL field of SC2LGADDCOEF register
53 
54 #define ZMODDAC1411_REGFLD_SC2HGADDCOEF_VAL ZMODDAC1411_REG_ADDR_SC2HGADDCOEF, 0, 18 // VAL field of SC2HGADDCOEF register
55 // ZMODDAC1411 calibration
56 #define ZMODDAC1411_CALIB_USER_ADDR 0x7000
57 #define ZMODDAC1411_CALIB_FACT_ADDR 0x8100
58 
59 #define ZMODDAC1411_CALIB_ID 0xDA
60 
61 typedef struct _CALIBECLYPSEDAC{ // 128 B
62  unsigned char id; // 0xDA
63  int date; // unix time
64  float cal[2][2][2]; // [channel 0:1][low/high gain 0:1][0 multiplicative : 1 additive]
65  unsigned char lin[2][34]; // [0:32] libearity calibration, 33 number of averages used during calibration, AD9717 pg 45
66  char log[22]; // BT log: Reference Board SN
67  unsigned char crc; // to generate: init 0 and -= 127 bytes; the checksum of the structure should be 0
68 } __attribute__((__packed__)) CALIBECLYPSEDAC;
69 
70 
71 class ZMODDAC1411: public ZMOD {
72 private:
73 protected:
74 
75 public:
76  ZMODDAC1411(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress, int dmaInterrupt);
77 
78  uint32_t* allocChannelsBuffer(size_t length);
79  void freeChannelsBuffer(uint32_t *buf, size_t length);
80  uint32_t arrangeChannelData(uint8_t channel, uint16_t data);
81  uint32_t arrangeSignedChannelData(uint8_t channel, int16_t data);
82 
83  void setOutputSampleFrequencyDivider(uint16_t val);
84  uint8_t setData(uint32_t* buffer, size_t length);
85  void setGain(uint8_t channel, uint8_t gain);
86 
87  void start();
88  void stop();
89  void resetOutputCounter();
90  void processInterrupt() override;
91 
92  int32_t computeCoefMult(float cg, uint8_t gain);
93  int32_t computeCoefAdd(float ca, float cg, uint8_t gain);
94 
95  int readUserCalib() override;
96  void setCalibValues(uint8_t channel, uint8_t gain, float valG, float valA);
97 
98  int32_t getSignedRawFromVolt(float voltValue, uint8_t gain);
99 };
100 
101 #endif
ZMODDAC1411::setGain
void setGain(uint8_t channel, uint8_t gain)
Definition: zmoddac1411.cpp:215
ZMODDAC1411
Definition: zmoddac1411.h:71
ZMODDAC1411::resetOutputCounter
void resetOutputCounter()
Definition: zmoddac1411.cpp:106
ZMODDAC1411::computeCoefAdd
int32_t computeCoefAdd(float ca, float cg, uint8_t gain)
Definition: zmoddac1411.cpp:253
ZMODDAC1411::setData
uint8_t setData(uint32_t *buffer, size_t length)
Definition: zmoddac1411.cpp:122
ZMODDAC1411::arrangeChannelData
uint32_t arrangeChannelData(uint8_t channel, uint16_t data)
Definition: zmoddac1411.cpp:82
ZMODDAC1411::stop
void stop()
Definition: zmoddac1411.cpp:153
ZMODDAC1411::arrangeSignedChannelData
uint32_t arrangeSignedChannelData(uint8_t channel, int16_t data)
Definition: zmoddac1411.cpp:97
ZMODDAC1411::readUserCalib
int readUserCalib() override
Definition: zmoddac1411.cpp:182
ZMOD
Definition: zmod.h:47
ZMODDAC1411::ZMODDAC1411
ZMODDAC1411(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress, int dmaInterrupt)
Definition: zmoddac1411.cpp:42
ZMODDAC1411::allocChannelsBuffer
uint32_t * allocChannelsBuffer(size_t length)
Definition: zmoddac1411.cpp:57
ZMODDAC1411::setOutputSampleFrequencyDivider
void setOutputSampleFrequencyDivider(uint16_t val)
Definition: zmoddac1411.cpp:162
ZMODDAC1411::getSignedRawFromVolt
int32_t getSignedRawFromVolt(float voltValue, uint8_t gain)
Definition: zmoddac1411.cpp:267
ZMODDAC1411::processInterrupt
void processInterrupt() override
Definition: zmoddac1411.cpp:169
ZMODDAC1411::freeChannelsBuffer
void freeChannelsBuffer(uint32_t *buf, size_t length)
Definition: zmoddac1411.cpp:69
ZMODDAC1411::computeCoefMult
int32_t computeCoefMult(float cg, uint8_t gain)
Definition: zmoddac1411.cpp:238
ZMODDAC1411::start
void start()
Definition: zmoddac1411.cpp:144
_CALIBECLYPSEDAC
Definition: zmoddac1411.h:61