mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
fix(i2c_master): Modify the behavior from ISR WDT to return timeout when circut get shortcut,
Closes https://github.com/espressif/esp-idf/issues/13587
This commit is contained in:
@ -424,7 +424,7 @@ static void s_i2c_send_commands(i2c_master_bus_handle_t i2c_master, TickType_t t
|
|||||||
};
|
};
|
||||||
i2c_ll_master_write_cmd_reg(hal->dev, hw_stop_cmd, 0);
|
i2c_ll_master_write_cmd_reg(hal->dev, hw_stop_cmd, 0);
|
||||||
i2c_hal_master_trans_start(hal);
|
i2c_hal_master_trans_start(hal);
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx];
|
i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx];
|
||||||
@ -563,7 +563,6 @@ static esp_err_t s_i2c_transaction_start(i2c_master_dev_handle_t i2c_dev, int xf
|
|||||||
IRAM_ATTR static void i2c_isr_receive_handler(i2c_master_bus_t *i2c_master)
|
IRAM_ATTR static void i2c_isr_receive_handler(i2c_master_bus_t *i2c_master)
|
||||||
{
|
{
|
||||||
i2c_hal_context_t *hal = &i2c_master->base->hal;
|
i2c_hal_context_t *hal = &i2c_master->base->hal;
|
||||||
while(i2c_ll_is_bus_busy(hal->dev)){}
|
|
||||||
if (i2c_master->status == I2C_STATUS_READ) {
|
if (i2c_master->status == I2C_STATUS_READ) {
|
||||||
i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx];
|
i2c_operation_t *i2c_operation = &i2c_master->i2c_trans.ops[i2c_master->trans_idx];
|
||||||
portENTER_CRITICAL_ISR(&i2c_master->base->spinlock);
|
portENTER_CRITICAL_ISR(&i2c_master->base->spinlock);
|
||||||
@ -624,7 +623,9 @@ static void IRAM_ATTR i2c_master_isr_handler_default(void *arg)
|
|||||||
xQueueSendFromISR(i2c_master->event_queue, (void *)&i2c_master->event, &HPTaskAwoken);
|
xQueueSendFromISR(i2c_master->event_queue, (void *)&i2c_master->event, &HPTaskAwoken);
|
||||||
}
|
}
|
||||||
if (i2c_master->contains_read == true) {
|
if (i2c_master->contains_read == true) {
|
||||||
i2c_isr_receive_handler(i2c_master);
|
if (int_mask & I2C_LL_INTR_MST_COMPLETE || int_mask & I2C_LL_INTR_END_DETECT) {
|
||||||
|
i2c_isr_receive_handler(i2c_master);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i2c_master->async_trans) {
|
if (i2c_master->async_trans) {
|
||||||
|
Reference in New Issue
Block a user