fix(spi_slave_hd): fix seg mode potential iwdt timeout when multi task call

This commit is contained in:
wanlei
2024-04-12 17:42:32 +08:00
committed by BOT
parent 6cbb5af66e
commit 9e38f78ea2

View File

@ -51,8 +51,8 @@ typedef struct {
QueueHandle_t tx_ret_queue; QueueHandle_t tx_ret_queue;
QueueHandle_t rx_trans_queue; QueueHandle_t rx_trans_queue;
QueueHandle_t rx_ret_queue; QueueHandle_t rx_ret_queue;
QueueHandle_t tx_cnting_sem; SemaphoreHandle_t tx_cnting_sem;
QueueHandle_t rx_cnting_sem; SemaphoreHandle_t rx_cnting_sem;
spi_slave_hd_trans_priv_t tx_curr_trans; spi_slave_hd_trans_priv_t tx_curr_trans;
spi_slave_hd_trans_priv_t rx_curr_trans; spi_slave_hd_trans_priv_t rx_curr_trans;
@ -335,16 +335,14 @@ static IRAM_ATTR void spi_slave_hd_intr_segment(void *arg)
awoken |= intr_check_clear_callback(host, SPI_EV_CMD9, callback->cb_cmd9); awoken |= intr_check_clear_callback(host, SPI_EV_CMD9, callback->cb_cmd9);
awoken |= intr_check_clear_callback(host, SPI_EV_CMDA, callback->cb_cmdA); awoken |= intr_check_clear_callback(host, SPI_EV_CMDA, callback->cb_cmdA);
bool tx_done = false; bool tx_done = false, rx_done = false;
bool rx_done = false; bool tx_event = false, rx_event = false;
portENTER_CRITICAL_ISR(&host->int_spinlock); portENTER_CRITICAL_ISR(&host->int_spinlock);
if (host->tx_curr_trans.trans && spi_slave_hd_hal_check_disable_event(hal, SPI_EV_SEND)) { tx_event = spi_slave_hd_hal_check_disable_event(hal, SPI_EV_SEND);
tx_done = true; rx_event = spi_slave_hd_hal_check_disable_event(hal, SPI_EV_RECV);
} tx_done = host->tx_curr_trans.trans && tx_event;
if (host->rx_curr_trans.trans && spi_slave_hd_hal_check_disable_event(hal, SPI_EV_RECV)) { rx_done = host->rx_curr_trans.trans && rx_event;
rx_done = true;
}
portEXIT_CRITICAL_ISR(&host->int_spinlock); portEXIT_CRITICAL_ISR(&host->int_spinlock);
if (tx_done) { if (tx_done) {