Skip to content

Commit 49b7664

Browse files
hreintkeme-no-dev
andauthored
HardwareSerial bugfix & improvement (#3713)
Co-authored-by: Me No Dev <[email protected]>
1 parent 5d9bb5c commit 49b7664

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

Diff for: cores/esp32/esp32-hal-uart.c

+13-5
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ static void IRAM_ATTR _uart_isr(void *arg)
8585
uart->dev->int_clr.rxfifo_tout = 1;
8686
while(uart->dev->status.rxfifo_cnt || (uart->dev->mem_rx_status.wr_addr != uart->dev->mem_rx_status.rd_addr)) {
8787
c = uart->dev->fifo.rw_byte;
88-
if(uart->queue != NULL && !xQueueIsQueueFullFromISR(uart->queue)) {
88+
if(uart->queue != NULL) {
8989
xQueueSendFromISR(uart->queue, &c, &xHigherPriorityTaskWoken);
9090
}
9191
}
@@ -285,10 +285,18 @@ void uartRxFifoToQueue(uart_t* uart)
285285
{
286286
uint8_t c;
287287
UART_MUTEX_LOCK();
288-
while(uart->dev->status.rxfifo_cnt || (uart->dev->mem_rx_status.wr_addr != uart->dev->mem_rx_status.rd_addr)) {
289-
c = uart->dev->fifo.rw_byte;
290-
xQueueSend(uart->queue, &c, 0);
291-
}
288+
//disable interrupts
289+
uart->dev->int_ena.val = 0;
290+
uart->dev->int_clr.val = 0xffffffff;
291+
while (uart->dev->status.rxfifo_cnt || (uart->dev->mem_rx_status.wr_addr != uart->dev->mem_rx_status.rd_addr)) {
292+
c = uart->dev->fifo.rw_byte;
293+
xQueueSend(uart->queue, &c, 0);
294+
}
295+
//enable interrupts
296+
uart->dev->int_ena.rxfifo_full = 1;
297+
uart->dev->int_ena.frm_err = 1;
298+
uart->dev->int_ena.rxfifo_tout = 1;
299+
uart->dev->int_clr.val = 0xffffffff;
292300
UART_MUTEX_UNLOCK();
293301
}
294302

0 commit comments

Comments
 (0)