AFE_NXP_Arduino 2.0.5
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
28private:
35 virtual void txrx( uint8_t *data, int size, int cs_delay = 0 );
36
42 virtual void write_r24( uint16_t reg, uint32_t val );
43
44public:
46 virtual void boot( void );
47
49 virtual void reset( bool hardware_reset = false );
50
60
66 virtual void open_logical_channel( int ch, const uint16_t (&cc)[ 4 ] );
67
70 {
71 public:
73 virtual ~LogicalChannel();
74
79 void configure( const uint16_t (&cc)[ 3 ] );
80
87 void configure( uint16_t cc0, uint16_t cc1 = 0x0000, uint16_t cc2 = 0x0000 );
88 };
89
92
94 class DAC
95 {
96 public:
97
99 enum class ModeSelect : uint16_t {
100 OFF = 0,
101 VOLTAGE,
102 CURRENT,
106 };
107
108 DAC();
109 virtual ~DAC();
110
115 void configure( const uint16_t (&cc)[ 6 ] );
116
127
133 void configure( ModeSelect mode, double full_scale_range = 0.00 );
134
139 void configure( double full_scale_range );
140
145 void output( double value );
146
151 DAC& operator=( double value );
152
155 private:
158 };
159
161
162private:
163 double calc_delay( int ch );
165
166public:
171 void open_dac_output( const uint16_t (&cc)[ 6 ] );
172
173
178 virtual void close_logical_channel( int ch );
179
182 virtual void close_logical_channel( void );
183
188 void enable_logical_channel( int ch );
189
194 virtual void start( int ch );
195
198 virtual void start( void );
199
202 virtual void start_continuous_conversion();
203
208 virtual void DRDY_by_sequencer_done( bool flag = true );
209
214 virtual raw_t read( int ch );
215
220 virtual void read( raw_t *data );
221
226 virtual void read( volt_t *data );
227
233 inline double raw2v( int ch, raw_t value )
234 {
235 if ( mux_setting[ ch ] == ISNS )
237 else if ( mux_setting[ ch ] == BG )
238 return value - (double)(1L << 24) * 20.00 * 2.50 / (12.50 * (double)(1L << 24)) -1.50;
239 else
240 return value * coeff_V[ ch ];
241 }
242
249 virtual void dac_out( double vi, double full_scale, uint8_t bit_length );
250
258 int32_t dac_code( double a, double full_scale, uint8_t bit_length );
259
260 constexpr static double pga_gain[] = { 1.00, 16.00 };
261
283
288
289 enum class Register16 : uint16_t {
290 CRC_CONF_REGS = 0x20,
291 CRC_COEF_REGS = 0x21,
292 CRC_TRIM_REGS = 0x22,
293 CRC_TRIM_REF = 0x3F,
294 GPI_DATA = 0x23,
295 GPO_ENABLE = 0x24,
296 GPIO_FUNCTION = 0x25,
297 GPI_ENABLE = 0x26,
298 GPI_EDGE_POS = 0x27,
299 GPI_EDGE_NEG = 0x28,
300 GPO_DATA = 0x29,
301 SYS_CONFIG = 0x2A,
302 SYS_STATUS = 0x2B,
303 CK_SRC_SEL_CONFIG = 0x30,
304 GLOBAL_ALARM_ENABLE = 0x2C,
305 GLOBAL_ALARM_INT = 0x2D,
306 DIE_TEMP = 0x2E,
307 TEMP_THRS = 0x2F,
308 PN2 = 0x40,
309 PN1 = 0x41,
310 PN0_REV = 0x42,
311
312 AI_CONFIG0 = 0x1000 | 0x20,
313 AI_CONFIG1 = 0x1000 | 0x21,
314 AI_CONFIG2 = 0x1000 | 0x22,
315 AI_MULTI_CH_EN = 0x1000 | 0x23,
316 AI_SYSCFG = 0x1000 | 0x24,
317 AI_STATUS = 0x1000 | 0x25,
318 AI_STATUS_OVR = 0x1000 | 0x26,
319 AI_STATUS_UDR = 0x1000 | 0x27,
320
321 AIO_CONFIG = 0x1C00 | 0x20,
322 AO_CAL_COEF = 0x1C00 | 0x21,
323 AIO_PROT_CFG = 0x1C00 | 0x22,
324 AO_SLR_CTRL = 0x1C00 | 0x23,
325 AWG_PER = 0x1C00 | 0x24,
326 AO_SYSCFG = 0x1C00 | 0x25,
327 AIO_STATUS = 0x1C00 | 0x26
328 };
329
389
392 CMD_RESET = 0x14,
398
399 CMD_CH0 = 0x1000,
400 CMD_CH1 = 0x1001,
401 CMD_CH2 = 0x1002,
402 CMD_CH3 = 0x1003,
403 CMD_CH4 = 0x1004,
404 CMD_CH5 = 0x1005,
405 CMD_CH6 = 0x1006,
406 CMD_CH7 = 0x1007,
408 CMD_END = 0x1012,
410 CMD_SS = 0x3000,
411 CMD_SC = 0x3001,
412 CMD_MM = 0x3002,
413 CMD_MC = 0x3003,
414 CMD_MS = 0x3004,
416
420 CMD_AO_ABORT = 0x1C03,
424 };
425
430 virtual void command( uint16_t com );
431
438 virtual void reg( Register16 r, uint16_t value );
439
446 virtual void reg( Register24 r, uint32_t value );
447
454 virtual uint16_t reg( Register16 r );
455
462 virtual uint32_t reg( Register24 r );
463
471 template<typename T>
473 {
474 uint32_t v = reg( rg );
475
476 v &= mask;
477 v |= value & ~mask;
478
479 reg( rg, v );
480
481 return v;
482 }
483
488 uint64_t part_number( void );
489
494 uint8_t revision_number( void );
495
500 uint64_t serial_number( void );
501
506 float temperature( void );
507};
508
510{
511public:
513 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 );
514
516 virtual ~NAFE33352();
517};
518
520{
521public:
523 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 );
524
526 virtual ~NAFE33352_UIOM();
527};
528
529
531{
532 return static_cast<NAFE33352_Base::Register16>( static_cast<uint16_t>( rn ) + n );
533}
534
536{
537 return static_cast<NAFE33352_Base::Register16>( n + static_cast<uint16_t>( rn ) );
538}
539
541{
542 return static_cast<NAFE33352_Base::Register24>( static_cast<uint16_t>( rn ) + n );
543}
544
546{
547 return static_cast<NAFE33352_Base::Register24>( n + static_cast<uint16_t>( rn ) );
548}
549
550#endif // !ARDUINO_AFE_NAFE33352_DRIVER_H
NAFE33352_Base::Register16 operator+(NAFE33352_Base::Register16 rn, int n)
Definition NAFE33352.h:530
int32_t raw_t
Definition AFE_NXP.h:22
double volt_t
Definition AFE_NXP.h:23
bool highspeed_variant
Definition AFE_NXP.h:224
double coeff_V[16]
Definition AFE_NXP.h:247
int mux_setting[16]
Definition AFE_NXP.h:250
NAFE33352_Base * afe_ptr
Definition NAFE33352.h:154
DAC & operator=(double value)
ModeSelect output_mode
Definition NAFE33352.h:156
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:472
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 write_r24(uint16_t reg, uint32_t val)
virtual void close_logical_channel(void)
static constexpr double pga_gain[]
Definition NAFE33352.h:260
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:233
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)
virtual void txrx(uint8_t *data, int size, int cs_delay=0)
float temperature(void)
LogicalChannel logical_channel[16]
Definition NAFE33352.h:91
virtual void reg(Register16 r, uint16_t value)
virtual ~NAFE33352_UIOM()
virtual ~NAFE33352()