1 /* 2 * Copyright (c) 2006-2025, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 */ 7 8 #ifndef __DRV_HW_I2C_H__ 9 #define __DRV_HW_I2C_H__ 10 11 #include <rtthread.h> 12 #include <rthw.h> 13 #include <rtdevice.h> 14 #include <board.h> 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 /* I2C hardware configuration */ 21 struct gd32_i2c_config 22 { 23 rt_uint32_t i2c_periph; /* I2C peripheral base address */ 24 rcu_periph_enum periph_clk; /* I2C peripheral clock */ 25 26 rcu_periph_enum scl_clk; /* SCL pin clock */ 27 rt_uint32_t scl_port; /* SCL pin port */ 28 rt_uint32_t scl_pin; /* SCL pin */ 29 rt_uint32_t scl_af; /* SCL pin alternate function */ 30 31 rcu_periph_enum sda_clk; /* SDA pin clock */ 32 rt_uint32_t sda_port; /* SDA pin port */ 33 rt_uint32_t sda_pin; /* SDA pin */ 34 rt_uint32_t sda_af; /* SDA pin alternate function */ 35 36 IRQn_Type ev_irq_type; /* Event IRQn */ 37 IRQn_Type er_irq_type; /* Error IRQn */ 38 39 rt_uint32_t i2c_clock_hz; /* I2C clock speed in Hz, e.g., 100000 for 100kHz */ 40 41 const char *device_name; /* Device name */ 42 }; 43 44 /* I2C runtime context */ 45 struct gd32_i2c 46 { 47 struct rt_i2c_bus_device parent; 48 const struct gd32_i2c_config *config; 49 50 struct rt_mutex bus_mutex; 51 struct rt_completion sync_sem; 52 uint32_t dev_config; 53 uint16_t addr1; 54 uint16_t addr2; 55 uint32_t xfer_len; 56 struct rt_i2c_msg *current; 57 uint8_t errs; 58 rt_bool_t is_restart; 59 }; 60 61 int rt_hw_i2c_init(void); 62 63 #ifdef __cplusplus 64 } 65 #endif 66 67 #endif /* __DRV_HW_I2C_H__ */ 68 69