diff --git a/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.c b/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.c index c3bfe1f28..a324673a2 100644 --- a/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.c +++ b/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.c @@ -532,7 +532,7 @@ void sio_lld_serve_interrupt(SIODriver *siop) { #if SIO_USE_SYNCHRONIZATION /* The idle flag is forcibly cleared when an RX error event is detected.*/ - imsc &= ~UART_UARTIMSC_RTIM; + u->UARTICR = UART_UARTICR_RTIC; #endif /* Disabling event sources.*/ @@ -564,7 +564,7 @@ void sio_lld_serve_interrupt(SIODriver *siop) { #if SIO_USE_SYNCHRONIZATION /* The idle flag is forcibly cleared when an RX data event is detected.*/ - imsc &= ~UART_UARTIMSC_RTIM; + u->UARTICR = UART_UARTICR_RTIC; #endif /* Called once then the interrupt source is disabled.*/ diff --git a/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.h b/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.h index cadaccc84..229a383a4 100644 --- a/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.h +++ b/os/hal/ports/RP/LLD/UARTv1/hal_sio_lld.h @@ -149,7 +149,8 @@ * * @notapi */ -#define sio_lld_is_rx_idle(siop) true +#define sio_lld_is_rx_idle(siop) \ + (bool)(((siop)->uart->UARTRIS & UART_UARTRIS_RTRIS) != 0U) /** * @brief Determines if RX has pending error events to be read and cleared.