usbcsink3  2.1.0.0
usbcsink3.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 USBCSINK3_H
29 #define USBCSINK3_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 #include "drv_analog_in.h"
51 
72 #define USBCSINK3_REG_INPUT_PORT 0x00
73 #define USBCSINK3_REG_OUTPUT_PORT 0x01
74 #define USBCSINK3_REG_POLARITY_INV 0x02
75 #define USBCSINK3_REG_CONFIG 0x03
76 #define USBCSINK3_REG_SPECIAL_FUNC 0x50
77  // usbcsink3_reg
79 
89 #define USBCSINK3_CMD_SEL_NONE 0x00
90 #define USBCSINK3_CMD_SEL_DATA_WRITE 0x10
91 #define USBCSINK3_CMD_SEL_SHUTDOWN 0x20
92 
97 #define USBCSINK3_POT_SEL_DUMMY_CODE 0x00
98 #define USBCSINK3_POT_SEL_DIGI_POT_1 0x01
99 #define USBCSINK3_POT_SEL_DIGI_POT_2 0x02
100 #define USBCSINK3_POT_SEL_DIGI_POT_BOTH 0x03
101  // usbcsink3_cmd
103 
118 #define USBCSINK3_NO_PIN_BIT_MASK 0x00
119 #define USBCSINK3_PIN_0_BIT_MASK 0x01
120 #define USBCSINK3_PIN_1_BIT_MASK 0x02
121 #define USBCSINK3_PIN_2_BIT_MASK 0x04
122 #define USBCSINK3_PIN_3_BIT_MASK 0x08
123 #define USBCSINK3_ALL_PINS_BIT_MASK 0xF0
124 
129 #define USBCSINK3_DIRECTION_OUTPUT 0x00
130 #define USBCSINK3_DIRECTION_INPUT 0x01
131 
136 #define USBCSINK3_VSEL0_DISABLE 0x00
137 #define USBCSINK3_VSEL0_ENABLE 0x01
138 #define USBCSINK3_VSEL0_PIN_BIT_MASK 0x0E
139 #define USBCSINK3_VSEL1_DISABLE 0x00
140 #define USBCSINK3_VSEL1_ENABLE 0x02
141 #define USBCSINK3_VSEL1_PIN_BIT_MASK 0x0D
142 #define USBCSINK3_VSEL2_DISABLE 0x00
143 #define USBCSINK3_VSEL2_ENABLE 0x04
144 #define USBCSINK3_VSEL2_PIN_BIT_MASK 0x0B
145 
150 #define USBCSINK3_SPEC_FUNC_P3_AS_INT 0x80
151 #define USBCSINK3_SPEC_FUNC_PU_DISABLED 0x40
152 
157 #define USBCSINK3_VBUS_VTG_0V 0.0f
158 #define USBCSINK3_VBUS_VTG_5V 5.0f
159 #define USBCSINK3_VBUS_VTG_9V 9.0f
160 #define USBCSINK3_VBUS_VTG_15V 15.0f
161 #define USBCSINK3_VBUS_VTG_20V 20.3f
162 #define USBCSINK3_VBUS_VTG_4_3V 4.3f
163 #define USBCSINK3_VBUS_VTG_8_6V 8.6f
164 #define USBCSINK3_VBUS_VTG_12_9V 12.9f
165 #define USBCSINK3_VBUS_VTG_17_2V 17.2f
166 
171 #define USBCSINK3_WIPER_POS_MAX 255
172 #define USBCSINK3_RES_6_8_KOHM 6.8f
173 #define USBCSINK3_RES_16_KOHM 16.0f
174 #define USBCSINK3_RES_27_KOHM 27.0f
175 #define USBCSINK3_RES_36_KOHM 36.0f
176 #define USBCSINK3_RES_45_3_KOHM 45.3f
177 #define USBCSINK3_RES_56_KOHM 56.0f
178 #define USBCSINK3_RES_64_9_KOHM 64.9f
179 #define USBCSINK3_RES_75_KOHM 75.0f
180 #define USBCSINK3_RES_82_KOHM 82.0f
181 #define USBCSINK3_RES_91_KOHM 91.0f
182 #define USBCSINK3_RES_100_KOHM 100.0f
183 #define USBCSINK3_VBUS_R11_RES_73_2_KOHM 73.2f
184 #define USBCSINK3_VBUS_R13_RES_10_KOHM 10.0f
185 
190 #define USBCSINK3_ADC_RESOLUTION 0x0FFF
191 #define USBCSINK3_VREF_3V3 3.3
192 #define USBCSINK3_VREF_5V 5.0
193 
199 #define USBCSINK3_DEVICE_ADDRESS 0x41
200 
209 #define USBCSINK3_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
210 #define USBCSINK3_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
211  // usbcsink3_set
213 
228 #define USBCSINK3_MAP_MIKROBUS( cfg, mikrobus ) \
229  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
230  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
231  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
232  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
233  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
234  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
235  cfg.an = MIKROBUS( mikrobus, MIKROBUS_AN )
236  // usbcsink3_map // usbcsink3
239 
240 
245 typedef struct usbcsink3_s
246 {
247  analog_in_t adc;
248  float vref;
250  i2c_master_t i2c;
251  spi_master_t spi;
253  uint8_t slave_address;
254  pin_name_t chip_select;
257 
262 typedef struct
263 {
264  pin_name_t scl;
265  pin_name_t sda;
266  pin_name_t miso;
267  pin_name_t mosi;
268  pin_name_t sck;
269  pin_name_t cs;
270  pin_name_t an;
272  analog_in_resolution_t resolution;
273  float vref;
275  uint32_t i2c_speed;
276  uint8_t i2c_address;
278  uint32_t spi_speed;
279  spi_master_mode_t spi_mode;
280  spi_master_chip_select_polarity_t cs_polarity;
283 
288 typedef enum
289 {
291  USBCSINK3_ERROR = -1
292 
294 
299 typedef enum
300 {
309 
311 
316 typedef enum
317 {
328 
330 
331 
348 
363 
377 
392 err_t usbcsink3_i2c_write ( usbcsink3_t *ctx, uint8_t reg, uint8_t data_in );
393 
409 err_t usbcsink3_i2c_read ( usbcsink3_t *ctx, uint8_t reg, uint8_t *data_out );
410 
426 err_t usbcsink3_spi_write ( usbcsink3_t *ctx, uint8_t reg, uint8_t data_in );
427 
439 err_t usbcsink3_read_raw_adc ( usbcsink3_t *ctx, uint16_t *raw_adc );
440 
452 err_t usbcsink3_read_voltage ( usbcsink3_t *ctx, float *voltage );
453 
465 err_t usbcsink3_set_vref ( usbcsink3_t *ctx, float vref );
466 
479 err_t usbcsink3_get_vbus ( usbcsink3_t *ctx, float *vbus );
480 
494 err_t usbcsink3_set_wiper ( usbcsink3_t *ctx, uint8_t wiper_pos );
495 
509 err_t usbcsink3_set_resistence ( usbcsink3_t *ctx, float resistence );
510 
526 
542 
543 #ifdef __cplusplus
544 }
545 #endif
546 #endif // USBCSINK3_H
547  // usbcsink3
549 
550 // ------------------------------------------------------------------------ END
usbcsink3_vtg_sel_t
usbcsink3_vtg_sel_t
USB-C Sink 3 Click voltage selection value data.
Definition: usbcsink3.h:300
USBCSINK3_PWR_SEL_90W
@ USBCSINK3_PWR_SEL_90W
Definition: usbcsink3.h:326
usbcsink3_init
err_t usbcsink3_init(usbcsink3_t *ctx, usbcsink3_cfg_t *cfg)
USB-C Sink 3 initialization function.
usbcsink3_cfg_t::scl
pin_name_t scl
Definition: usbcsink3.h:264
USBCSINK3_PWR_SEL_15W
@ USBCSINK3_PWR_SEL_15W
Definition: usbcsink3.h:319
USBCSINK3_PWR_SEL_20W
@ USBCSINK3_PWR_SEL_20W
Definition: usbcsink3.h:321
usbcsink3_cfg_t
USB-C Sink 3 Click configuration object.
Definition: usbcsink3.h:263
usbcsink3_set_resistence
err_t usbcsink3_set_resistence(usbcsink3_t *ctx, float resistence)
USB-C Sink 3 set the resistance function.
USBCSINK3_OK
@ USBCSINK3_OK
Definition: usbcsink3.h:290
USBCSINK3_PWR_SEL_27W
@ USBCSINK3_PWR_SEL_27W
Definition: usbcsink3.h:322
USBCSINK3_VTG_SEL_5V
@ USBCSINK3_VTG_SEL_5V
Definition: usbcsink3.h:301
usbcsink3_set_vref
err_t usbcsink3_set_vref(usbcsink3_t *ctx, float vref)
USB-C Sink 3 set vref function.
USBCSINK3_VTG_SEL_4_3V
@ USBCSINK3_VTG_SEL_4_3V
Definition: usbcsink3.h:305
usbcsink3_s::chip_select
pin_name_t chip_select
Definition: usbcsink3.h:254
USBCSINK3_PWR_SEL_100W
@ USBCSINK3_PWR_SEL_100W
Definition: usbcsink3.h:327
spi_specifics.h
This file contains SPI specific macros, functions, etc.
usbcsink3_cfg_t::mosi
pin_name_t mosi
Definition: usbcsink3.h:267
USBCSINK3_VTG_SEL_20V
@ USBCSINK3_VTG_SEL_20V
Definition: usbcsink3.h:304
usbcsink3_cfg_t::an
pin_name_t an
Definition: usbcsink3.h:270
usbcsink3_s::vref
float vref
Definition: usbcsink3.h:248
USBCSINK3_PWR_SEL_60W
@ USBCSINK3_PWR_SEL_60W
Definition: usbcsink3.h:325
USBCSINK3_VTG_SEL_17_2V
@ USBCSINK3_VTG_SEL_17_2V
Definition: usbcsink3.h:308
usbcsink3_cfg_setup
void usbcsink3_cfg_setup(usbcsink3_cfg_t *cfg)
USB-C Sink 3 configuration object setup function.
USBCSINK3_VTG_SEL_12_9V
@ USBCSINK3_VTG_SEL_12_9V
Definition: usbcsink3.h:307
usbcsink3_cfg_t::sda
pin_name_t sda
Definition: usbcsink3.h:265
USBCSINK3_PWR_SEL_18W
@ USBCSINK3_PWR_SEL_18W
Definition: usbcsink3.h:320
usbcsink3_s::adc
analog_in_t adc
Definition: usbcsink3.h:247
usbcsink3_i2c_write
err_t usbcsink3_i2c_write(usbcsink3_t *ctx, uint8_t reg, uint8_t data_in)
USB-C Sink 3 I2C writing function.
usbcsink3_s::spi
spi_master_t spi
Definition: usbcsink3.h:251
usbcsink3_cfg_t::miso
pin_name_t miso
Definition: usbcsink3.h:266
usbcsink3_cfg_t::i2c_address
uint8_t i2c_address
Definition: usbcsink3.h:276
usbcsink3_read_raw_adc
err_t usbcsink3_read_raw_adc(usbcsink3_t *ctx, uint16_t *raw_adc)
USB-C Sink 3 read raw ADC value function.
USBCSINK3_ERROR
@ USBCSINK3_ERROR
Definition: usbcsink3.h:291
USBCSINK3_VTG_SEL_15V
@ USBCSINK3_VTG_SEL_15V
Definition: usbcsink3.h:303
usbcsink3_s
USB-C Sink 3 Click context object.
Definition: usbcsink3.h:246
usbcsink3_pwr_sel_t
usbcsink3_pwr_sel_t
USB-C Sink 3 Click power selection value data.
Definition: usbcsink3.h:317
usbcsink3_read_voltage
err_t usbcsink3_read_voltage(usbcsink3_t *ctx, float *voltage)
USB-C Sink 3 read voltage level function.
USBCSINK3_VTG_SEL_8_6V
@ USBCSINK3_VTG_SEL_8_6V
Definition: usbcsink3.h:306
usbcsink3_get_vbus
err_t usbcsink3_get_vbus(usbcsink3_t *ctx, float *vbus)
USB-C Sink 3 get VBUS function.
usbcsink3_set_power
err_t usbcsink3_set_power(usbcsink3_t *ctx, usbcsink3_pwr_sel_t power)
USB-C Sink 3 set the power function.
usbcsink3_set_voltage
err_t usbcsink3_set_voltage(usbcsink3_t *ctx, usbcsink3_vtg_sel_t voltage)
USB-C Sink 3 set the voltage function.
USBCSINK3_VTG_SEL_9V
@ USBCSINK3_VTG_SEL_9V
Definition: usbcsink3.h:302
usbcsink3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: usbcsink3.h:275
usbcsink3_cfg_t::cs
pin_name_t cs
Definition: usbcsink3.h:269
USBCSINK3_PWR_SEL_45W
@ USBCSINK3_PWR_SEL_45W
Definition: usbcsink3.h:324
usbcsink3_s::i2c
i2c_master_t i2c
Definition: usbcsink3.h:250
USBCSINK3_PWR_SEL_36W
@ USBCSINK3_PWR_SEL_36W
Definition: usbcsink3.h:323
usbcsink3_spi_write
err_t usbcsink3_spi_write(usbcsink3_t *ctx, uint8_t reg, uint8_t data_in)
USB-C Sink 3 SPI writing function.
usbcsink3_default_cfg
err_t usbcsink3_default_cfg(usbcsink3_t *ctx)
USB-C Sink 3 default configuration function.
usbcsink3_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: usbcsink3.h:280
usbcsink3_cfg_t::vref
float vref
Definition: usbcsink3.h:273
usbcsink3_return_value_t
usbcsink3_return_value_t
USB-C Sink 3 Click return value data.
Definition: usbcsink3.h:289
usbcsink3_cfg_t::spi_speed
uint32_t spi_speed
Definition: usbcsink3.h:278
usbcsink3_cfg_t::sck
pin_name_t sck
Definition: usbcsink3.h:268
usbcsink3_i2c_read
err_t usbcsink3_i2c_read(usbcsink3_t *ctx, uint8_t reg, uint8_t *data_out)
USB-C Sink 3 I2C reading function.
usbcsink3_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: usbcsink3.h:279
usbcsink3_set_wiper
err_t usbcsink3_set_wiper(usbcsink3_t *ctx, uint8_t wiper_pos)
USB-C Sink 3 set the wiper position function.
usbcsink3_cfg_t::resolution
analog_in_resolution_t resolution
Definition: usbcsink3.h:272
usbcsink3_t
struct usbcsink3_s usbcsink3_t
USB-C Sink 3 Click context object.
USBCSINK3_PWR_SEL_12W
@ USBCSINK3_PWR_SEL_12W
Definition: usbcsink3.h:318
usbcsink3_s::slave_address
uint8_t slave_address
Definition: usbcsink3.h:253