summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-02-06 22:01:18 +0800
committerGitHub <[email protected]>2020-02-06 22:01:18 +0800
commite5aafd2aa0b6165693f51be3d3c5b6f699558c69 (patch)
treed3faace432179e93f14ae7ee4a537f4bebd78c5f
parentbad4f924514a287b75af189c8bd1418935188a47 (diff)
parentc677f88eee408349dcdbf9a8d67fe35404285b2d (diff)
Merge pull request #3359 from wendal/master
fix: 为W60x添加rt_hw_us_delay
-rw-r--r--bsp/w60x/drivers/board.c36
-rw-r--r--bsp/w60x/drivers/drv_soft_i2c.c39
2 files changed, 39 insertions, 36 deletions
diff --git a/bsp/w60x/drivers/board.c b/bsp/w60x/drivers/board.c
index c104733d5b..e4e2ccde47 100644
--- a/bsp/w60x/drivers/board.c
+++ b/bsp/w60x/drivers/board.c
@@ -213,6 +213,42 @@ void rt_hw_cpu_reset(void)
tls_sys_reset();
}
+/**
+ * The time delay function.
+ *
+ * @param microseconds.
+ */
+#include "wm_regs.h"
+void rt_hw_us_delay(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;
+ }
+ }
+ }
+}
+
#ifdef RT_USING_FINSH
#include <finsh.h>
static void reboot(uint8_t argc, char **argv)
diff --git a/bsp/w60x/drivers/drv_soft_i2c.c b/bsp/w60x/drivers/drv_soft_i2c.c
index a9365eaf07..b2e0b5b508 100644
--- a/bsp/w60x/drivers/drv_soft_i2c.c
+++ b/bsp/w60x/drivers/drv_soft_i2c.c
@@ -138,40 +138,7 @@ static rt_int32_t w60x_get_scl(void *data)
return tls_gpio_read((enum tls_io_name)scl);
}
-/**
- * The time delay function.
- *
- * @param microseconds.
- */
-static void w60x_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 w60x_bit_ops_default =
{
@@ -180,7 +147,7 @@ static const struct rt_i2c_bit_ops w60x_bit_ops_default =
.set_scl = w60x_set_scl,
.get_sda = w60x_get_sda,
.get_scl = w60x_get_scl,
- .udelay = w60x_udelay,
+ .udelay = rt_hw_us_delay,
.delay_us = 1,
.timeout = 100
};
@@ -201,9 +168,9 @@ static rt_err_t w60x_i2c_bus_unlock(const struct w60x_soft_i2c_config *cfg)
while (i++ < 9)
{
rt_pin_write(cfg->scl, PIN_HIGH);
- w60x_udelay(100);
+ rt_hw_us_delay(100);
rt_pin_write(cfg->scl, PIN_LOW);
- w60x_udelay(100);
+ rt_hw_us_delay(100);
}
}
if (PIN_LOW == rt_pin_read(cfg->sda))