adc20 2.1.0.0
adc20.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 ADC20_H
29#define ADC20_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_spi_master.h"
52#include "spi_specifics.h"
53
74#define ADC20_CMD_NOP 0x00
75#define ADC20_CMD_REG_READ 0x10
76#define ADC20_CMD_REG_WRITE 0x08
77#define ADC20_CMD_SET_BIT 0x18
78#define ADC20_CMD_CLEAR_BIT 0x20
79
84#define ADC20_REG_SYSTEM_STATUS 0x00
85#define ADC20_REG_GENERAL_CFG 0x01
86#define ADC20_REG_DATA_CFG 0x02
87#define ADC20_REG_OSR_CFG 0x03
88#define ADC20_REG_OPMODE_CFG 0x04
89#define ADC20_REG_PIN_CFG 0x05
90#define ADC20_REG_GPIO_CFG 0x07
91#define ADC20_REG_GPO_DRIVE_CFG 0x09
92#define ADC20_REG_GPO_VALUE 0x0B
93#define ADC20_REG_GPI_VALUE 0x0D
94#define ADC20_REG_SEQUENCE_CFG 0x10
95#define ADC20_REG_CHANNEL_SEL 0x11
96#define ADC20_REG_AUTO_SEQ_CH_SEL 0x12
97
98 // adc20_reg
99
114#define ADC20_DATA_CFG_FIX_PAT 0x80
115#define ADC20_DATA_CFG_APPEND_CHANNEL_ID 0x10
116#define ADC20_DATA_CFG_SPI_MODE_0 0x00
117#define ADC20_DATA_CFG_SPI_MODE_1 0x01
118#define ADC20_DATA_CFG_SPI_MODE_2 0x02
119#define ADC20_DATA_CFG_SPI_MODE_3 0x03
120#define ADC20_DATA_CFG_SPI_MODE_MASK 0x03
121
126#define ADC20_FIXED_CODE 0xA5A0
127
132#define ADC20_CHANNEL_0 0x01
133#define ADC20_CHANNEL_1 0x02
134#define ADC20_CHANNEL_2 0x04
135#define ADC20_CHANNEL_3 0x08
136#define ADC20_CHANNEL_4 0x10
137#define ADC20_CHANNEL_5 0x20
138#define ADC20_CHANNEL_6 0x40
139#define ADC20_CHANNEL_7 0x80
140#define ADC20_CHANNEL_NONE 0x00
141#define ADC20_CHANNEL_MASK 0xFF
142
147#define ADC20_CHANNEL_ID_0 0
148#define ADC20_CHANNEL_ID_1 1
149#define ADC20_CHANNEL_ID_2 2
150#define ADC20_CHANNEL_ID_3 3
151#define ADC20_CHANNEL_ID_4 4
152#define ADC20_CHANNEL_ID_5 5
153#define ADC20_CHANNEL_ID_6 6
154#define ADC20_CHANNEL_ID_7 7
155#define ADC20_CHANNEL_ID_MASK 0x0F
156
161#define ADC20_PIN_CFG_ANALOG 0
162#define ADC20_PIN_CFG_GPIO 1
163
168#define ADC20_GPIO_CFG_DIG_INPUT 0
169#define ADC20_GPIO_CFG_DIG_OUTPUT 1
170
175#define ADC20_GPO_DRIVE_CFG_OPEN_DRAIN 0
176#define ADC20_GPO_DRIVE_CFG_PUSH_PULL 1
177
182#define ADC20_GPIO_VALUE_LOW 0
183#define ADC20_GPIO_VALUE_HIGH 1
184
189#define ADC20_OSR_NO_AVERAGING 0x00
190#define ADC20_OSR_2_SAMPLES 0x01
191#define ADC20_OSR_4_SAMPLES 0x02
192#define ADC20_OSR_8_SAMPLES 0x03
193#define ADC20_OSR_16_SAMPLES 0x04
194#define ADC20_OSR_32_SAMPLES 0x05
195#define ADC20_OSR_64_SAMPLES 0x06
196#define ADC20_OSR_128_SAMPLES 0x07
197#define ADC20_OSR_MASK 0x07
198
203#define ADC20_SEQ_STOP 0x00
204#define ADC20_SEQ_START 0x10
205#define ADC20_SEQ_MODE_MANUAL 0x00
206#define ADC20_SEQ_MODE_AUTO 0x01
207#define ADC20_SEQ_MODE_OTF 0x02
208#define ADC20_SEQ_MODE_MASK 0x03
209
214#define ADC20_ADC_OFFSET 4
215#define ADC20_RES_12BIT 0x0FFF
216#define ADC20_VREF_3V3 3.3f
217
226#define ADC20_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
227#define ADC20_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
228
229 // adc20_set
230
245#define ADC20_MAP_MIKROBUS( cfg, mikrobus ) \
246 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
247 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
248 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
249 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS );
250
251 // adc20_map
252 // adc20
253
258typedef struct
259{
260 // Modules
261 spi_master_t spi;
263 pin_name_t chip_select;
265} adc20_t;
266
271typedef struct
272{
273 // Communication gpio pins
274 pin_name_t miso;
275 pin_name_t mosi;
276 pin_name_t sck;
277 pin_name_t cs;
279 // static variable
280 uint32_t spi_speed;
281 spi_master_mode_t spi_mode;
282 spi_master_chip_select_polarity_t cs_polarity;
285
290typedef enum
291{
293 ADC20_ERROR = -1
294
296
313
327err_t adc20_init ( adc20_t *ctx, adc20_cfg_t *cfg );
328
342
355err_t adc20_write_register ( adc20_t *ctx, uint8_t reg, uint8_t data_in );
356
369err_t adc20_read_register ( adc20_t *ctx, uint8_t reg, uint8_t *data_out );
370
382err_t adc20_read_data ( adc20_t *ctx, uint16_t *data_out );
383
395
407
419
433err_t adc20_set_pin_config ( adc20_t *ctx, uint8_t ch_mask, uint8_t pin_cfg );
434
448err_t adc20_set_gpio_config ( adc20_t *ctx, uint8_t ch_mask, uint8_t gpio_cfg );
449
463err_t adc20_set_gpo_drive_config ( adc20_t *ctx, uint8_t ch_mask, uint8_t gpo_drive_cfg );
464
478err_t adc20_set_gpo_value ( adc20_t *ctx, uint8_t ch_mask, uint8_t value );
479
491err_t adc20_read_gpio_value ( adc20_t *ctx, uint8_t *gpio_value );
492
493#ifdef __cplusplus
494}
495#endif
496#endif // ADC20_H
497
498 // adc20
499
500// ------------------------------------------------------------------------ END
adc20_return_value_t
ADC 20 Click return value data.
Definition adc20.h:291
@ ADC20_ERROR
Definition adc20.h:293
@ ADC20_OK
Definition adc20.h:292
err_t adc20_set_gpo_drive_config(adc20_t *ctx, uint8_t ch_mask, uint8_t gpo_drive_cfg)
ADC 20 set gpo drive config function.
err_t adc20_start_auto_sequence(adc20_t *ctx)
ADC 20 start auto sequence function.
err_t adc20_write_register(adc20_t *ctx, uint8_t reg, uint8_t data_in)
ADC 20 write register function.
err_t adc20_set_gpo_value(adc20_t *ctx, uint8_t ch_mask, uint8_t value)
ADC 20 set gpo value function.
err_t adc20_read_data(adc20_t *ctx, uint16_t *data_out)
ADC 20 read data function.
err_t adc20_set_gpio_config(adc20_t *ctx, uint8_t ch_mask, uint8_t gpio_cfg)
ADC 20 set gpio config function.
err_t adc20_default_cfg(adc20_t *ctx)
ADC 20 default configuration function.
err_t adc20_read_gpio_value(adc20_t *ctx, uint8_t *gpio_value)
ADC 20 read gpio value function.
err_t adc20_stop_auto_sequence(adc20_t *ctx)
ADC 20 stop auto sequence function.
err_t adc20_init(adc20_t *ctx, adc20_cfg_t *cfg)
ADC 20 initialization function.
err_t adc20_set_pin_config(adc20_t *ctx, uint8_t ch_mask, uint8_t pin_cfg)
ADC 20 set pin config function.
err_t adc20_check_communication(adc20_t *ctx)
ADC 20 check communication function.
void adc20_cfg_setup(adc20_cfg_t *cfg)
ADC 20 configuration object setup function.
err_t adc20_read_register(adc20_t *ctx, uint8_t reg, uint8_t *data_out)
ADC 20 read register function.
This file contains SPI specific macros, functions, etc.
ADC 20 Click configuration object.
Definition adc20.h:272
spi_master_chip_select_polarity_t cs_polarity
Definition adc20.h:282
pin_name_t sck
Definition adc20.h:276
spi_master_mode_t spi_mode
Definition adc20.h:281
pin_name_t mosi
Definition adc20.h:275
uint32_t spi_speed
Definition adc20.h:280
pin_name_t miso
Definition adc20.h:274
pin_name_t cs
Definition adc20.h:277
ADC 20 Click context object.
Definition adc20.h:259
spi_master_t spi
Definition adc20.h:261
pin_name_t chip_select
Definition adc20.h:263