|
@@ -271,7 +271,13 @@ static void sport_uart_tx_chars(struct sport_uart_port *up)
|
|
|
}
|
|
|
|
|
|
if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
|
|
|
- sport_stop_tx(&up->port);
|
|
|
+ /* The waiting loop to stop SPORT TX from TX interrupt is
|
|
|
+ * too long. This may block SPORT RX interrupts and cause
|
|
|
+ * RX FIFO overflow. So, do stop sport TX only after the last
|
|
|
+ * char in TX FIFO is moved into the shift register.
|
|
|
+ */
|
|
|
+ if (SPORT_GET_STAT(up) & TXHRE)
|
|
|
+ sport_stop_tx(&up->port);
|
|
|
return;
|
|
|
}
|
|
|
|