Minimize HardwareSerial Receive and Transmit delays (#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>
This commit is contained in:
parent
80f9f9aeec
commit
ed220bd042
@ -208,6 +208,11 @@ uart_t* uartBegin(uint8_t uart_nr, uint32_t baudrate, uint32_t config, int8_t rx
|
|||||||
uart->dev->conf0.stop_bit_num = ONE_STOP_BITS_CONF;
|
uart->dev->conf0.stop_bit_num = ONE_STOP_BITS_CONF;
|
||||||
uart->dev->rs485_conf.dl1_en = 1;
|
uart->dev->rs485_conf.dl1_en = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tx_idle_num : idle interval after tx FIFO is empty(unit: the time it takes to send one bit under current baudrate)
|
||||||
|
// Setting it to 0 prevents line idle time/delays when sending messages with small intervals
|
||||||
|
uart->dev->idle_conf.tx_idle_num = 0; //
|
||||||
|
|
||||||
UART_MUTEX_UNLOCK();
|
UART_MUTEX_UNLOCK();
|
||||||
|
|
||||||
if(rxPin != -1) {
|
if(rxPin != -1) {
|
||||||
@ -265,7 +270,7 @@ uint32_t uartAvailable(uart_t* uart)
|
|||||||
if(uart == NULL || uart->queue == NULL) {
|
if(uart == NULL || uart->queue == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return uxQueueMessagesWaiting(uart->queue);
|
return (uxQueueMessagesWaiting(uart->queue) + uart->dev->status.rxfifo_cnt) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t uartAvailableForWrite(uart_t* uart)
|
uint32_t uartAvailableForWrite(uart_t* uart)
|
||||||
@ -276,12 +281,27 @@ uint32_t uartAvailableForWrite(uart_t* uart)
|
|||||||
return 0x7f - uart->dev->status.txfifo_cnt;
|
return 0x7f - uart->dev->status.txfifo_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uartRxFifoToQueue(uart_t* uart)
|
||||||
|
{
|
||||||
|
uint8_t c;
|
||||||
|
UART_MUTEX_LOCK();
|
||||||
|
while(uart->dev->status.rxfifo_cnt || (uart->dev->mem_rx_status.wr_addr != uart->dev->mem_rx_status.rd_addr)) {
|
||||||
|
c = uart->dev->fifo.rw_byte;
|
||||||
|
xQueueSend(uart->queue, &c, 0);
|
||||||
|
}
|
||||||
|
UART_MUTEX_UNLOCK();
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t uartRead(uart_t* uart)
|
uint8_t uartRead(uart_t* uart)
|
||||||
{
|
{
|
||||||
if(uart == NULL || uart->queue == NULL) {
|
if(uart == NULL || uart->queue == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint8_t c;
|
uint8_t c;
|
||||||
|
if ((uxQueueMessagesWaiting(uart->queue) == 0) && (uart->dev->status.rxfifo_cnt > 0))
|
||||||
|
{
|
||||||
|
uartRxFifoToQueue(uart);
|
||||||
|
}
|
||||||
if(xQueueReceive(uart->queue, &c, 0)) {
|
if(xQueueReceive(uart->queue, &c, 0)) {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@ -294,6 +314,10 @@ uint8_t uartPeek(uart_t* uart)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint8_t c;
|
uint8_t c;
|
||||||
|
if ((uxQueueMessagesWaiting(uart->queue) == 0) && (uart->dev->status.rxfifo_cnt > 0))
|
||||||
|
{
|
||||||
|
uartRxFifoToQueue(uart);
|
||||||
|
}
|
||||||
if(xQueuePeek(uart->queue, &c, 0)) {
|
if(xQueuePeek(uart->queue, &c, 0)) {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user