kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'fix/sdio_slave_recv_intr_unhandled' into 'master'
sdio_slave: fixed the issue that interrupt may be cleared with finished trans unhandled See merge request espressif/esp-idf!11399pull/7365/head
commit
f7a7cc1014
|
@ -701,7 +701,8 @@ static esp_err_t recv_flush_data(void)
|
|||
static void sdio_intr_recv(void *arg)
|
||||
{
|
||||
portBASE_TYPE yield = 0;
|
||||
while (sdio_slave_hal_recv_done(context.hal)) {
|
||||
bool triggered = sdio_slave_hal_recv_done(context.hal);
|
||||
while (triggered) {
|
||||
portENTER_CRITICAL_ISR(&context.recv_spinlock);
|
||||
bool has_next_item = sdio_slave_hal_recv_has_next_item(context.hal);
|
||||
portEXIT_CRITICAL_ISR(&context.recv_spinlock);
|
||||
|
@ -710,8 +711,9 @@ static void sdio_intr_recv(void *arg)
|
|||
xSemaphoreGiveFromISR(context.recv_event, &yield);
|
||||
continue; //check the linked list again skip the interrupt checking
|
||||
}
|
||||
// if no more items on the list, go back and check again the interrupt,
|
||||
// if no more items on the list, check the interrupt again,
|
||||
// will loop until the interrupt bit is kept cleared.
|
||||
triggered = sdio_slave_hal_recv_done(context.hal);
|
||||
}
|
||||
if (yield) {
|
||||
portYIELD_FROM_ISR();
|
||||
|
|
Ładowanie…
Reference in New Issue