dac14  2.1.0.0
dac14.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef DAC14_H
29 #define DAC14_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 #include "drv_spi_master.h"
49 #include "spi_specifics.h"
50 
71 #define DAC14_REG_NOP 0x00
72 #define DAC14_REG_DAC1_MARGIN_HIGH 0x01
73 #define DAC14_REG_DAC1_MARGIN_LOW 0x02
74 #define DAC14_REG_DAC1_VOUT_CMP_CONFIG 0x03
75 #define DAC14_REG_DAC1_IOUT_MISC_CONFIG 0x04
76 #define DAC14_REG_DAC1_CMP_MODE_CONFIG 0x05
77 #define DAC14_REG_DAC1_FUNC_CONFIG 0x06
78 #define DAC14_REG_DAC0_MARGIN_HIGH 0x13
79 #define DAC14_REG_DAC0_MARGIN_LOW 0x14
80 #define DAC14_REG_DAC0_VOUT_CMP_CONFIG 0x15
81 #define DAC14_REG_DAC0_IOUT_MISC_CONFIG 0x16
82 #define DAC14_REG_DAC0_CMP_MODE_CONFIG 0x17
83 #define DAC14_REG_DAC0_FUNC_CONFIG 0x18
84 #define DAC14_REG_DAC1_DATA 0x19
85 #define DAC14_REG_DAC0_DATA 0x1C
86 #define DAC14_REG_COMMON_CONFIG 0x1F
87 #define DAC14_REG_COMMON_TRIGGER 0x20
88 #define DAC14_REG_COMMON_DAC_TRIG 0x21
89 #define DAC14_REG_GENERAL_STATUS 0x22
90 #define DAC14_REG_CMP_STATUS 0x23
91 #define DAC14_REG_GPIO_CONFIG 0x24
92 #define DAC14_REG_DEVICE_MODE_CONFIG 0x25
93 #define DAC14_REG_INTERFACE_CONFIG 0x26
94 #define DAC14_REG_SRAM_CONFIG 0x2B
95 #define DAC14_REG_SRAM_DATA 0x2C
96 #define DAC14_REG_BRDCAST_DATA 0x50
97  // dac14_reg
99 
114 #define DAC14_CC_WIN_LATCH_EN 0x8000
115 #define DAC14_CC_DEV_LOCK 0x4000
116 #define DAC14_CC_EE_READ_ADDR 0x2000
117 #define DAC14_CC_EN_INT_REF 0x1000
118 #define DAC14_CC_VOUT_PDN_0_POWER_UP 0x0000
119 #define DAC14_CC_VOUT_PDN_0_POWER_DOWN_10K 0x0400
120 #define DAC14_CC_VOUT_PDN_0_POWER_DOWN_100K 0x0800
121 #define DAC14_CC_VOUT_PDN_0_POWER_DOWN_Z 0x0C00
122 #define DAC14_CC_VOUT_PDN_0_MASK 0x0C00
123 #define DAC14_CC_IOUT_PDN_0_POWER_UP 0x0000
124 #define DAC14_CC_IOUT_PDN_0_POWER_DOWN 0x0200
125 #define DAC14_CC_IOUT_PDN_0_MASK 0x0200
126 #define DAC14_CC_RESERVED 0x0088
127 #define DAC14_CC_VOUT_PDN_1_POWER_UP 0x0000
128 #define DAC14_CC_VOUT_PDN_1_POWER_DOWN_10K 0x0002
129 #define DAC14_CC_VOUT_PDN_1_POWER_DOWN_100K 0x0004
130 #define DAC14_CC_VOUT_PDN_1_POWER_DOWN_Z 0x0006
131 #define DAC14_CC_VOUT_PDN_1_MASK 0x0006
132 #define DAC14_CC_IOUT_PDN_1_POWER_UP 0x0000
133 #define DAC14_CC_IOUT_PDN_1_POWER_DOWN 0x0001
134 #define DAC14_CC_IOUT_PDN_1_MASK 0x0001
135 
140 #define DAC14_CDT_RESET_CMP_FLAG_1 0x8000
141 #define DAC14_CDT_TRIG_MAR_LO_1 0x4000
142 #define DAC14_CDT_TRIG_MAR_HI_1 0x2000
143 #define DAC14_CDT_STOP_FUNC_1 0x0000
144 #define DAC14_CDT_START_FUNC_1 0x1000
145 #define DAC14_CDT_RESET_CMP_FLAG_0 0x0008
146 #define DAC14_CDT_TRIG_MAR_LO_0 0x0004
147 #define DAC14_CDT_TRIG_MAR_HI_0 0x0002
148 #define DAC14_CDT_START_FUNC_0 0x0001
149 #define DAC14_CDT_STOP_FUNC_0 0x0000
150 
155 #define DAC14_DXFC_CLR_SEL_X 0x8000
156 #define DAC14_DXFC_SYNC_CONFIG_X 0x4000
157 #define DAC14_DXFC_BRD_CONFIG_X 0x2000
158 #define DAC14_DXFC_PHASE_SEL_X_0_DEG 0x0000
159 #define DAC14_DXFC_PHASE_SEL_X_120_DEG 0x0800
160 #define DAC14_DXFC_PHASE_SEL_X_240_DEG 0x1000
161 #define DAC14_DXFC_PHASE_SEL_X_90_DEG 0x1800
162 #define DAC14_DXFC_PHASE_SEL_X_MASK 0x1800
163 #define DAC14_DXFC_FUNC_CONFIG_X_TRIANGULAR 0x0000
164 #define DAC14_DXFC_FUNC_CONFIG_X_SAWTH 0x0100
165 #define DAC14_DXFC_FUNC_CONFIG_X_INV_SAWTH 0x0200
166 #define DAC14_DXFC_FUNC_CONFIG_X_SINE 0x0400
167 #define DAC14_DXFC_FUNC_CONFIG_X_DIS_FC 0x0700
168 #define DAC14_DXFC_FUNC_CONFIG_X_MASK 0x0700
169 #define DAC14_DXFC_LOG_SLEW_EN_X 0x0080
170 #define DAC14_DXFC_CODE_STEP_X_1 0x0000
171 #define DAC14_DXFC_CODE_STEP_X_2 0x0010
172 #define DAC14_DXFC_CODE_STEP_X_3 0x0020
173 #define DAC14_DXFC_CODE_STEP_X_4 0x0030
174 #define DAC14_DXFC_CODE_STEP_X_6 0x0040
175 #define DAC14_DXFC_CODE_STEP_X_8 0x0050
176 #define DAC14_DXFC_CODE_STEP_X_16 0x0060
177 #define DAC14_DXFC_CODE_STEP_X_32 0x0070
178 #define DAC14_DXFC_CODE_STEP_X_MASK 0x0070
179 #define DAC14_DXFC_SLEW_RATE_X_NO_SR 0x0000
180 #define DAC14_DXFC_SLEW_RATE_X_4_US 0x0001
181 #define DAC14_DXFC_SLEW_RATE_X_8_US 0x0002
182 #define DAC14_DXFC_SLEW_RATE_X_12_US 0x0003
183 #define DAC14_DXFC_SLEW_RATE_X_18_US 0x0004
184 #define DAC14_DXFC_SLEW_RATE_X_27_04_US 0x0005
185 #define DAC14_DXFC_SLEW_RATE_X_40_48_US 0x0006
186 #define DAC14_DXFC_SLEW_RATE_X_60_72_US 0x0007
187 #define DAC14_DXFC_SLEW_RATE_X_91_12_US 0x0008
188 #define DAC14_DXFC_SLEW_RATE_X_136_72_US 0x0009
189 #define DAC14_DXFC_SLEW_RATE_X_239_2_US 0x000A
190 #define DAC14_DXFC_SLEW_RATE_X_418_64_US 0x000B
191 #define DAC14_DXFC_SLEW_RATE_X_732_56_US 0x000C
192 #define DAC14_DXFC_SLEW_RATE_X_1282_US 0x000D
193 #define DAC14_DXFC_SLEW_RATE_X_2563_96_US 0x000E
194 #define DAC14_DXFC_SLEW_RATE_X_5127_92_US 0x000F
195 #define DAC14_DXFC_SLEW_RATE_X_MASK 0x000F
196 
201 #define DAC14_VCC_VOUT_GAIN_X_EXT_VREF 0x0000
202 #define DAC14_VCC_VOUT_GAIN_X_VDD 0x0400
203 #define DAC14_VCC_VOUT_GAIN_X_INT_1_5X 0x0800
204 #define DAC14_VCC_VOUT_GAIN_X_INT_2X 0x0C00
205 #define DAC14_VCC_VOUT_GAIN_X_INT_3X 0x1000
206 #define DAC14_VCC_VOUT_GAIN_X_INT_4X 0x1400
207 #define DAC14_VCC_VOUT_GAIN_X_MASK 0x1C00
208 #define DAC14_VCC_CMP_X_OD_EN 0x0010
209 #define DAC14_VCC_CMP_X_OUT_EN 0x0008
210 #define DAC14_VCC_CMP_X_HIZ_IN_EN 0x0004
211 #define DAC14_VCC_CMP_X_INV_EN 0x0002
212 #define DAC14_VCC_CMP_X_EN 0x0001
213 
218 #define DAC14_IC_TIMEOUT_EN 0x1000
219 #define DAC14_IC_EN_PMBUS 0x0100
220 #define DAC14_IC_FSDO_EN 0x0004
221 #define DAC14_IC_SDO_EN 0x0001
222 #define DAC14_IC_SDO_DIS 0x0000
223 
228 #define DAC14_DAC_DATA_MAX 1023
229 #define DAC14_DAC_DATA_MIN 0
230 
235 #define DAC14_DEVICE_ID_MASK 0xFC
236 #define DAC14_DEVICE_ID 0x1C
237 
242 #define DAC14_SEL_DAC_0 0
243 #define DAC14_SEL_DAC_1 1
244 
249 #define DAC14_EN_VOUT_POWER_UP 0
250 #define DAC14_EN_VOUT_POWER_DOWN_10K_AGND 1
251 #define DAC14_EN_VOUT_POWER_DOWN_100K_AGND 2
252 #define DAC14_EN_VOUT_POWER_DOWN_HI_Z_AGND 3
253 
258 #define DAC14_WAVEFORM_TRIANGULAR 0
259 #define DAC14_WAVEFORM_SAWTOOTH 1
260 #define DAC14_WAVEFORM_INV_SAWTOOTH 2
261 #define DAC14_WAVEFORM_SINE 4
262 #define DAC14_WAVEFORM_DISABLE 7
263 
268 #define DAC14_CODE_STEP_1_LSB 0
269 #define DAC14_CODE_STEP_2_LSB 1
270 #define DAC14_CODE_STEP_3_LSB 2
271 #define DAC14_CODE_STEP_4_LSB 3
272 #define DAC14_CODE_STEP_6_LSB 4
273 #define DAC14_CODE_STEP_8_LSB 5
274 #define DAC14_CODE_STEP_16_LSB 6
275 #define DAC14_CODE_STEP_32_LSB 7
276 
281 #define DAC14_SLEW_RATE_NO_SLEW 0
282 #define DAC14_SLEW_RATE_4_US 1
283 #define DAC14_SLEW_RATE_8_US 2
284 #define DAC14_SLEW_RATE_12_US 3
285 #define DAC14_SLEW_RATE_18_US 4
286 #define DAC14_SLEW_RATE_27_04_US 5
287 #define DAC14_SLEW_RATE_40_48_US 6
288 #define DAC14_SLEW_RATE_60_72_US 7
289 #define DAC14_SLEW_RATE_91_12_US 8
290 #define DAC14_SLEW_RATE_136_72_US 9
291 #define DAC14_SLEW_RATE_239_2_US 10
292 #define DAC14_SLEW_RATE_418_64_US 11
293 #define DAC14_SLEW_RATE_732_56_US 12
294 #define DAC14_SLEW_RATE_1282_US 13
295 #define DAC14_SLEW_RATE_2563_96_US 14
296 #define DAC14_SLEW_RATE_5127_92_US 15
297 
302 #define DAC14_VREF_EXT 0
303 #define DAC14_VREF_VDD 1
304 #define DAC14_VREF_INT_1_5X 2
305 #define DAC14_VREF_INT_2X 3
306 #define DAC14_VREF_INT_3X 4
307 #define DAC14_VREF_INT_4X 5
308 
313 #define DAC14_VDD_3V3 3.3f
314 #define DAC14_VDD_5V 5.0f
315 
321 #define DAC14_DEVICE_ADDRESS_GND 0x48
322 #define DAC14_DEVICE_ADDRESS_VCC 0x49
323 #define DAC14_DEVICE_ADDRESS_SDA 0x4A
324 #define DAC14_DEVICE_ADDRESS_SCL 0x4B
325 
334 #define DAC14_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
335 #define DAC14_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
336  // dac14_set
338 
353 #define DAC14_MAP_MIKROBUS( cfg, mikrobus ) \
354  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
355  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
356  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
357  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
358  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
359  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
360  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
361  // dac14_map // dac14
364 
369 typedef enum
370 {
375 
380 typedef err_t ( *dac14_master_io_t )( struct dac14_s*, uint8_t, uint16_t* );
386 typedef struct dac14_s
387 {
388  digital_in_t int_pin;
390  i2c_master_t i2c;
391  spi_master_t spi;
393  uint8_t slave_address;
394  pin_name_t chip_select;
401 
406 typedef struct
407 {
408  pin_name_t scl;
409  pin_name_t sda;
410  pin_name_t miso;
411  pin_name_t mosi;
412  pin_name_t sck;
413  pin_name_t cs;
414  pin_name_t int_pin;
416  uint32_t i2c_speed;
417  uint8_t i2c_address;
419  uint32_t spi_speed;
420  spi_master_mode_t spi_mode;
421  spi_master_chip_select_polarity_t cs_polarity;
425 } dac14_cfg_t;
426 
431 typedef enum
432 {
433  DAC14_OK = 0,
434  DAC14_ERROR = -1
435 
437 
454 
470 
484 err_t dac14_init ( dac14_t *ctx, dac14_cfg_t *cfg );
485 
498 err_t dac14_default_cfg ( dac14_t *ctx );
499 
512 err_t dac14_write_register ( dac14_t *ctx, uint8_t reg, uint16_t data_in );
513 
526 err_t dac14_read_register ( dac14_t *ctx, uint8_t reg, uint16_t *data_out );
527 
536 uint8_t dac14_get_int_pin ( dac14_t *ctx );
537 
549 
566 err_t dac14_set_dac_vout_enable ( dac14_t *ctx, uint8_t dac, uint8_t vout_pdn );
567 
586 err_t dac14_set_dac_vref ( dac14_t *ctx, uint8_t dac, uint8_t vref );
587 
602 err_t dac14_set_dac_margins ( dac14_t *ctx, uint8_t dac, uint16_t margin_l, uint16_t margin_h );
603 
617 err_t dac14_set_dac_data ( dac14_t *ctx, uint8_t dac, uint16_t dac_data );
618 
631 err_t dac14_start_function_gen ( dac14_t *ctx, uint8_t dac );
632 
645 err_t dac14_stop_function_gen ( dac14_t *ctx, uint8_t dac );
646 
671 err_t dac14_config_function_gen ( dac14_t *ctx, uint8_t dac, uint8_t waveform,
672  uint8_t code_step, uint8_t slew_rate );
673 
674 #ifdef __cplusplus
675 }
676 #endif
677 #endif // DAC14_H
678  // dac14
680 
681 // ------------------------------------------------------------------------ END
dac14_cfg_t::i2c_address
uint8_t i2c_address
Definition: dac14.h:417
dac14_set_dac_vref
err_t dac14_set_dac_vref(dac14_t *ctx, uint8_t dac, uint8_t vref)
DAC 14 set dac vref function.
dac14_stop_function_gen
err_t dac14_stop_function_gen(dac14_t *ctx, uint8_t dac)
DAC 14 stop function gen function.
dac14_s
DAC 14 Click context object.
Definition: dac14.h:387
dac14_cfg_t
DAC 14 Click configuration object.
Definition: dac14.h:407
dac14_cfg_t::drv_sel
dac14_drv_t drv_sel
Definition: dac14.h:423
DAC14_DRV_SEL_I2C
@ DAC14_DRV_SEL_I2C
Definition: dac14.h:372
DAC14_ERROR
@ DAC14_ERROR
Definition: dac14.h:434
dac14_init
err_t dac14_init(dac14_t *ctx, dac14_cfg_t *cfg)
DAC 14 initialization function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
dac14_master_io_t
err_t(* dac14_master_io_t)(struct dac14_s *, uint8_t, uint16_t *)
DAC 14 Click driver interface.
Definition: dac14.h:380
DAC14_DRV_SEL_SPI
@ DAC14_DRV_SEL_SPI
Definition: dac14.h:371
dac14_read_register
err_t dac14_read_register(dac14_t *ctx, uint8_t reg, uint16_t *data_out)
DAC 14 read register function.
dac14_cfg_t::sck
pin_name_t sck
Definition: dac14.h:412
dac14_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: dac14.h:421
dac14_s::read_f
dac14_master_io_t read_f
Definition: dac14.h:398
dac14_s::spi
spi_master_t spi
Definition: dac14.h:391
dac14_drv_interface_selection
void dac14_drv_interface_selection(dac14_cfg_t *cfg, dac14_drv_t drv_sel)
DAC 14 driver interface setup function.
dac14_cfg_t::sda
pin_name_t sda
Definition: dac14.h:409
dac14_cfg_t::scl
pin_name_t scl
Definition: dac14.h:408
dac14_cfg_t::mosi
pin_name_t mosi
Definition: dac14.h:411
dac14_set_dac_margins
err_t dac14_set_dac_margins(dac14_t *ctx, uint8_t dac, uint16_t margin_l, uint16_t margin_h)
DAC 14 set dac margins function.
dac14_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: dac14.h:420
dac14_cfg_setup
void dac14_cfg_setup(dac14_cfg_t *cfg)
DAC 14 configuration object setup function.
dac14_s::chip_select
pin_name_t chip_select
Definition: dac14.h:394
dac14_s::int_pin
digital_in_t int_pin
Definition: dac14.h:388
dac14_check_communication
err_t dac14_check_communication(dac14_t *ctx)
DAC 14 check communication function.
dac14_cfg_t::spi_speed
uint32_t spi_speed
Definition: dac14.h:419
dac14_return_value_t
dac14_return_value_t
DAC 14 Click return value data.
Definition: dac14.h:432
dac14_cfg_t::int_pin
pin_name_t int_pin
Definition: dac14.h:414
dac14_s::i2c
i2c_master_t i2c
Definition: dac14.h:390
DAC14_OK
@ DAC14_OK
Definition: dac14.h:433
dac14_default_cfg
err_t dac14_default_cfg(dac14_t *ctx)
DAC 14 default configuration function.
dac14_start_function_gen
err_t dac14_start_function_gen(dac14_t *ctx, uint8_t dac)
DAC 14 start function gen function.
dac14_write_register
err_t dac14_write_register(dac14_t *ctx, uint8_t reg, uint16_t data_in)
DAC 14 write register function.
dac14_s::slave_address
uint8_t slave_address
Definition: dac14.h:393
dac14_drv_t
dac14_drv_t
DAC 14 Click driver selector.
Definition: dac14.h:370
dac14_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: dac14.h:416
dac14_set_dac_data
err_t dac14_set_dac_data(dac14_t *ctx, uint8_t dac, uint16_t dac_data)
DAC 14 set dac data function.
dac14_set_dac_vout_enable
err_t dac14_set_dac_vout_enable(dac14_t *ctx, uint8_t dac, uint8_t vout_pdn)
DAC 14 set dac vout enable function.
dac14_s::drv_sel
dac14_drv_t drv_sel
Definition: dac14.h:395
dac14_cfg_t::cs
pin_name_t cs
Definition: dac14.h:413
dac14_t
struct dac14_s dac14_t
DAC 14 Click context object.
dac14_config_function_gen
err_t dac14_config_function_gen(dac14_t *ctx, uint8_t dac, uint8_t waveform, uint8_t code_step, uint8_t slew_rate)
DAC 14 config function gen function.
dac14_cfg_t::miso
pin_name_t miso
Definition: dac14.h:410
dac14_get_int_pin
uint8_t dac14_get_int_pin(dac14_t *ctx)
DAC 14 get int pin function.
dac14_s::write_f
dac14_master_io_t write_f
Definition: dac14.h:397