From 4ca7e495ab98571a4ba5b12fdbd06a1f57a6923e Mon Sep 17 00:00:00 2001 From: jonas Date: Wed, 2 Aug 2023 13:00:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A8=A1=E6=8B=9Fi2c?= =?UTF-8?q?=E6=97=B6=E5=BA=8F=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BD=BF=E6=A8=A1?= =?UTF-8?q?=E6=8B=9FI2C=E6=97=B6=E5=BA=8F=E6=9B=B4=E5=8A=A0=E6=8E=A5?= =?UTF-8?q?=E8=BF=91=E8=AE=BE=E5=AE=9A=E7=9A=84=E5=BB=B6=E8=BF=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=20=E6=A8=A1=E6=8B=9FI2C=E7=9A=84IO=E7=BF=BB=E8=BD=AC?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=8D=95=E4=BD=8D=E6=94=B9=E4=B8=BAns?= =?UTF-8?q?=EF=BC=8C=E4=BD=BFI2C=E9=80=9A=E8=AE=AF=E9=80=9F=E7=8E=87?= =?UTF-8?q?=E5=8F=AF=E8=B0=83=E8=8A=82=E5=BA=A6=E6=9B=B4=E5=87=86=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/i2c/i2c-bit-ops.c | 14 +++++++------- components/drivers/include/drivers/i2c-bit-ops.h | 7 +++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/components/drivers/i2c/i2c-bit-ops.c b/components/drivers/i2c/i2c-bit-ops.c index 17ce9df..8c60d2e 100644 --- a/components/drivers/i2c/i2c-bit-ops.c +++ b/components/drivers/i2c/i2c-bit-ops.c @@ -25,12 +25,12 @@ rt_inline void i2c_delay(struct rt_i2c_bit_ops *ops) { - ops->udelay((ops->delay_us + 1) >> 1); + ops->ndelay((ops->delay_ns + 1) >> 1); } rt_inline void i2c_delay2(struct rt_i2c_bit_ops *ops) { - ops->udelay(ops->delay_us); + ops->ndelay(ops->delay_ns); } #define SDA_L(ops) SET_SDA(ops, 0) @@ -47,7 +47,10 @@ static rt_err_t SCL_H(struct rt_i2c_bit_ops *ops) SET_SCL(ops, 1); if (!ops->get_scl) - goto done; + { + i2c_delay(ops); + return RT_EOK; + } start = rt_tick_get(); i2c_delay(ops); @@ -65,9 +68,6 @@ static rt_err_t SCL_H(struct rt_i2c_bit_ops *ops) } #endif -done: - i2c_delay(ops); - return RT_EOK; } @@ -181,7 +181,7 @@ static rt_int32_t i2c_readb(struct rt_i2c_bus_device *bus) if (GET_SDA(ops)) data |= 1; SCL_L(ops); - i2c_delay2(ops); + i2c_delay(ops); } return data; diff --git a/components/drivers/include/drivers/i2c-bit-ops.h b/components/drivers/include/drivers/i2c-bit-ops.h index 0d94de1..5935968 100644 --- a/components/drivers/include/drivers/i2c-bit-ops.h +++ b/components/drivers/include/drivers/i2c-bit-ops.h @@ -11,6 +11,9 @@ #ifndef __I2C_BIT_OPS_H__ #define __I2C_BIT_OPS_H__ +#include +#include + #ifdef __cplusplus extern "C" { #endif @@ -23,9 +26,9 @@ struct rt_i2c_bit_ops rt_int32_t (*get_sda)(void *data); rt_int32_t (*get_scl)(void *data); - void (*udelay)(rt_uint32_t us); + void (*ndelay)(rt_uint32_t us); - rt_uint32_t delay_us; /* scl and sda line delay */ + rt_uint32_t delay_ns; /* scl and sda line delay */ rt_uint32_t timeout; /* in tick */ };