@@ -208,6 +208,11 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx
208208 uart -> dev -> conf0 .stop_bit_num = ONE_STOP_BITS_CONF ;
209209 uart -> dev -> rs485_conf .dl1_en = 1 ;
210210 }
211+
212+ // tx_idle_num : idle interval after tx FIFO is empty(unit: the time it takes to send one bit under current baudrate)
213+ // Setting it to 0 prevents line idle time/delays when sending messages with small intervals
214+ uart -> dev -> idle_conf .tx_idle_num = 0 ; //
215+
211216 UART_MUTEX_UNLOCK ();
212217
213218 if (rxPin != -1 ) {
@@ -265,7 +270,7 @@ uint32_t uartAvailable(uart_t* uart)
265270 if (uart == NULL || uart -> queue == NULL ) {
266271 return 0 ;
267272 }
268- return uxQueueMessagesWaiting (uart -> queue );
273+ return ( uxQueueMessagesWaiting (uart -> queue ) + uart -> dev -> status . rxfifo_cnt ) ;
269274}
270275
271276uint32_t uartAvailableForWrite (uart_t * uart )
@@ -276,12 +281,27 @@ uint32_t uartAvailableForWrite(uart_t* uart)
276281 return 0x7f - uart -> dev -> status .txfifo_cnt ;
277282}
278283
284+ void uartRxFifoToQueue (uart_t * uart )
285+ {
286+ uint8_t c ;
287+ 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+ }
292+ UART_MUTEX_UNLOCK ();
293+ }
294+
279295uint8_t uartRead (uart_t * uart )
280296{
281297 if (uart == NULL || uart -> queue == NULL ) {
282298 return 0 ;
283299 }
284300 uint8_t c ;
301+ if ((uxQueueMessagesWaiting (uart -> queue ) == 0 ) && (uart -> dev -> status .rxfifo_cnt > 0 ))
302+ {
303+ uartRxFifoToQueue (uart );
304+ }
285305 if (xQueueReceive (uart -> queue , & c , 0 )) {
286306 return c ;
287307 }
@@ -294,6 +314,10 @@ uint8_t uartPeek(uart_t* uart)
294314 return 0 ;
295315 }
296316 uint8_t c ;
317+ if ((uxQueueMessagesWaiting (uart -> queue ) == 0 ) && (uart -> dev -> status .rxfifo_cnt > 0 ))
318+ {
319+ uartRxFifoToQueue (uart );
320+ }
297321 if (xQueuePeek (uart -> queue , & c , 0 )) {
298322 return c ;
299323 }
0 commit comments