diff --git a/i2c_loop_error.jpg b/i2c_loop_error.jpg new file mode 100644 index 0000000..7d92ab9 Binary files /dev/null and b/i2c_loop_error.jpg differ diff --git a/include/main.h b/include/main.h index ac883b3..208c433 100644 --- a/include/main.h +++ b/include/main.h @@ -5,7 +5,7 @@ #include "drivers/serial.h" #define SW_VER "DF00" -#define SW_DATE "13042020" +#define SW_DATE "28042020" #define SYSTICK_TICKS_PER_SECONDS 100 #define SYSTICK_TICKS_PERIOD 10 diff --git a/src/main.c b/src/main.c index 18dfe49..652f989 100644 --- a/src/main.c +++ b/src/main.c @@ -149,8 +149,7 @@ static void message_callback(struct AX25Msg *msg) { } -int -main(int argc, char* argv[]){ +int main(int argc, char* argv[]){ // Send a greeting to the trace device (skipped on Release). // trace_puts("Hello ARM World!"); diff --git a/system/src/drivers/i2c.c b/system/src/drivers/i2c.c index 0b7fc2c..d9166de 100644 --- a/system/src/drivers/i2c.c +++ b/system/src/drivers/i2c.c @@ -146,7 +146,13 @@ void i2cVariableReset(void) { } void i2cIrqHandler(void) { - // int i; + + if ((I2C1->SR1 & I2C_SR1_STOPF) == I2C_SR1_STOPF) { + I2C1->SR1 &= (0xFFFFFFFF ^ I2C_SR1_STOPF); + i2cStop(); + + i2c_state = I2C_ERROR; + } if ((I2C1->SR1 & I2C_SR1_SB) == I2C_SR1_SB && (i2c_txing == 1 || i2c_rxing == 1)) { // After Start conditions have been transmitted. I2C1->DR = i2c_remote_addr; // Loading the slave address into data register