Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ed220bd

Browse filesBrowse files
hreintkeme-no-dev
andcommitted
Minimize HardwareSerial Receive and Transmit delays (espressif#3664)
* Minimize HardwareSerial Receive and Transmit delays * Remove uartRxFifoToQueue from esp-hal-uart.h Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com>
1 parent 80f9f9a commit ed220bd
Copy full SHA for ed220bd

File tree

1 file changed

+25
-1
lines changed
Filter options

1 file changed

+25
-1
lines changed

‎cores/esp32/esp32-hal-uart.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-uart.c
+25-1Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

271276
uint32_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+
279295
uint8_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

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.