mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-08-18 20:48:41 +08:00
[BSP] [NS800RT7P65]Feature/optimize ns800 uart Drive (#11423)
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
[ns800] Option Uart Kconfig, and Resolve the issue of data loss in serial communication at low baud rates.
This commit is contained in:
@@ -46,6 +46,29 @@
|
||||
#define NS800_UART_DEFAULT_TX_TIMEOUT BSP_NS800_UART_TX_TIMEOUT
|
||||
#endif
|
||||
|
||||
/* Default UART configuration from Kconfig */
|
||||
#ifndef BSP_UART_DEFAULT_BAUDRATE
|
||||
#define BSP_UART_DEFAULT_BAUDRATE 115200
|
||||
#endif
|
||||
|
||||
/* Data bits mapping */
|
||||
#if defined(BSP_UART_DATABITS_7)
|
||||
#define NS800_UART_DEFAULT_DATA_BITS DATA_BITS_7
|
||||
#elif defined(BSP_UART_DATABITS_8)
|
||||
#define NS800_UART_DEFAULT_DATA_BITS DATA_BITS_8
|
||||
#elif defined(BSP_UART_DATABITS_9)
|
||||
#define NS800_UART_DEFAULT_DATA_BITS DATA_BITS_9
|
||||
#else
|
||||
#define NS800_UART_DEFAULT_DATA_BITS DATA_BITS_8
|
||||
#endif
|
||||
|
||||
/* Stop bits mapping */
|
||||
#ifdef BSP_UART_STOPBITS_2
|
||||
#define NS800_UART_DEFAULT_STOP_BITS STOP_BITS_2
|
||||
#else
|
||||
#define NS800_UART_DEFAULT_STOP_BITS STOP_BITS_1
|
||||
#endif
|
||||
|
||||
enum
|
||||
{
|
||||
#ifdef BSP_USING_UART1
|
||||
@@ -377,31 +400,48 @@ static rt_err_t ns800_control(struct rt_serial_device *serial, int cmd, void *ar
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static rt_err_t ns800_wait_tx_space(struct ns800_uart *uart, rt_uint32_t timeout_ms)
|
||||
{
|
||||
rt_tick_t start_tick;
|
||||
rt_tick_t timeout_tick;
|
||||
|
||||
RT_ASSERT(uart != RT_NULL);
|
||||
|
||||
if (UART_isSpaceAvailable(uart->handle.Instance))
|
||||
{
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
timeout_tick = rt_tick_from_millisecond(timeout_ms);
|
||||
start_tick = rt_tick_get();
|
||||
|
||||
while (!UART_isSpaceAvailable(uart->handle.Instance))
|
||||
{
|
||||
if ((rt_tick_get() - start_tick) > timeout_tick)
|
||||
{
|
||||
return -RT_ETIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static int ns800_putc(struct rt_serial_device *serial, char c)
|
||||
{
|
||||
struct ns800_uart *uart;
|
||||
rt_uint32_t block_timeout;
|
||||
rt_err_t result;
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
|
||||
uart = rt_container_of(serial, struct ns800_uart, serial);
|
||||
block_timeout = uart->tx_block_timeout;
|
||||
|
||||
while (!UART_isSpaceAvailable(uart->handle.Instance))
|
||||
result = ns800_wait_tx_space(uart, uart->tx_block_timeout);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
if (block_timeout-- == 0U)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
UART_writeChar(uart->handle.Instance, (rt_uint8_t)c);
|
||||
|
||||
while ((uart->handle.Instance->STAT.BIT.TC == false) && (--block_timeout != 0U))
|
||||
{
|
||||
}
|
||||
|
||||
return (block_timeout != 0U) ? 1 : -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ns800_getc(struct rt_serial_device *serial)
|
||||
@@ -489,6 +529,11 @@ static void ns800_uart_fill_default_config(struct serial_configure *config,
|
||||
|
||||
*config = (struct serial_configure)RT_SERIAL_CONFIG_DEFAULT;
|
||||
|
||||
/* Override with Kconfig settings */
|
||||
config->baud_rate = BSP_UART_DEFAULT_BAUDRATE;
|
||||
config->data_bits = NS800_UART_DEFAULT_DATA_BITS;
|
||||
config->stop_bits = NS800_UART_DEFAULT_STOP_BITS;
|
||||
|
||||
#ifdef RT_USING_SERIAL_V2
|
||||
config->rx_bufsz = hw->rx_bufsz;
|
||||
config->tx_bufsz = hw->tx_bufsz;
|
||||
|
||||
@@ -20,6 +20,32 @@ menu "On-chip Peripheral Drivers"
|
||||
default 6000
|
||||
depends on !RT_USING_SERIAL_V2
|
||||
|
||||
config BSP_UART_DEFAULT_BAUDRATE
|
||||
int "UART default baudrate"
|
||||
default 115200
|
||||
help
|
||||
Default baudrate for all UART ports.
|
||||
|
||||
choice BSP_UART_DEFAULT_DATABITS
|
||||
prompt "UART default data bits"
|
||||
default BSP_UART_DATABITS_8
|
||||
config BSP_UART_DATABITS_7
|
||||
bool "7 bits"
|
||||
config BSP_UART_DATABITS_8
|
||||
bool "8 bits"
|
||||
config BSP_UART_DATABITS_9
|
||||
bool "9 bits"
|
||||
endchoice
|
||||
|
||||
choice BSP_UART_DEFAULT_STOPBITS
|
||||
prompt "UART default stop bits"
|
||||
default BSP_UART_STOPBITS_1
|
||||
config BSP_UART_STOPBITS_1
|
||||
bool "1 bit"
|
||||
config BSP_UART_STOPBITS_2
|
||||
bool "2 bits"
|
||||
endchoice
|
||||
|
||||
menuconfig BSP_USING_UART1
|
||||
bool "Enable UART1"
|
||||
default y
|
||||
|
||||
Reference in New Issue
Block a user