i2c_bitbang: Change logic when to use i2c_delay()
diff --git a/firmware/src_simtrace/i2c.c b/firmware/src_simtrace/i2c.c
index 3a36888..c0bafe5 100644
--- a/firmware/src_simtrace/i2c.c
+++ b/firmware/src_simtrace/i2c.c
@@ -7,6 +7,16 @@
static const Pin pin_sda_in = {PIO_PA30, PIOA, ID_PIOA, PIO_INPUT, PIO_DEFAULT };
static const Pin pin_scl = {PIO_PA31, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_OPENDRAIN };
+static void i2c_delay()
+{
+ volatile int v;
+ int i;
+
+ for (i = 0; i < 100; i++) {
+ v = 0;
+ }
+}
+
void i2c_pin_init(void)
{
PIO_Configure(&pin_scl, PIO_LISTSIZE(pin_scl));
@@ -16,21 +26,25 @@
static void set_scl(void)
{
PIO_Set(&pin_scl);
+ i2c_delay();
}
static void set_sda(void)
{
PIO_Set(&pin_sda);
+ i2c_delay();
}
static void clear_scl(void)
{
PIO_Clear(&pin_scl);
+ i2c_delay();
}
static void clear_sda(void)
{
PIO_Clear(&pin_sda);
+ i2c_delay();
}
static bool read_sda(void)
@@ -51,26 +65,13 @@
static bool i2c_started = false;
-static void i2c_delay()
-{
- volatile int v;
- int i;
-
- for (i = 0; i < 100; i++) {
- v = 0;
- }
-}
-
static void i2c_start_cond(void)
{
if (i2c_started) {
set_sda();
- i2c_delay();
set_scl();
- i2c_delay();
}
- i2c_delay();
clear_sda();
i2c_delay();
clear_scl();
@@ -80,9 +81,7 @@
static void i2c_stop_cond(void)
{
clear_sda();
- i2c_delay();
set_scl();
- i2c_delay();
set_sda();
i2c_delay();
i2c_started = false;
@@ -94,11 +93,9 @@
set_sda();
else
clear_sda();
- i2c_delay();
+ i2c_delay(); // ?
set_scl();
- i2c_delay();
clear_scl();
- i2c_delay();
}
static bool i2c_read_bit(void)
@@ -106,9 +103,7 @@
bool bit;
set_sda();
- i2c_delay();
set_scl();
- i2c_delay();
bit = read_sda();
clear_scl();