HPM SDK
HPMicro Software Development Kit
hpm_i2c.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_I2C_COMPONENTS_H
9 #define HPM_I2C_COMPONENTS_H
10 
11 #include "hpm_i2c_drv.h"
12 #ifdef HPMSOC_HAS_HPMSDK_DMAV2
13 #include "hpm_dmav2_drv.h"
14 #else
15 #include "hpm_dma_drv.h"
16 #endif
17 #include "hpm_dmamux_drv.h"
18 #include "hpm_misc.h"
19 #include "hpm_l1c_drv.h"
20 
21 #ifndef USE_I2C_DMA_MGR
22 #define USE_I2C_DMA_MGR (0U)
23 #endif
24 
25 #if USE_I2C_DMA_MGR
26 #include "hpm_dma_mgr.h"
27 typedef void (*hpm_i2c_dma_complete_cb)(uint32_t channel);
28 #endif
29 
36 typedef enum i2c_speed {
37  i2c_speed_100khz, /* normal mode, speed is 100kHz*/
38  i2c_speed_400khz, /* Fast mode, speed is 400kHz */
39  i2c_speed_1Mhz, /* Fast plus mode, speed is 1MHz */
41 
47 typedef enum i2c_communication_mode {
51 
56 
61 typedef struct i2c_initialize_config {
62  hpm_i2c_communication_mode_t communication_mode; /* I2C communication mode */
63  hpm_i2c_speed_t speed; /* I2C communication speed */
64  bool is_10bit_addressing; /* Flag for 10-bit addressing mode */
65  uint8_t slave_address; /* Slave address, only support slave mode */
67 
68 typedef struct i2c_context_t {
73 
74 
75 #ifdef __cplusplus
76 extern "C" {
77 #endif
78 
87 
101 
112 hpm_stat_t hpm_i2c_master_probe_slave_address(hpm_i2c_context_t *context, uint16_t device_address);
113 
130 hpm_stat_t hpm_i2c_master_addr_write_blocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
131  uint8_t *buf, uint32_t buf_size, uint32_t timeout);
132 
148 hpm_stat_t hpm_i2c_master_addr_read_blocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
149  uint8_t *buf, uint32_t buf_size, uint32_t timeout);
150 
166 hpm_stat_t hpm_i2c_master_write_blocking(hpm_i2c_context_t *context, uint16_t device_address,
167  uint8_t *buf, uint32_t size, uint32_t timeout);
168 
183 hpm_stat_t hpm_i2c_master_read_blocking(hpm_i2c_context_t *context, const uint16_t device_address,
184  uint8_t *buf, const uint32_t size, uint32_t timeout);
185 
198 hpm_stat_t hpm_i2c_slave_write_blocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size, uint32_t timeout);
199 
211 hpm_stat_t hpm_i2c_slave_read_blocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size, uint32_t timeout);
212 
213 #if USE_I2C_DMA_MGR
225 hpm_stat_t hpm_i2c_dma_mgr_install_callback(hpm_i2c_context_t *context, hpm_i2c_dma_complete_cb complete);
226 
241 hpm_stat_t hpm_i2c_master_addr_write_nonblocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
242  uint8_t *buf, uint32_t buf_size);
243 
258 hpm_stat_t hpm_i2c_master_addr_read_nonblocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
259  uint8_t *buf, uint32_t buf_size);
260 
273 hpm_stat_t hpm_i2c_master_write_nonblocking(hpm_i2c_context_t *context, uint16_t device_address,
274  uint8_t *buf, uint32_t size);
275 
288 hpm_stat_t hpm_i2c_master_read_nonblocking(hpm_i2c_context_t *context, const uint16_t device_address,
289  uint8_t *buf, const uint32_t size);
290 
301 hpm_stat_t hpm_i2c_slave_read_nonblocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size);
302 
313 hpm_stat_t hpm_i2c_slave_write_nonblocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size);
314 
324 dma_resource_t *hpm_i2c_get_dma_mgr_resource(hpm_i2c_context_t *context);
325 
326 #endif
327 #ifdef __cplusplus
328 }
329 #endif
330 
331 #endif
uint32_t hpm_stat_t
Definition: hpm_common.h:126
static void size
Definition: hpm_math.h:6938
struct _dma_resource dma_resource_t
DMA Resource Structure.
void hpm_i2c_get_default_init_context(hpm_i2c_context_t *context)
Definition: hpm_i2c.c:211
enum i2c_master_addr_endianness hpm_i2c_master_addr_endianness_t
hpm_stat_t hpm_i2c_master_addr_write_blocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size, uint8_t *buf, uint32_t buf_size, uint32_t timeout)
I2C master write data to a device's address over I2C in blocking mode.
Definition: hpm_i2c.c:276
hpm_stat_t hpm_i2c_master_addr_read_blocking(hpm_i2c_context_t *context, const uint16_t device_address, uint32_t addr, uint8_t addr_size, uint8_t *buf, uint32_t buf_size, uint32_t timeout)
I2C master read data from a specified address of an I2C slave device in blocking mode.
Definition: hpm_i2c.c:349
enum i2c_speed hpm_i2c_speed_t
struct i2c_initialize_config hpm_i2c_initialize_config_t
hpm_stat_t hpm_i2c_master_write_blocking(hpm_i2c_context_t *context, uint16_t device_address, uint8_t *buf, uint32_t size, uint32_t timeout)
I2C master write data to an I2C slave device in blocking mode.
Definition: hpm_i2c.c:434
hpm_stat_t hpm_i2c_master_probe_slave_address(hpm_i2c_context_t *context, uint16_t device_address)
Probes an I2C slave address.
Definition: hpm_i2c.c:255
i2c_speed
Definition: hpm_i2c.h:36
@ i2c_speed_100khz
Definition: hpm_i2c.h:37
@ i2c_speed_400khz
Definition: hpm_i2c.h:38
@ i2c_speed_1Mhz
Definition: hpm_i2c.h:39
hpm_stat_t hpm_i2c_master_read_blocking(hpm_i2c_context_t *context, const uint16_t device_address, uint8_t *buf, const uint32_t size, uint32_t timeout)
I2C master read data from an I2C device in blocking mode.
Definition: hpm_i2c.c:505
i2c_master_addr_endianness
Definition: hpm_i2c.h:52
@ i2c_master_addr_big_endian
Definition: hpm_i2c.h:54
@ i2c_master_addr_little_endian
Definition: hpm_i2c.h:53
hpm_stat_t hpm_i2c_slave_write_blocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size, uint32_t timeout)
I2C slave write operation in blocking mode.
Definition: hpm_i2c.c:575
enum i2c_communication_mode hpm_i2c_communication_mode_t
hpm_stat_t hpm_i2c_slave_read_blocking(hpm_i2c_context_t *context, uint8_t *buf, uint32_t size, uint32_t timeout)
I2C slave read operation in blocking mode.
Definition: hpm_i2c.c:623
i2c_communication_mode
Definition: hpm_i2c.h:47
@ i2c_master
Definition: hpm_i2c.h:48
@ i2c_slave
Definition: hpm_i2c.h:49
struct i2c_context_t hpm_i2c_context_t
hpm_stat_t hpm_i2c_initialize(hpm_i2c_context_t *context)
Initialize the I2C interface.
Definition: hpm_i2c.c:217
Definition: hpm_i2c_regs.h:12
Definition: hpm_i2c.h:68
hpm_i2c_master_addr_endianness_t addr_endianness
Definition: hpm_i2c.h:71
I2C_Type * base
Definition: hpm_i2c.h:69
hpm_i2c_initialize_config_t init_config
Definition: hpm_i2c.h:70
Definition: hpm_i2c.h:61
bool is_10bit_addressing
Definition: hpm_i2c.h:64
hpm_i2c_speed_t speed
Definition: hpm_i2c.h:63
hpm_i2c_communication_mode_t communication_mode
Definition: hpm_i2c.h:62
uint8_t slave_address
Definition: hpm_i2c.h:65