app_i2c.h
Go to the documentation of this file.
1 /**
2  ****************************************************************************************
3  *
4  * @file app_i2c.h
5  * @author BLE Driver Team
6  * @brief Header file containing functions prototypes of I2C app library.
7  *
8  ****************************************************************************************
9  * @attention
10  #####Copyright (c) 2019 GOODIX
11  All rights reserved.
12 
13  Redistribution and use in source and binary forms, with or without
14  modification, are permitted provided that the following conditions are met:
15  * Redistributions of source code must retain the above copyright
16  notice, this list of conditions and the following disclaimer.
17  * Redistributions in binary form must reproduce the above copyright
18  notice, this list of conditions and the following disclaimer in the
19  documentation and/or other materials provided with the distribution.
20  * Neither the name of GOODIX nor the names of its contributors may be used
21  to endorse or promote products derived from this software without
22  specific prior written permission.
23 
24  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  POSSIBILITY OF SUCH DAMAGE.
35  ****************************************************************************************
36  */
37 
38 /** @addtogroup PERIPHERAL Peripheral Driver
39  * @{
40  */
41 
42 /** @addtogroup APP_DRIVER APP DRIVER
43  * @{
44  */
45 
46 /** @defgroup APP_IIC IIC
47  * @brief IIC APP module driver.
48  * @{
49  */
50 
51 
52 #ifndef _APP_I2C_H_
53 #define _APP_I2C_H_
54 
55 #include "grx_hal.h"
56 #include "app_io.h"
57 #include "app_dma.h"
58 #include "app_drv_error.h"
59 #include "app_drv_config.h"
60 #include <stdint.h>
61 #include <stdbool.h>
62 #include <stdio.h>
63 
64 #ifdef __cplusplus
65 extern "C" {
66 #endif
67 
68 #ifdef HAL_I2C_MODULE_ENABLED
69 
70 /** @addtogroup APP_I2C_ENUM Enumerations
71  * @{
72  */
73 
74 /**
75  * @brief I2C module Enumerations definition
76  */
77 typedef enum
78 {
79  APP_I2C_ID_0, /**< I2C module 0. */
80  APP_I2C_ID_1, /**< I2C module 1. */
81 #if (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR5526X) || (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR5525X)
82  APP_I2C_ID_2, /**< I2C module 2. */
83  APP_I2C_ID_3, /**< I2C module 3. */
84 #endif
85 #if (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR5526X)
86  APP_I2C_ID_4, /**< I2C module 4. */
87  APP_I2C_ID_5, /**< I2C module 5. */
88 #endif
89  APP_I2C_ID_MAX /**< Only for check parameter, not used as input parameters. */
91 
92 /**
93  * @brief I2C role Enumerations definition
94  */
95 typedef enum
96 {
97  APP_I2C_ROLE_MASTER, /**< I2C master device. */
98  APP_I2C_ROLE_SLAVE, /**< I2C slave device. */
99  APP_I2C_ROLE_MAX, /**< Only for check parameter, not used as input parameters. */
101 
102 /**
103  * @brief I2C event Enumerations definition
104  */
105 typedef enum
106 {
107  APP_I2C_EVT_ERROR, /**< Error reported by I2C peripheral. */
108  APP_I2C_EVT_TX_CPLT, /**< Requested TX transfer completed. */
109  APP_I2C_EVT_RX_DATA, /**< Requested RX transfer completed. */
110  APP_I2C_ABORT, /**< abort reported by I2C peripheral. */
112 /** @} */
113 
114 /** @addtogroup APP_I2C_STRUCTURES Structures
115  * @{
116  */
117 /**
118  * @brief I2C pins Structures
119  */
120 typedef struct
121 {
122  app_io_type_t type; /**< Specifies the type of SPI IO. */
123  app_io_mux_t mux; /**< Specifies the Peripheral to be connected to the selected pins. */
124  uint32_t pin; /**< Specifies the IO pins to be configured.
125  This parameter can be any value of @ref GR5xxx_pins. */
126  app_io_pull_t pull; /**< Specifies the Pull-up or Pull-Down activation for the selected pins. */
127 } app_i2c_pin_t;
128 
129 /**
130  * @brief I2C pins config Structures
131  */
132 typedef struct
133 {
134  app_i2c_pin_t scl; /**< Set the configuration of I2C SCL pin. */
135  app_i2c_pin_t sda; /**< Set the configuration of I2C SDA pin. */
137 
138 /**
139  * @brief I2C operate mode Enumerations definition
140  */
141 typedef struct
142 {
143  dma_regs_t *tx_dma_instance;/**< Specifies the TX DMA instance.*/
144  dma_regs_t *rx_dma_instance;/**< Specifies the RX DMA instance.*/
145  dma_channel_t tx_dma_channel; /**< Specifies the dma channel of I2C TX. */
146  dma_channel_t rx_dma_channel; /**< Specifies the dma channel of I2C RX. */
148 
149 /**
150  * @brief I2C event structure definition
151  */
152 typedef struct
153 {
154  app_i2c_evt_type_t type; /**< Type of event. */
155  union
156  {
157  uint32_t error_code; /**< I2C Error code . */
158  uint16_t size; /**< I2C transmitted/received counter. */
159  } data; /**< Data of event. */
160  uint16_t slave_addr; /**< I2C slave address. */
161 } app_i2c_evt_t;
162 
163 /**@brief App i2c state types. */
164 typedef enum
165 {
168 #ifdef APP_DRIVER_WAKEUP_CALL_FUN
169  APP_I2C_SLEEP,
170 #endif
172 
173 /**@brief App i2c dma state types. */
174 typedef enum
175 {
179 
180 /**
181  * @brief I2C event callback definition
182  */
183 typedef void (*app_i2c_evt_handler_t)(app_i2c_evt_t *p_evt);
184 
185 /** @} */
186 
187 /**
188  * @brief I2C device structure definition
189  */
190 typedef struct
191 {
192  app_i2c_evt_handler_t evt_handler; /**< I2C event callback definition. */
193  i2c_handle_t handle; /**< I2C handle definition. */
194  app_i2c_role_t role; /**< I2C role Enumerations definition. */
195  app_i2c_pin_cfg_t *p_pin_cfg; /**< I2C pins config Structures. */
196  dma_id_t dma_id[2]; /**< DMA id definition. */
197  app_i2c_state_t i2c_state; /**< I2C state types. */
198  app_i2c_dma_state_t i2c_dma_state; /**< I2C dma state types. */
199  volatile bool start_flag; /**< Start flag definition. */
200  uint16_t slv_dev_addr; /**< I2C Slave address. */
201 } i2c_env_t;
202 
203 /**
204  * @brief I2C parameters structure definition
205  */
206 typedef struct
207 {
208  app_i2c_id_t id; /**< specified I2C module ID. */
209  app_i2c_role_t role; /**< specified the role of I2C. */
210  app_i2c_pin_cfg_t pin_cfg; /**< the pin configuration information for the specified I2C module. */
211  app_i2c_dma_cfg_t dma_cfg; /**< I2C operate mode. */
212  i2c_init_t init; /**< I2C communication parameters. */
213  i2c_env_t i2c_dev; /**< I2C device structure definition. */
215 
216 /* Exported functions --------------------------------------------------------*/
217 /** @addtogroup HAL_APP_I2C_DRIVER_FUNCTIONS Functions
218  * @{
219  */
220 /**
221  ****************************************************************************************
222  * @brief Initialize the APP I2C DRIVER according to the specified parameters
223  * in the app_i2c_params_t and app_i2c_evt_handler_t.
224  * @note If interrupt mode is set, you can use blocking mode. Conversely, if blocking mode
225  * is set, you can't use interrupt mode.
226  *
227  * @param[in] p_params: Pointer to app_i2c_params_t parameter which contains the
228  * configuration information for the specified I2C module.
229  * @param[in] evt_handler: I2C user callback function.
230  *
231  * @return Result of initialization.
232  ****************************************************************************************
233  */
234 uint16_t app_i2c_init(app_i2c_params_t *p_params, app_i2c_evt_handler_t evt_handler);
235 
236 /**
237  ****************************************************************************************
238  * @brief De-initialize the APP I2C DRIVER peripheral.
239  *
240  * @param[in] id: De-initialize for a specific ID.
241  *
242  * @return Result of De-initialization.
243  ****************************************************************************************
244  */
246 
247 /**
248  ****************************************************************************************
249  * @brief Receive in master or slave mode an amount of data in blocking mode.
250  *
251  * @param[in] id: which I2C module want to receive.
252  * @param[in] target_address: Target device address: The device 7 bits address value in datasheet
253  must be shifted at right before call interface.
254  * @param[in] p_data: Pointer to data buffer
255  * @param[in] size: Amount of data to be sent
256  * @param[in] timeout: Timeout duration
257  *
258  * @return Result of operation.
259  ****************************************************************************************
260  */
261 uint16_t app_i2c_receive_sync(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size, uint32_t timeout);
262 
263 /**
264  ****************************************************************************************
265  * @brief Receive in master or slave mode an amount of data in non-blocking mode with Interrupt/DMA.
266  *
267  * @param[in] id: which I2C module want to receive.
268  * @param[in] target_address: Target device address: The device 7 bits address value in datasheet
269  must be shifted at right before call interface.
270  * @param[in] p_data: Pointer to data buffer
271  * @param[in] size: Amount of data to be sent
272  *
273  * @return Result of operation.
274  ****************************************************************************************
275  */
276 uint16_t app_i2c_receive_async(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size);
277 
278 /**
279  ****************************************************************************************
280  * @brief Transmits in master or slave mode an amount of data in blocking mode.
281  *
282  * @param[in] id: which I2C module want to transmit.
283  * @param[in] target_address: Target device address: The device 7 bits address value in datasheet
284  must be shifted at right before call interface.
285  * @param[in] p_data: Pointer to data buffer
286  * @param[in] size: Amount of data to be sent
287  * @param[in] timeout: Timeout duration
288  *
289  * @return Result of operation.
290  ****************************************************************************************
291  */
292 uint16_t app_i2c_transmit_sync(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size, uint32_t timeout);
293 
294 /**
295  ****************************************************************************************
296  * @brief Transmits in master or slave mode an amount of data in non-blocking mode with Interrupt/DMA.
297  *
298  * @param[in] id: which I2C module want to transmit.
299  * @param[in] target_address: Target device address: The device 7 bits address value in datasheet
300  must be shifted at right before call interface.
301  * @param[in] p_data: Pointer to data buffer
302  * @param[in] size: Amount of data to be sent
303  *
304  * @return Result of operation.
305  ****************************************************************************************
306  */
307 uint16_t app_i2c_transmit_async(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size);
308 
309 /**
310  ****************************************************************************************
311  * @brief Read an amount of data in blocking mode from a specific memory address
312  *
313  * @param[in] id: which I2C module want to read.
314  * @param[in] dev_address: Target device address: The device 7 bits address value in datasheet must be shifted at right before call interface
315  * @param[in] mem_address: Internal memory address
316  * @param[in] mem_addr_size: Size of internal memory address
317  * @param[in] p_data: Pointer to data buffer
318  * @param[in] size: Amount of data to be sent
319  * @param[in] timeout: Timeout duration
320  *
321  * @return Result of operation.
322  ****************************************************************************************
323  */
324 uint16_t app_i2c_mem_read_sync(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size, uint32_t timeout);
325 
326 /**
327  ****************************************************************************************
328  * @brief Read an amount of data in non-blocking mode with Interrupt/DMA from a specific memory address
329  *
330  * @param[in] id: which I2C module want to read.
331  * @param[in] dev_address: Target device address: The device 7 bits address value in datasheet must be shifted at right before call interface
332  * @param[in] mem_address: Internal memory address
333  * @param[in] mem_addr_size: Size of internal memory address
334  * @param[in] p_data: Pointer to data buffer
335  * @param[in] size: Amount of data to be sent
336  *
337  * @return Result of operation.
338  ****************************************************************************************
339  */
340 uint16_t app_i2c_mem_read_async(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size);
341 
342 /**
343  ****************************************************************************************
344  * @brief Write an amount of data in blocking mode to a specific memory address
345  *
346  * @param[in] id: which I2C module want to write.
347  * @param[in] dev_address: Target device address: The device 7 bits address value in datasheet must be shifted at right before call interface
348  * @param[in] mem_address: Internal memory address
349  * @param[in] mem_addr_size: Size of internal memory address
350  * @param[in] p_data: Pointer to data buffer
351  * @param[in] size: Amount of data to be sent
352  * @param[in] timeout: Timeout duration
353  *
354  * @return Result of operation.
355  ****************************************************************************************
356  */
357 uint16_t app_i2c_mem_write_sync(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size, uint32_t timeout);
358 
359 /**
360  ****************************************************************************************
361  * @brief Write an amount of data in non-blocking mode with Interrupt/DMA to a specific memory address
362  *
363  * @param[in] id: which I2C module want to write.
364  * @param[in] dev_address: Target device address: The device 7 bits address value in datasheet must be shifted at right before call interface
365  * @param[in] mem_address: Internal memory address
366  * @param[in] mem_addr_size: Size of internal memory address
367  * @param[in] p_data: Pointer to data buffer
368  * @param[in] size: Amount of data to be sent
369  *
370  * @return Result of operation.
371  ****************************************************************************************
372  */
373 uint16_t app_i2c_mem_write_async(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size);
374 
375 /**
376  ****************************************************************************************
377  * @brief Return the I2C handle.
378  *
379  * @param[in] id: I2C Channel ID.
380  *
381  * @return Pointer to the specified ID's I2C handle.
382  ****************************************************************************************
383  */
385 
386 /**
387  ****************************************************************************************
388  * @brief Abort a master I2C IT or DMA process communication with Interrupt
389  *
390  * @param[in] id: I2C Channel ID.
391  *
392  * @return Result of operation.
393  ****************************************************************************************
394  */
396 
397 /**
398  ****************************************************************************************
399  * @brief Adjust I2C timing value to adapt to real load.
400  *
401  * @param[in] id: I2C Channel ID.
402  * @param[in] timing_type: Timing type. See I2C_Timing_type.
403  * @param[in] delta: timing change value(unit: I2C work clock cycles).
404  *
405  * @return Result of operation.
406  ****************************************************************************************
407  */
408 uint16_t app_i2c_timing_adjust(app_i2c_id_t id, uint32_t timing_type, int32_t delta);
409 
410 /**
411  ****************************************************************************************
412  * @brief Get I2C timing value.
413  *
414  * @param[in] id: I2C Channel ID.
415  * @param[in] timing_type: Timing type. See I2C_Timing_type.
416  * @param[in] p_timing_value: Pointer of I2C timing value(unit: I2C work clock cycles).
417  *
418  * @return Result of operation.
419  ****************************************************************************************
420  */
421 uint16_t app_i2c_timing_get(app_i2c_id_t id, uint32_t timing_type, uint32_t *p_timing_value);
422 
423 #if (APP_DRIVER_CHIP_TYPE == APP_DRIVER_GR551X)
424 /**
425  ****************************************************************************************
426  * @brief Transmits than receives in master mode or receives than transmits in slave mode with only one stop bit.
427  *
428  * @param[in] id: which I2C module want to transmit.
429  * @param[in] dev_address: Target device address: The device 7 bits address value in datasheet
430  must be shifted at right before call interface.
431  * @param[in] p_tdata: Pointer to transmited data buffer
432  * @param[in] tsize: Amount of data to be sent
433  * @param[in] p_rdata: Pointer to received data buffer
434  * @param[in] rsize: Amount of data to be receive
435  * @param[in] timeout: Timeout duration
436  *
437  * @return Result of operation.
438  ****************************************************************************************
439  */
440 uint16_t app_i2c_transmit_receive_sync(app_i2c_id_t id, uint16_t dev_address, uint8_t *p_tdata, uint16_t tsize, uint8_t *p_rdata, uint16_t rsize, uint32_t timeout);
441 #endif
442 
443 /** @} */
444 #endif
445 
446 #ifdef __cplusplus
447 }
448 #endif
449 
450 #endif
451 
452 /** @} */
453 
454 /** @} */
455 
456 /** @} */
457 
app_i2c_pin_cfg_t
I2C pins config Structures.
Definition: app_i2c.h:133
app_i2c_timing_get
uint16_t app_i2c_timing_get(app_i2c_id_t id, uint32_t timing_type, uint32_t *p_timing_value)
Get I2C timing value.
app_i2c_dma_state_t
app_i2c_dma_state_t
App i2c dma state types.
Definition: app_i2c.h:175
app_i2c_pin_cfg_t::sda
app_i2c_pin_t sda
Definition: app_i2c.h:135
app_i2c_pin_t::pin
uint32_t pin
Definition: app_i2c.h:124
APP_I2C_EVT_ERROR
@ APP_I2C_EVT_ERROR
Definition: app_i2c.h:107
app_i2c_evt_t::error_code
uint32_t error_code
Definition: app_i2c.h:157
APP_I2C_DMA_ACTIVITY
@ APP_I2C_DMA_ACTIVITY
Definition: app_i2c.h:177
app_i2c_params_t::dma_cfg
app_i2c_dma_cfg_t dma_cfg
Definition: app_i2c.h:211
app_i2c_receive_async
uint16_t app_i2c_receive_async(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size)
Receive in master or slave mode an amount of data in non-blocking mode with Interrupt/DMA.
_i2c_init
I2C Configuration Structure definition.
Definition: gr55xx_hal_i2c.h:167
app_i2c_params_t::i2c_dev
i2c_env_t i2c_dev
Definition: app_i2c.h:213
APP_I2C_ROLE_MASTER
@ APP_I2C_ROLE_MASTER
Definition: app_i2c.h:97
app_i2c_state_t
app_i2c_state_t
App i2c state types.
Definition: app_i2c.h:165
i2c_env_t::i2c_state
app_i2c_state_t i2c_state
Definition: app_i2c.h:197
_i2c_handle
I2C handle Structure definition.
Definition: gr55xx_hal_i2c.h:191
app_io_pull_t
app_io_pull_t
GPIO pull Enumerations definition.
Definition: app_io.h:181
APP_I2C_DMA_INVALID
@ APP_I2C_DMA_INVALID
Definition: app_i2c.h:176
app_io_type_t
app_io_type_t
GPIO type Enumerations definition.
Definition: app_io.h:145
app_i2c_transmit_sync
uint16_t app_i2c_transmit_sync(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size, uint32_t timeout)
Transmits in master or slave mode an amount of data in blocking mode.
app_i2c_dma_cfg_t::rx_dma_instance
dma_regs_t * rx_dma_instance
Definition: app_i2c.h:144
app_i2c_master_abort_it
uint16_t app_i2c_master_abort_it(app_i2c_id_t id)
Abort a master I2C IT or DMA process communication with Interrupt.
app_i2c_evt_t::size
uint16_t size
Definition: app_i2c.h:158
app_i2c_deinit
uint16_t app_i2c_deinit(app_i2c_id_t id)
De-initialize the APP I2C DRIVER peripheral.
i2c_env_t
I2C device structure definition.
Definition: app_i2c.h:191
i2c_env_t::handle
i2c_handle_t handle
Definition: app_i2c.h:193
app_i2c_dma_cfg_t::rx_dma_channel
dma_channel_t rx_dma_channel
Definition: app_i2c.h:146
app_i2c_pin_t::mux
app_io_mux_t mux
Definition: app_i2c.h:123
APP_I2C_ACTIVITY
@ APP_I2C_ACTIVITY
Definition: app_i2c.h:167
app_i2c_timing_adjust
uint16_t app_i2c_timing_adjust(app_i2c_id_t id, uint32_t timing_type, int32_t delta)
Adjust I2C timing value to adapt to real load.
app_i2c_dma_cfg_t::tx_dma_instance
dma_regs_t * tx_dma_instance
Definition: app_i2c.h:143
app_i2c_pin_t::type
app_io_type_t type
Definition: app_i2c.h:122
app_io.h
Header file containing functions prototypes of GPIO app library.
APP_I2C_ROLE_MAX
@ APP_I2C_ROLE_MAX
Definition: app_i2c.h:99
i2c_env_t::start_flag
volatile bool start_flag
Definition: app_i2c.h:199
app_i2c_role_t
app_i2c_role_t
I2C role Enumerations definition.
Definition: app_i2c.h:96
app_i2c_mem_read_sync
uint16_t app_i2c_mem_read_sync(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size, uint32_t timeout)
Read an amount of data in blocking mode from a specific memory address.
app_i2c_params_t::id
app_i2c_id_t id
Definition: app_i2c.h:208
app_i2c_id_t
app_i2c_id_t
I2C module Enumerations definition.
Definition: app_i2c.h:78
app_i2c_pin_t
I2C pins Structures.
Definition: app_i2c.h:121
app_i2c_dma_cfg_t
I2C operate mode Enumerations definition.
Definition: app_i2c.h:142
i2c_env_t::slv_dev_addr
uint16_t slv_dev_addr
Definition: app_i2c.h:200
app_i2c_params_t::pin_cfg
app_i2c_pin_cfg_t pin_cfg
Definition: app_i2c.h:210
app_i2c_params_t::role
app_i2c_role_t role
Definition: app_i2c.h:209
i2c_env_t::role
app_i2c_role_t role
Definition: app_i2c.h:194
app_i2c_mem_read_async
uint16_t app_i2c_mem_read_async(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size)
Read an amount of data in non-blocking mode with Interrupt/DMA from a specific memory address.
app_i2c_receive_sync
uint16_t app_i2c_receive_sync(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size, uint32_t timeout)
Receive in master or slave mode an amount of data in blocking mode.
grx_hal.h
This file contains all the functions prototypes for the HAL module driver.
app_i2c_evt_type_t
app_i2c_evt_type_t
I2C event Enumerations definition.
Definition: app_i2c.h:106
APP_I2C_ABORT
@ APP_I2C_ABORT
Definition: app_i2c.h:110
app_i2c_transmit_receive_sync
uint16_t app_i2c_transmit_receive_sync(app_i2c_id_t id, uint16_t dev_address, uint8_t *p_tdata, uint16_t tsize, uint8_t *p_rdata, uint16_t rsize, uint32_t timeout)
Transmits than receives in master mode or receives than transmits in slave mode with only one stop bi...
APP_I2C_ID_1
@ APP_I2C_ID_1
Definition: app_i2c.h:80
app_i2c_evt_t
I2C event structure definition.
Definition: app_i2c.h:153
app_i2c_pin_cfg_t::scl
app_i2c_pin_t scl
Definition: app_i2c.h:134
i2c_env_t::p_pin_cfg
app_i2c_pin_cfg_t * p_pin_cfg
Definition: app_i2c.h:195
i2c_env_t::i2c_dma_state
app_i2c_dma_state_t i2c_dma_state
Definition: app_i2c.h:198
app_i2c_get_handle
i2c_handle_t * app_i2c_get_handle(app_i2c_id_t id)
Return the I2C handle.
app_dma.h
Header file containing functions prototypes of DMA app library.
app_i2c_transmit_async
uint16_t app_i2c_transmit_async(app_i2c_id_t id, uint16_t target_address, uint8_t *p_data, uint16_t size)
Transmits in master or slave mode an amount of data in non-blocking mode with Interrupt/DMA.
app_i2c_pin_t::pull
app_io_pull_t pull
Definition: app_i2c.h:126
APP_I2C_EVT_TX_CPLT
@ APP_I2C_EVT_TX_CPLT
Definition: app_i2c.h:108
app_i2c_init
uint16_t app_i2c_init(app_i2c_params_t *p_params, app_i2c_evt_handler_t evt_handler)
Initialize the APP I2C DRIVER according to the specified parameters in the app_i2c_params_t and app_i...
app_i2c_evt_handler_t
void(* app_i2c_evt_handler_t)(app_i2c_evt_t *p_evt)
I2C event callback definition.
Definition: app_i2c.h:183
APP_I2C_INVALID
@ APP_I2C_INVALID
Definition: app_i2c.h:166
app_io_mux_t
app_io_mux_t
GPIO mux Enumerations definition.
Definition: app_io.h:253
app_i2c_evt_t::slave_addr
uint16_t slave_addr
Definition: app_i2c.h:160
app_i2c_dma_cfg_t::tx_dma_channel
dma_channel_t tx_dma_channel
Definition: app_i2c.h:145
APP_I2C_EVT_RX_DATA
@ APP_I2C_EVT_RX_DATA
Definition: app_i2c.h:109
app_i2c_evt_t::type
app_i2c_evt_type_t type
Definition: app_i2c.h:154
app_i2c_params_t
I2C parameters structure definition.
Definition: app_i2c.h:207
app_drv_error.h
Header file of app driver error code.
app_drv_config.h
Header file of app driver config code.
app_i2c_params_t::init
i2c_init_t init
Definition: app_i2c.h:212
app_i2c_mem_write_sync
uint16_t app_i2c_mem_write_sync(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size, uint32_t timeout)
Write an amount of data in blocking mode to a specific memory address.
APP_I2C_ID_0
@ APP_I2C_ID_0
Definition: app_i2c.h:79
dma_id_t
int16_t dma_id_t
DMA id definition.
Definition: app_dma.h:98
i2c_env_t::evt_handler
app_i2c_evt_handler_t evt_handler
Definition: app_i2c.h:192
app_i2c_mem_write_async
uint16_t app_i2c_mem_write_async(app_i2c_id_t id, uint16_t dev_address, uint16_t mem_address, uint16_t mem_addr_size, uint8_t *p_data, uint16_t size)
Write an amount of data in non-blocking mode with Interrupt/DMA to a specific memory address.
APP_I2C_ID_MAX
@ APP_I2C_ID_MAX
Definition: app_i2c.h:89
dma_channel_t
dma_channel_t
HAL DMA Channel Enumerations definition.
Definition: gr55xx_hal_dma.h:93
APP_I2C_ROLE_SLAVE
@ APP_I2C_ROLE_SLAVE
Definition: app_i2c.h:98