From 2243081f85318e7f30bf6e1f0d0ce172a768230e Mon Sep 17 00:00:00 2001 From: lienbacher <37445630+lienbacher@users.noreply.github.com> Date: Thu, 1 Oct 2020 14:40:42 +0200 Subject: [PATCH] add I2C_RX_FIFO_OVF_INT_ST handling to i2c_isr_handler_default (#4342) Fixes crash on ESP32 when I2C FiFo overflows and interrupt function is unable to handle crash and throws this error: [E][esp32-hal-i2c.c:1013] i2c_isr_handler_default(): unknown int=4 Co-authored-by: 0xDEADBEEF <0xde4dbeef@gmail.com> --- cores/esp32/esp32-hal-i2c.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cores/esp32/esp32-hal-i2c.c b/cores/esp32/esp32-hal-i2c.c index d85919cf..d50ce4cc 100644 --- a/cores/esp32/esp32-hal-i2c.c +++ b/cores/esp32/esp32-hal-i2c.c @@ -945,6 +945,14 @@ static void IRAM_ATTR i2c_isr_handler_default(void* arg) activeInt &=~I2C_RXFIFO_FULL_INT_ST; } + if(activeInt & I2C_RXFIFO_OVF_INT_ST) { + emptyRxFifo(p_i2c); + p_i2c->dev->int_clr.rx_fifo_full=1; + p_i2c->dev->int_ena.rx_fifo_full=1; //why? + + activeInt &=~I2C_RXFIFO_OVF_INT_ST; + } + if (activeInt & I2C_ACK_ERR_INT_ST_M) {//fatal error, abort i2c service if (p_i2c->mode == I2C_MASTER) { i2c_update_error_byte_cnt(p_i2c); // calc which byte caused ack Error, check if address or data