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 typedef void (*hpm_i2c_dma_complete_cb)(uint32_t channel);
27 #endif
28 
35 typedef enum i2c_speed {
36  i2c_speed_100khz, /* normal mode, speed is 100kHz*/
37  i2c_speed_400khz, /* Fast mode, speed is 400kHz */
38  i2c_speed_1Mhz, /* Fast plus mode, speed is 1MHz */
40 
46 typedef enum i2c_communication_mode {
50 
55 typedef struct i2c_initialize_config {
56  i2c_communication_mode_t communication_mode; /* I2C communication mode */
57  i2c_speed_t speed; /* I2C communication speed */
58  bool is_10bit_addressing; /* Flag for 10-bit addressing mode */
59  uint8_t slave_address; /* Slave address, only support slave mode */
61 
62 #ifdef __cplusplus
63 extern "C" {
64 #endif
65 
75 
87 
98 hpm_stat_t hpm_i2c_master_probe_slave_address(I2C_Type *ptr, uint16_t device_address);
99 
116 hpm_stat_t hpm_i2c_master_addr_write_blocking(I2C_Type *ptr, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
117  uint8_t *buf, uint32_t buf_size, uint32_t timeout);
118 
134 hpm_stat_t hpm_i2c_master_addr_read_blocking(I2C_Type *ptr, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
135  uint8_t *buf, uint32_t buf_size, uint32_t timeout);
136 
152 hpm_stat_t hpm_i2c_master_write_blocking(I2C_Type *ptr, uint16_t device_address,
153  uint8_t *buf, uint32_t size, uint32_t timeout);
154 
169 hpm_stat_t hpm_i2c_master_read_blocking(I2C_Type *ptr, const uint16_t device_address,
170  uint8_t *buf, const uint32_t size, uint32_t timeout);
171 
184 hpm_stat_t hpm_i2c_slave_write_blocking(I2C_Type *ptr, uint8_t *buf, uint32_t size, uint32_t timeout);
185 
197 hpm_stat_t hpm_i2c_slave_read_blocking(I2C_Type *ptr, uint8_t *buf, uint32_t size, uint32_t timeout);
198 
199 #if USE_I2C_DMA_MGR
211 hpm_stat_t hpm_i2c_dma_install_callback(I2C_Type *ptr, hpm_i2c_dma_complete_cb complete);
212 
227 hpm_stat_t hpm_i2c_master_addr_write_nonblocking(I2C_Type *ptr, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
228  uint8_t *buf, uint32_t buf_size);
229 
244 hpm_stat_t hpm_i2c_master_addr_read_nonblocking(I2C_Type *ptr, const uint16_t device_address, uint32_t addr, uint8_t addr_size,
245  uint8_t *buf, uint32_t buf_size);
246 
259 hpm_stat_t hpm_i2c_master_write_nonblocking(I2C_Type *ptr, uint16_t device_address,
260  uint8_t *buf, uint32_t size);
261 
274 hpm_stat_t hpm_i2c_master_read_nonblocking(I2C_Type *ptr, const uint16_t device_address,
275  uint8_t *buf, const uint32_t size);
276 
287 hpm_stat_t hpm_i2c_slave_read_nonblocking(I2C_Type *ptr, uint8_t *buf, uint32_t size);
288 
299 hpm_stat_t hpm_i2c_slave_write_nonblocking(I2C_Type *ptr, uint8_t *buf, uint32_t size);
300 
301 #endif
302 #ifdef __cplusplus
303 }
304 #endif
305 
306 #endif
uint32_t hpm_stat_t
Definition: hpm_common.h:123
static void size
Definition: hpm_math.h:6899
enum i2c_speed i2c_speed_t
hpm_stat_t hpm_i2c_slave_write_blocking(I2C_Type *ptr, uint8_t *buf, uint32_t size, uint32_t timeout)
I2C slave write operation in blocking mode.
Definition: hpm_i2c.c:558
hpm_stat_t hpm_i2c_slave_read_blocking(I2C_Type *ptr, uint8_t *buf, uint32_t size, uint32_t timeout)
I2C slave read operation in blocking mode.
Definition: hpm_i2c.c:605
hpm_stat_t hpm_i2c_master_probe_slave_address(I2C_Type *ptr, uint16_t device_address)
Probes an I2C slave address.
Definition: hpm_i2c.c:251
hpm_stat_t hpm_i2c_master_addr_write_blocking(I2C_Type *ptr, const uint16_t device_address, uint32_t addr, uint8_t addr_size, uint8_t *buf, uint32_t buf_size, uint32_t timeout)
Definition: hpm_i2c.c:271
hpm_stat_t hpm_i2c_master_addr_read_blocking(I2C_Type *ptr, 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:339
struct i2c_initialize_config i2c_initialize_config_t
i2c_speed
Definition: hpm_i2c.h:35
@ i2c_speed_100khz
Definition: hpm_i2c.h:36
@ i2c_speed_400khz
Definition: hpm_i2c.h:37
@ i2c_speed_1Mhz
Definition: hpm_i2c.h:38
void hpm_i2c_get_default_init_config(i2c_initialize_config_t *config)
Definition: hpm_i2c.c:208
i2c_communication_mode
Definition: hpm_i2c.h:46
@ i2c_master
Definition: hpm_i2c.h:47
@ i2c_slave
Definition: hpm_i2c.h:48
hpm_stat_t hpm_i2c_master_write_blocking(I2C_Type *ptr, 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:419
enum i2c_communication_mode i2c_communication_mode_t
hpm_stat_t hpm_i2c_initialize(I2C_Type *ptr, i2c_initialize_config_t *config)
Initialize the I2C interface.
Definition: hpm_i2c.c:215
hpm_stat_t hpm_i2c_master_read_blocking(I2C_Type *ptr, 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:489
Definition: hpm_i2c_regs.h:12
Definition: hpm_i2c.h:55
bool is_10bit_addressing
Definition: hpm_i2c.h:58
i2c_communication_mode_t communication_mode
Definition: hpm_i2c.h:56
i2c_speed_t speed
Definition: hpm_i2c.h:57
uint8_t slave_address
Definition: hpm_i2c.h:59