AFE_NXP_Arduino 2.0.3
Analog Front-End (AFE) device operation sample code for Arduino
Loading...
Searching...
No Matches
NAFE33352.h
Go to the documentation of this file.
1
9#include <Arduino.h>
10#include "AFE_NXP.h"
11#include "SPI_for_AFE.h"
12
13#ifndef ARDUINO_AFE_NAFE33352_DRIVER_H
14#define ARDUINO_AFE_NAFE33352_DRIVER_H
15
17{
18public:
19 using ch_setting_t = uint16_t[ 4 ];
20 static constexpr double on_board_shunt_resister = 50.00;
21
23 NAFE33352_Base( bool spi_addr, bool highspeed_variant, int nINT, int DRDY, int SYN, int nRESET, int DRDY_input, int SYNCDAC );
24
26 virtual ~NAFE33352_Base();
27
29 virtual void boot( void );
30
32 virtual void reset( bool hardware_reset = false );
33
43
49 virtual void open_logical_channel( int ch, const uint16_t (&cc)[ 4 ] );
50
53 {
54 public:
56 virtual ~LogicalChannel();
57
62 void configure( const uint16_t (&cc)[ 3 ] );
63
70 void configure( uint16_t cc0, uint16_t cc1 = 0x0000, uint16_t cc2 = 0x0000 );
71 };
72
75
77 class DAC
78 {
79 public:
80
90
91 DAC();
92 virtual ~DAC();
93
98 void configure( const uint16_t (&cc)[ 6 ] );
99
110
116 void configure( ModeSelect mode, double full_scale_range = 0.00 );
117
122 void configure( double full_scale_range );
123
128 void output( double value );
129
134 DAC& operator=( double value );
135
138 private:
141 };
142
144
145private:
146 double calc_delay( int ch );
148
149public:
150 void open_dac_output( const uint16_t (&cc)[ 6 ] );
151
152
157 virtual void close_logical_channel( int ch );
158
161 virtual void close_logical_channel( void );
162
167 void enable_logical_channel( int ch );
168
173 virtual void start( int ch );
174
177 virtual void start( void );
178
181 virtual void start_continuous_conversion();
182
187 virtual void DRDY_by_sequencer_done( bool flag = true );
188
193 virtual raw_t read( int ch );
194
199 virtual void read( raw_t *data );
200
205 virtual void read( volt_t *data );
206
212 inline double raw2v( int ch, raw_t value )
213 {
214 if ( mux_setting[ ch ] == ISNS )
216 else if ( mux_setting[ ch ] == BG )
217 return value - (double)(1L << 24) * 20.00 * 2.50 / (12.50 * (double)(1L << 24)) -1.50;
218 else
219 return value * coeff_V[ ch ];
220 }
221
222 virtual void dac_out( double vi, double full_scale, uint8_t bit_length );
223 int32_t dac_code( double a, double full_scale, uint8_t bit_length );
224
225 constexpr static double pga_gain[] = { 1.00, 16.00 };
226
248
253
254 enum class Register16 : uint16_t {
255 CRC_CONF_REGS = 0x20,
256 CRC_COEF_REGS = 0x21,
257 CRC_TRIM_REGS = 0x22,
258 CRC_TRIM_REF = 0x3F,
259 GPI_DATA = 0x23,
260 GPO_ENABLE = 0x24,
261 GPIO_FUNCTION = 0x25,
262 GPI_ENABLE = 0x26,
263 GPI_EDGE_POS = 0x27,
264 GPI_EDGE_NEG = 0x28,
265 GPO_DATA = 0x29,
266 SYS_CONFIG = 0x2A,
267 SYS_STATUS = 0x2B,
268 CK_SRC_SEL_CONFIG = 0x30,
269 GLOBAL_ALARM_ENABLE = 0x2C,
270 GLOBAL_ALARM_INT = 0x2D,
271 DIE_TEMP = 0x2E,
272 TEMP_THRS = 0x2F,
273 PN2 = 0x40,
274 PN1 = 0x41,
275 PN0_REV = 0x42,
276
277 AI_CONFIG0 = 0x1000 | 0x20,
278 AI_CONFIG1 = 0x1000 | 0x21,
279 AI_CONFIG2 = 0x1000 | 0x22,
280 AI_MULTI_CH_EN = 0x1000 | 0x23,
281 AI_SYSCFG = 0x1000 | 0x24,
282 AI_STATUS = 0x1000 | 0x25,
283 AI_STATUS_OVR = 0x1000 | 0x26,
284 AI_STATUS_UDR = 0x1000 | 0x27,
285
286 AIO_CONFIG = 0x1C00 | 0x20,
287 AO_CAL_COEF = 0x1C00 | 0x21,
288 AIO_PROT_CFG = 0x1C00 | 0x22,
289 AO_SLR_CTRL = 0x1C00 | 0x23,
290 AWG_PER = 0x1C00 | 0x24,
291 AO_SYSCFG = 0x1C00 | 0x25,
292 AIO_STATUS = 0x1C00 | 0x26
293 };
294
354
357 CMD_RESET = 0x14,
363
364 CMD_CH0 = 0x1000,
365 CMD_CH1 = 0x1001,
366 CMD_CH2 = 0x1002,
367 CMD_CH3 = 0x1003,
368 CMD_CH4 = 0x1004,
369 CMD_CH5 = 0x1005,
370 CMD_CH6 = 0x1006,
371 CMD_CH7 = 0x1007,
373 CMD_END = 0x1012,
375 CMD_SS = 0x3000,
376 CMD_SC = 0x3001,
377 CMD_MM = 0x3002,
378 CMD_MC = 0x3003,
379 CMD_MS = 0x3004,
381
385 CMD_AO_ABORT = 0x1C03,
389 };
390
395 virtual void command( uint16_t com );
396
402 virtual void reg( Register16 r, uint16_t value );
403
409 virtual void reg( Register24 r, uint32_t value );
410
417 virtual uint16_t reg( Register16 r );
418
425 virtual uint32_t reg( Register24 r );
426
434 template<typename T>
436 {
437 uint32_t v = reg( rg );
438
439 v &= mask;
440 v |= value & ~mask;
441
442 reg( rg, v );
443
444 return v;
445 }
446
451 uint64_t part_number( void );
452
457 uint8_t revision_number( void );
458
463 uint64_t serial_number( void );
464
469 float temperature( void );
470};
471
473{
474public:
476 NAFE33352( bool spi_addr = 0, bool highspeed_variant = false, int nINT = 7, int DRDY = 4, int SYN = 14, int nRESET = 14, int DRDY_input = 2, int SYNCDAC = 14 );
477
479 virtual ~NAFE33352();
480};
481
483{
484public:
486 NAFE33352_UIOM( bool spi_addr = 0, bool highspeed_variant = false, int nINT = 7, int DRDY = 4, int SYN = 14, int nRESET = 14, int DRDY_input = 2, int SYNCDAC = 14 );
487
489 virtual ~NAFE33352_UIOM();
490};
491
492
494{
495 return static_cast<NAFE33352_Base::Register16>( static_cast<uint16_t>( rn ) + n );
496}
497
499{
500 return static_cast<NAFE33352_Base::Register16>( n + static_cast<uint16_t>( rn ) );
501}
502
504{
505 return static_cast<NAFE33352_Base::Register24>( static_cast<uint16_t>( rn ) + n );
506}
507
509{
510 return static_cast<NAFE33352_Base::Register24>( n + static_cast<uint16_t>( rn ) );
511}
512
513#endif // !ARDUINO_AFE_NAFE33352_DRIVER_H
NAFE33352_Base::Register16 operator+(NAFE33352_Base::Register16 rn, int n)
Definition NAFE33352.h:493
int32_t raw_t
Definition AFE_NXP.h:22
double volt_t
Definition AFE_NXP.h:23
bool highspeed_variant
Definition AFE_NXP.h:216
double coeff_V[16]
Definition AFE_NXP.h:234
int mux_setting[16]
Definition AFE_NXP.h:237
NAFE33352_Base * afe_ptr
Definition NAFE33352.h:137
DAC & operator=(double value)
ModeSelect output_mode
Definition NAFE33352.h:139
void output(double value)
void configure(const uint16_t(&cc)[6])
Definition NAFE33352.cpp:48
void configure(const uint16_t(&cc)[3])
Definition NAFE33352.cpp:22
uint32_t bit_op(T rg, uint32_t mask, uint32_t value)
Definition NAFE33352.h:435
static constexpr double on_board_shunt_resister
Definition NAFE33352.h:20
uint64_t part_number(void)
uint8_t revision_number(void)
virtual raw_t read(int ch)
void enable_logical_channel(int ch)
virtual void boot(void)
virtual void open_logical_channel(int ch, uint16_t cc0, uint16_t cc1, uint16_t cc2, uint16_t dummy)
virtual void close_logical_channel(void)
static constexpr double pga_gain[]
Definition NAFE33352.h:225
void open_dac_output(const uint16_t(&cc)[6])
virtual void reset(bool hardware_reset=false)
virtual void command(uint16_t com)
virtual void start(void)
virtual ~NAFE33352_Base()
void channel_info_update(uint16_t value)
uint64_t serial_number(void)
int32_t dac_code(double a, double full_scale, uint8_t bit_length)
double calc_delay(int ch)
virtual void start_continuous_conversion()
double raw2v(int ch, raw_t value)
Definition NAFE33352.h:212
uint16_t[4] ch_setting_t
Definition NAFE33352.h:19
virtual void dac_out(double vi, double full_scale, uint8_t bit_length)
virtual void DRDY_by_sequencer_done(bool flag=true)
float temperature(void)
LogicalChannel logical_channel[16]
Definition NAFE33352.h:74
virtual void reg(Register16 r, uint16_t value)
virtual ~NAFE33352_UIOM()
virtual ~NAFE33352()