rt-thread
rt-thread copied to clipboard
[Bug] [bsp/cvitek] uart configure cannot be called again
RT-Thread Version
755cde372cb224bba0945e3834b4cda1ead18681
Hardware Type/Architectures
cvitek
Develop Toolchain
GCC
Describe the bug
in file rt-thread/bsp/cvitek/drivers/drv_uart.c
static rt_err_t dw8250_uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
{
rt_base_t base;
struct hw_uart_device *uart;
int clock_divisor;
RT_ASSERT(serial != RT_NULL);
uart = (struct hw_uart_device *)serial->parent.user_data;
base = uart->hw_base;
while (!(dw8250_read32(base, UART_LSR) & UART_LSR_TEMT));
dw8250_write32(base, UART_IER, 0);
dw8250_write32(base, UART_MCR, UART_MCRVAL);
dw8250_write32(base, UART_FCR, UART_FCR_DEFVAL);
/* initialize serial config to 8N1 before writing baudrate */
dw8250_write32(base, UART_LCR, UART_LCR_8N1);
clock_divisor = DIV_ROUND_CLOSEST(UART_INPUT_CLK, 16 * serial->config.baud_rate);
dw8250_uart_setbrg(base, clock_divisor);
return RT_EOK;
}
After first called from uart open, this API cannot be called again. Otherwise, this will mess up the device, and uart will not act properly to interrupt again.
Other additional context
No response
@unicornx