diff options
| author | CYFS <[email protected]> | 2026-07-15 17:54:33 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-07-16 13:19:57 +0800 |
| commit | 414ff7f3710168dbf99a398e18b2a4ff8448b005 (patch) | |
| tree | 4d29ff0dadc5cb4aa74941deb4e28bb46ff5ad6d /bsp/synwit/libraries | |
| parent | 997de9433af42aacb1988489ccb08b6688f440cc (diff) | |
[bsp][drivers][soft_i2c] unify the software I2C driver
Diffstat (limited to 'bsp/synwit/libraries')
| -rw-r--r-- | bsp/synwit/libraries/SWM320_drivers/SConscript | 3 | ||||
| -rw-r--r-- | bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.c | 241 | ||||
| -rw-r--r-- | bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.h | 19 | ||||
| -rw-r--r-- | bsp/synwit/libraries/SWM341_drivers/SConscript | 3 | ||||
| -rw-r--r-- | bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.c | 219 | ||||
| -rw-r--r-- | bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.h | 18 |
6 files changed, 0 insertions, 503 deletions
diff --git a/bsp/synwit/libraries/SWM320_drivers/SConscript b/bsp/synwit/libraries/SWM320_drivers/SConscript index c4beaaac5b..3cca80755d 100644 --- a/bsp/synwit/libraries/SWM320_drivers/SConscript +++ b/bsp/synwit/libraries/SWM320_drivers/SConscript @@ -15,9 +15,6 @@ if GetDepend(['RT_USING_ADC']): if GetDepend(['RT_USING_CLOCK_TIME']): src += ['drv_timer.c'] -if GetDepend(['RT_USING_I2C']): - src += ['drv_soft_i2c.c'] - if GetDepend(['RT_USING_PWM']): src += ['drv_pwm.c'] diff --git a/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.c b/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.c deleted file mode 100644 index ed9ceb7142..0000000000 --- a/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2006-2022, Synwit Technology Co.,Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2018-05-31 ZYH first version - * 2018-12-10 Zohar_Lee format file - * 2020-07-10 lik rewrite - */ - -#include "drv_soft_i2c.h" - -#ifdef RT_USING_I2C -#ifdef BSP_USING_I2C - -/*************************************************************** -*!!!!!!!!!!!!!!!!!!!!!!!!!!!!NOTICE!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -*In order to use swm drv_soft_i2c,you need to commented out -line 114 (SDA_H(ops);) and line 167 (SDA_H(ops);) in i2c-bit-ops.c -At the same time, add one line (SDA_L(ops);)after line 154 (SCL_L(ops);) -in i2c-bit-ops.c -***************************************************************/ - -//#define DRV_DEBUG -#define LOG_TAG "drv.i2c" -#include <drv_log.h> - -#if !defined(BSP_USING_I2C0) && !defined(BSP_USING_I2C1) -#error "Please define at least one BSP_USING_I2Cx" -/* this driver can be disabled at menuconfig ? RT-Thread Components ? Device Drivers */ -#endif - -#ifdef BSP_USING_I2C0 -#define I2C0_BUS_CFG \ - { \ - .scl = BSP_I2C0_SCL_PIN, \ - .sda = BSP_I2C0_SDA_PIN, \ - .name = "i2c0", \ - } -#endif - -#ifdef BSP_USING_I2C1 -#define I2C1_BUS_CFG \ - { \ - .scl = BSP_I2C1_SCL_PIN, \ - .sda = BSP_I2C1_SDA_PIN, \ - .name = "i2c1", \ - } -#endif - -/* swm config class */ -struct swm_soft_i2c_cfg -{ - rt_uint8_t scl; - rt_uint8_t sda; - const char *name; -}; -/* swm i2c dirver class */ -struct swm_soft_i2c_device -{ - struct rt_i2c_bit_ops ops; - struct rt_i2c_bus_device i2c_bus; -}; -static const struct swm_soft_i2c_cfg swm_soft_i2c_cfg[] = - { -#ifdef BSP_USING_I2C0 - I2C0_BUS_CFG, -#endif -#ifdef BSP_USING_I2C1 - I2C1_BUS_CFG, -#endif -}; - -static struct swm_soft_i2c_device i2c_obj[sizeof(swm_soft_i2c_cfg) / sizeof(swm_soft_i2c_cfg[0])]; - -/** - * This function initializes the i2c pin. - * - * @param swm i2c dirver class. - */ -static void swm_i2c_gpio_init(struct swm_soft_i2c_device *i2c) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)i2c->ops.data; - - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_OUTPUT_OD); - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_OUTPUT_OD); - - rt_pin_write(soft_i2c_cfg->scl, PIN_HIGH); - rt_pin_write(soft_i2c_cfg->sda, PIN_HIGH); -} - -static void swm_i2c_pin_init(void) -{ - rt_size_t obj_num = sizeof(i2c_obj) / sizeof(struct swm_soft_i2c_device); - - for(rt_size_t i = 0; i < obj_num; i++) - { - swm_i2c_gpio_init(&i2c_obj[i]); - } -} - -/** - * This function sets the sda pin. - * - * @param swm config class. - * @param The sda pin state. - */ -static void swm_i2c_set_sda(void *data, rt_int32_t state) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_OUTPUT_OD); - if (state) - { - rt_pin_write(soft_i2c_cfg->sda, PIN_HIGH); - } - else - { - rt_pin_write(soft_i2c_cfg->sda, PIN_LOW); - } -} - -/** - * This function sets the scl pin. - * - * @param swm config class. - * @param The scl pin state. - */ -static void swm_i2c_set_scl(void *data, rt_int32_t state) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_OUTPUT_OD); - if (state) - { - rt_pin_write(soft_i2c_cfg->scl, PIN_HIGH); - } - else - { - rt_pin_write(soft_i2c_cfg->scl, PIN_LOW); - } -} - -/** - * This function gets the sda pin state. - * - * @param The sda pin state. - */ -static rt_int32_t swm_i2c_get_sda(void *data) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_INPUT_PULLUP); - return rt_pin_read(soft_i2c_cfg->sda); -} - -/** - * This function gets the scl pin state. - * - * @param The scl pin state. - */ -static rt_int32_t swm_i2c_get_scl(void *data) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_INPUT_PULLUP); - return rt_pin_read(soft_i2c_cfg->scl); -} - -/** - * The time delay function. - * - * @param microseconds. - */ -static void swm_i2c_udelay(rt_uint32_t us) -{ - rt_uint32_t ticks; - rt_uint32_t told, tnow, tcnt = 0; - rt_uint32_t reload = SysTick->LOAD; - - ticks = us * reload / (1000000 / RT_TICK_PER_SECOND); - told = SysTick->VAL; - while (1) - { - tnow = SysTick->VAL; - if (tnow != told) - { - if (tnow < told) - { - tcnt += told - tnow; - } - else - { - tcnt += reload - tnow + told; - } - told = tnow; - if (tcnt >= ticks) - { - break; - } - } - } -} - -static const struct rt_i2c_bit_ops swm_i2c_bit_ops = -{ - .data = RT_NULL, - .pin_init = swm_i2c_pin_init, - .set_sda = swm_i2c_set_sda, - .set_scl = swm_i2c_set_scl, - .get_sda = swm_i2c_get_sda, - .get_scl = swm_i2c_get_scl, - .udelay = swm_i2c_udelay, - .delay_us = 1, - .timeout = 100, - .i2c_pin_init_flag = RT_FALSE -}; - -/* I2C initialization function */ -int swm_i2c_init(void) -{ - rt_err_t result; - - for (rt_size_t i = 0; i < sizeof(i2c_obj) / sizeof(struct swm_soft_i2c_device); i++) - { - i2c_obj[i].ops = swm_i2c_bit_ops; - i2c_obj[i].ops.data = (void *)&swm_soft_i2c_cfg[i]; - i2c_obj[i].i2c_bus.priv = &i2c_obj[i].ops; - - result = rt_i2c_bit_add_bus(&i2c_obj[i].i2c_bus, swm_soft_i2c_cfg[i].name); - RT_ASSERT(result == RT_EOK); - - LOG_D("software simulation %s init done, pin scl: %d, pin sda %d", - swm_soft_i2c_cfg[i].name, - swm_soft_i2c_cfg[i].scl, - swm_soft_i2c_cfg[i].sda); - } - - return RT_EOK; -} -INIT_DEVICE_EXPORT(swm_i2c_init); -#endif /* BSP_USING_I2C */ -#endif /* RT_USING_I2C */ diff --git a/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.h b/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.h deleted file mode 100644 index 2dd3822124..0000000000 --- a/bsp/synwit/libraries/SWM320_drivers/drv_soft_i2c.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2006-2022, Synwit Technology Co.,Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2018-12-10 Zohar_Lee first version - * 2020-07-10 lik rewrite - */ - -#ifndef __DRV_SOFT_I2C_H__ -#define __DRV_SOFT_I2C_H__ - -#include "board.h" - -int swm_i2c_init(void); - -#endif /* __DRV_SOFT_I2C_H__ */ diff --git a/bsp/synwit/libraries/SWM341_drivers/SConscript b/bsp/synwit/libraries/SWM341_drivers/SConscript index 26bef4ca2b..bb7bb6d927 100644 --- a/bsp/synwit/libraries/SWM341_drivers/SConscript +++ b/bsp/synwit/libraries/SWM341_drivers/SConscript @@ -21,9 +21,6 @@ if GetDepend(['RT_USING_CAN']): if GetDepend(['RT_USING_CLOCK_TIME']): src += ['drv_timer.c'] -if GetDepend(['RT_USING_I2C']): - src += ['drv_soft_i2c.c'] - if GetDepend(['RT_USING_PWM']): src += ['drv_pwm.c'] diff --git a/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.c b/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.c deleted file mode 100644 index f74715d03d..0000000000 --- a/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2006-2022, Synwit Technology Co.,Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2021-07-01 lik first version - */ - -#include "drv_soft_i2c.h" - -#ifdef RT_USING_I2C -#ifdef BSP_USING_I2C - -//#define DRV_DEBUG -#define LOG_TAG "drv.i2c" -#include <drv_log.h> - -#if !defined(BSP_USING_I2C0) && !defined(BSP_USING_I2C1) -#error "Please define at least one BSP_USING_I2Cx" -/* this driver can be disabled at menuconfig ? RT-Thread Components ? Device Drivers */ -#endif - -#ifdef BSP_USING_I2C0 -#define I2C0_BUS_CFG \ - { \ - .scl = BSP_I2C0_SCL_PIN, \ - .sda = BSP_I2C0_SDA_PIN, \ - .name = "i2c0", \ - } -#endif - -#ifdef BSP_USING_I2C1 -#define I2C1_BUS_CFG \ - { \ - .scl = BSP_I2C1_SCL_PIN, \ - .sda = BSP_I2C1_SDA_PIN, \ - .name = "i2c1", \ - } -#endif - -/* swm config class */ -struct swm_soft_i2c_cfg -{ - rt_uint8_t scl; - rt_uint8_t sda; - const char *name; -}; -/* swm i2c dirver class */ -struct swm_soft_i2c_device -{ - struct rt_i2c_bit_ops ops; - struct rt_i2c_bus_device i2c_bus; -}; - -static const struct swm_soft_i2c_cfg swm_soft_i2c_cfg[] = - { -#ifdef BSP_USING_I2C0 - I2C0_BUS_CFG, -#endif -#ifdef BSP_USING_I2C1 - I2C1_BUS_CFG, -#endif -}; - -static struct swm_soft_i2c_device i2c_obj[sizeof(swm_soft_i2c_cfg) / sizeof(swm_soft_i2c_cfg[0])]; - -/** - * This function initializes the i2c pin. - * - * @param swm i2c dirver class. - */ -static void swm_i2c_gpio_init(struct swm_soft_i2c_device *i2c) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)i2c->ops.data; - - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_OUTPUT_OD); - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_OUTPUT_OD); - - rt_pin_write(soft_i2c_cfg->scl, PIN_HIGH); - rt_pin_write(soft_i2c_cfg->sda, PIN_HIGH); -} - -/** - * This function sets the sda pin. - * - * @param swm config class. - * @param The sda pin state. - */ -static void swm_i2c_set_sda(void *data, rt_int32_t state) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_OUTPUT_OD); - if (state) - { - rt_pin_write(soft_i2c_cfg->sda, PIN_HIGH); - } - else - { - rt_pin_write(soft_i2c_cfg->sda, PIN_LOW); - } -} - -/** - * This function sets the scl pin. - * - * @param swm config class. - * @param The scl pin state. - */ -static void swm_i2c_set_scl(void *data, rt_int32_t state) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_OUTPUT_OD); - if (state) - { - rt_pin_write(soft_i2c_cfg->scl, PIN_HIGH); - } - else - { - rt_pin_write(soft_i2c_cfg->scl, PIN_LOW); - } -} - -/** - * This function gets the sda pin state. - * - * @param The sda pin state. - */ -static rt_int32_t swm_i2c_get_sda(void *data) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->sda, PIN_MODE_INPUT_PULLDOWN); - return rt_pin_read(soft_i2c_cfg->sda); -} - -/** - * This function gets the scl pin state. - * - * @param The scl pin state. - */ -static rt_int32_t swm_i2c_get_scl(void *data) -{ - struct swm_soft_i2c_cfg *soft_i2c_cfg = (struct swm_soft_i2c_cfg *)data; - rt_pin_mode(soft_i2c_cfg->scl, PIN_MODE_INPUT_PULLDOWN); - return rt_pin_read(soft_i2c_cfg->scl); -} - -/** - * The time delay function. - * - * @param microseconds. - */ -static void swm_i2c_udelay(rt_uint32_t us) -{ - rt_uint32_t ticks; - rt_uint32_t told, tnow, tcnt = 0; - rt_uint32_t reload = SysTick->LOAD; - - ticks = us * reload / (1000000 / RT_TICK_PER_SECOND); - told = SysTick->VAL; - while (1) - { - tnow = SysTick->VAL; - if (tnow != told) - { - if (tnow < told) - { - tcnt += told - tnow; - } - else - { - tcnt += reload - tnow + told; - } - told = tnow; - if (tcnt >= ticks) - { - break; - } - } - } -} - -static const struct rt_i2c_bit_ops swm_i2c_bit_ops = - { - .data = RT_NULL, - .set_sda = swm_i2c_set_sda, - .set_scl = swm_i2c_set_scl, - .get_sda = swm_i2c_get_sda, - .get_scl = swm_i2c_get_scl, - .udelay = swm_i2c_udelay, - .delay_us = 1, - .timeout = 100}; - -/* I2C initialization function */ -int swm_i2c_init(void) -{ - rt_err_t result; - - for (int i = 0; i < sizeof(i2c_obj) / sizeof(struct swm_soft_i2c_device); i++) - { - i2c_obj[i].ops = swm_i2c_bit_ops; - i2c_obj[i].ops.data = (void *)&swm_soft_i2c_cfg[i]; - i2c_obj[i].i2c_bus.priv = &i2c_obj[i].ops; - swm_i2c_gpio_init(&i2c_obj[i]); - result = rt_i2c_bit_add_bus(&i2c_obj[i].i2c_bus, swm_soft_i2c_cfg[i].name); - RT_ASSERT(result == RT_EOK); - - LOG_D("software simulation %s init done, pin scl: %d, pin sda %d", - swm_soft_i2c_cfg[i].name, - swm_soft_i2c_cfg[i].scl, - swm_soft_i2c_cfg[i].sda); - } - - return RT_EOK; -} -INIT_DEVICE_EXPORT(swm_i2c_init); -#endif /* BSP_USING_I2C */ -#endif /* RT_USING_I2C */ diff --git a/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.h b/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.h deleted file mode 100644 index 60151d0e50..0000000000 --- a/bsp/synwit/libraries/SWM341_drivers/drv_soft_i2c.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2006-2022, Synwit Technology Co.,Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2021-07-01 lik first version - */ - -#ifndef __DRV_SOFT_I2C_H__ -#define __DRV_SOFT_I2C_H__ - -#include "board.h" - -int swm_i2c_init(void); - -#endif /* __DRV_SOFT_I2C_H__ */ |
