summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/i2cslave.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/ports/stm32/i2cslave.c b/ports/stm32/i2cslave.c
index f3bb232f7..0e4fbf489 100644
--- a/ports/stm32/i2cslave.c
+++ b/ports/stm32/i2cslave.c
@@ -94,6 +94,9 @@ void i2c_slave_irq_handler(i2c_slave_t *i2c) {
i2c->ISR = I2C_ISR_TXE;
i2c->ICR = I2C_ICR_ADDRCF;
i2c_slave_process_addr_match(i2c, (i2c->ISR >> I2C_ISR_DIR_Pos) & 1);
+ // Re-read ISR in case i2c_slave_process_addr_match() took some time
+ // to process and TXIS/RXNE was set in the meantime.
+ isr = i2c->ISR;
}
if (isr & I2C_ISR_TXIS) {
// This callback must call i2c_slave_write_byte.