ZMOD API
zmodadc1410.h
Go to the documentation of this file.
1 
9 #include "../Zmod/zmod.h"
10 
11 #ifndef _ZMODADC1410_H
12 #define _ZMODADC1410_H
13 
14 
15 // ZMODADC1410 specific registers
16 #define ZMODADC1410_REG_ADDR_TRIG 0x1C // TRIG register address
17 #define ZMODADC1410_REG_ADDR_WINDOW 0x20 // WINDOW register address
18 #define ZMODADC1410_REG_ADDR_SC1LGMULTCOEF 0x24 // SC1LGMULTCOEF register address
19 #define ZMODADC1410_REG_ADDR_SC1LGADDCOEF 0x28 // SC1LGADDCOEF register address
20 #define ZMODADC1410_REG_ADDR_SC1HGMULTCOEF 0x2C // SC1HGMULTCOEF register address
21 #define ZMODADC1410_REG_ADDR_SC1HGADDCOEF 0x30 // SC1HGADDCOEF register address
22 #define ZMODADC1410_REG_ADDR_SC2LGMULTCOEF 0x34 // SC2LGMULTCOEF register address
23 #define ZMODADC1410_REG_ADDR_SC2LGADDCOEF 0x38 // SC2LGADDCOEF register address
24 #define ZMODADC1410_REG_ADDR_SC2HGMULTCOEF 0x3C // SC2HGMULTCOEF register address
25 #define ZMODADC1410_REG_ADDR_SC2HGADDCOEF 0x40 // SC2HGADDCOEF register address
26 
27 // ZMODADC1410 specific register fields
28 
29 
30 #define ZMODADC1410_REGFLD_CR_RUNSTOP ZMOD_REG_ADDR_CR, 4, 1 // RUNSTOP field of CR register
31 #define ZMODADC1410_REGFLD_CR_TEST_MODE ZMOD_REG_ADDR_CR, 5, 1 // TEST_MODE field of CR register
32 
33 
34 #define ZMODADC1410_REGFLD_SR_BUF_FULL ZMOD_REG_ADDR_SR, 21, 1 // BUF_FULL field of SR register
35 
36 #define ZMODADC1410_REGFLD_IER_BUF_FULL ZMOD_REG_ADDR_IER, 21, 1 // BUF_FULL field of IER register
37 
38 #define ZMODADC1410_REGFLD_TRIG_CHANNEL ZMODADC1410_REG_ADDR_TRIG, 0, 2 // CHANNEL field of TRIG register
39 #define ZMODADC1410_REGFLD_TRIG_MODE ZMODADC1410_REG_ADDR_TRIG, 2, 2 // MODE field of TRIG register
40 #define ZMODADC1410_REGFLD_TRIG_EDGE ZMODADC1410_REG_ADDR_TRIG, 4, 1 // EDGE field of TRIG register
41 #define ZMODADC1410_REGFLD_TRIG_LEVEL ZMODADC1410_REG_ADDR_TRIG, 5, 14 // LEVEL field of TRIG register
42 #define ZMODADC1410_REGFLD_TRIG_SC1_AC_DC ZMODADC1410_REG_ADDR_TRIG, 19, 1 // SC1_AC_DC field of TRIG register
43 #define ZMODADC1410_REGFLD_TRIG_SC2_AC_DC ZMODADC1410_REG_ADDR_TRIG, 20, 1 // SC2_AC_DC field of TRIG register
44 #define ZMODADC1410_REGFLD_TRIG_SC1_HG_LG ZMODADC1410_REG_ADDR_TRIG, 21, 1 // SC1_HG_LG field of TRIG register
45 #define ZMODADC1410_REGFLD_TRIG_SC2_HG_LG ZMODADC1410_REG_ADDR_TRIG, 22, 1 // SC2_HG_LG field of TRIG register
46 #define ZMODADC1410_REGFLD_TRIG_SYNC ZMODADC1410_REG_ADDR_TRIG, 23, 4 // SYNC field of TRIG register
47 
48 #define ZMODADC1410_REGFLD_WINDOW_WND ZMODADC1410_REG_ADDR_WINDOW, 0, 26 // WND field of WINDOW register
49 
50 #define ZMODADC1410_REGFLD_SC1LGMULTCOEF_VAL ZMODADC1410_REG_ADDR_SC1LGMULTCOEF, 0, 18 // VAL field of SC1LGMULTCOEF register
51 
52 #define ZMODADC1410_REGFLD_SC1HGMULTCOEF_VAL ZMODADC1410_REG_ADDR_SC1HGMULTCOEF, 0, 18 // VAL field of SC1HGMULTCOEF register
53 
54 #define ZMODADC1410_REGFLD_SC1LGADDCOEF_VAL ZMODADC1410_REG_ADDR_SC1LGADDCOEF, 0, 18 // VAL field of SC1LGADDCOEF register
55 
56 #define ZMODADC1410_REGFLD_SC1HGADDCOEF_VAL ZMODADC1410_REG_ADDR_SC1HGADDCOEF, 0, 18 // VAL field of SC1HGADDCOEF register
57 
58 #define ZMODADC1410_REGFLD_SC2LGMULTCOEF_VAL ZMODADC1410_REG_ADDR_SC2LGMULTCOEF, 0, 18 // VAL field of SC2LGMULTCOEF register
59 
60 #define ZMODADC1410_REGFLD_SC2HGMULTCOEF_VAL ZMODADC1410_REG_ADDR_SC2HGMULTCOEF, 0, 18 // VAL field of SC2HGMULTCOEF register
61 
62 #define ZMODADC1410_REGFLD_SC2LGADDCOEF_VAL ZMODADC1410_REG_ADDR_SC2LGADDCOEF, 0, 18 // VAL field of SC2LGADDCOEF register
63 
64 #define ZMODADC1410_REGFLD_SC2HGADDCOEF_VAL ZMODADC1410_REG_ADDR_SC2HGADDCOEF, 0, 18 // VAL field of SC2HGADDCOEF register
65 // ZMODADC1410 calibration
66 #define ZMODADC1410_CALIB_USER_ADDR 0x7000
67 #define ZMODADC1410_CALIB_FACT_ADDR 0x8100
68 
69 #define ZMODADC1410_CALIB_ID 0xAD
70 
71 typedef struct _CALIBECLYPSEADC{ // 128 B
72  unsigned char id; // 0xAD
73  int date; // unix time
74  float cal[2][2][2]; // [channel 0:1][low/high gain 0:1][0 multiplicative : 1 additive]
75  unsigned char nop[68]; // reserved
76  char log[22]; // BT log: Reference Board SN
77  unsigned char crc; // to generate: init 0 and -= 127 bytes; the checksum of the structure should be 0
78 } __attribute__((__packed__)) CALIBECLYPSEADC;
79 
80 class ZMODADC1410: public ZMOD {
81 private:
82  uint32_t *interruptBuffer;
83 
84  uint8_t acquirePolling(uint32_t* buffer, uint8_t channel, uint8_t mode, uint32_t level, uint32_t edge, uint32_t window, size_t length);
85 #ifndef LINUX_APP
86  uint8_t acquireInterrupt(uint32_t* buffer, uint8_t channel, uint8_t mode, uint32_t level, uint32_t edge, uint32_t window, size_t length);
87 #endif //LINUX_APP
88 
89 protected:
90 
91 public:
92  ZMODADC1410(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress, int zmodInterrupt, int dmaInterrupt);
93  uint32_t* allocChannelsBuffer(size_t length);
94  void freeChannelsBuffer(uint32_t *buf, size_t length);
95  uint16_t channelData(uint8_t channel, uint32_t data);
96  int16_t signedChannelData(uint8_t channel, uint32_t data);
97 
98  void setTransferLength(size_t length);
99  void setTrigger(uint8_t channel, uint8_t mode, int16_t level, uint8_t edge, uint32_t window);
100  void enableBufferFullInterrupt(uint8_t enBuffFullInt);
101  uint8_t isBufferFull();
103 
104  void start();
105  void stop();
106 
107  uint8_t acquireTriggeredPolling(uint32_t* buffer, uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length);
108  uint8_t acquireImmediatePolling(uint32_t* buffer, size_t length);
109 #ifndef LINUX_APP
110  uint8_t acquireTriggeredInterrupt(uint32_t* buffer, uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length);
111  uint8_t acquireImmediateInterrupt(uint32_t* buffer, uint8_t channel, size_t length);
112 #endif //LINUX_APP
113 
114 
115  uint8_t autoTestRamp(uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length);
116  void processInterrupt() override;
117 
118  void setGain(uint8_t channel, uint8_t gain);
119  void setCoupling(uint8_t channel, uint8_t coupling);
120  int32_t computeCoefMult(float cg, uint8_t gain);
121  int32_t computeCoefAdd(float ca, uint8_t gain);
122 
123  virtual int readUserCalib();
124  void setCalibValues(uint8_t channel, uint8_t gain, float valG, float valA);
125 
126  float getVoltFromSignedRaw(int32_t raw, uint8_t gain);
127 };
128 
129 #endif
ZMODADC1410::setGain
void setGain(uint8_t channel, uint8_t gain)
Definition: zmodadc1410.cpp:524
ZMODADC1410::setTransferLength
void setTransferLength(size_t length)
Definition: zmodadc1410.cpp:104
ZMODADC1410::readUserCalib
virtual int readUserCalib()
Definition: zmodadc1410.cpp:404
ZMODADC1410::autoTestRamp
uint8_t autoTestRamp(uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length)
Definition: zmodadc1410.cpp:451
ZMODADC1410::start
void start()
Definition: zmodadc1410.cpp:229
ZMODADC1410::waitForBufferFullPolling
void waitForBufferFullPolling()
Definition: zmodadc1410.cpp:204
ZMODADC1410
Definition: zmodadc1410.h:80
ZMODADC1410::signedChannelData
int16_t signedChannelData(uint8_t channel, uint32_t data)
Definition: zmodadc1410.cpp:131
ZMODADC1410::acquireImmediatePolling
uint8_t acquireImmediatePolling(uint32_t *buffer, size_t length)
Definition: zmodadc1410.cpp:282
ZMODADC1410::freeChannelsBuffer
void freeChannelsBuffer(uint32_t *buf, size_t length)
Definition: zmodadc1410.cpp:70
ZMODADC1410::channelData
uint16_t channelData(uint8_t channel, uint32_t data)
Definition: zmodadc1410.cpp:117
ZMOD
Definition: zmod.h:47
ZMODADC1410::acquireTriggeredInterrupt
uint8_t acquireTriggeredInterrupt(uint32_t *buffer, uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length)
Definition: zmodadc1410.cpp:356
ZMODADC1410::setCalibValues
void setCalibValues(uint8_t channel, uint8_t gain, float valG, float valA)
Definition: zmodadc1410.cpp:560
ZMODADC1410::computeCoefMult
int32_t computeCoefMult(float cg, uint8_t gain)
Definition: zmodadc1410.cpp:583
ZMODADC1410::processInterrupt
void processInterrupt() override
Definition: zmodadc1410.cpp:384
ZMODADC1410::getVoltFromSignedRaw
float getVoltFromSignedRaw(int32_t raw, uint8_t gain)
Definition: zmodadc1410.cpp:611
ZMODADC1410::setCoupling
void setCoupling(uint8_t channel, uint8_t coupling)
Definition: zmodadc1410.cpp:540
ZMODADC1410::stop
void stop()
Definition: zmodadc1410.cpp:242
ZMODADC1410::allocChannelsBuffer
uint32_t * allocChannelsBuffer(size_t length)
Definition: zmodadc1410.cpp:58
ZMODADC1410::enableBufferFullInterrupt
void enableBufferFullInterrupt(uint8_t enBuffFullInt)
Definition: zmodadc1410.cpp:219
ZMODADC1410::acquireTriggeredPolling
uint8_t acquireTriggeredPolling(uint32_t *buffer, uint8_t channel, uint32_t level, uint32_t edge, uint32_t window, size_t length)
Definition: zmodadc1410.cpp:265
ZMODADC1410::isBufferFull
uint8_t isBufferFull()
Definition: zmodadc1410.cpp:194
ZMODADC1410::setTrigger
void setTrigger(uint8_t channel, uint8_t mode, int16_t level, uint8_t edge, uint32_t window)
Definition: zmodadc1410.cpp:88
_CALIBECLYPSEADC
Definition: zmodadc1410.h:71
ZMODADC1410::computeCoefAdd
int32_t computeCoefAdd(float ca, uint8_t gain)
Definition: zmodadc1410.cpp:597
ZMODADC1410::ZMODADC1410
ZMODADC1410(uintptr_t baseAddress, uintptr_t dmaAddress, uintptr_t iicAddress, uintptr_t flashAddress, int zmodInterrupt, int dmaInterrupt)
Definition: zmodadc1410.cpp:44
ZMODADC1410::acquireImmediateInterrupt
uint8_t acquireImmediateInterrupt(uint32_t *buffer, uint8_t channel, size_t length)
Definition: zmodadc1410.cpp:373