rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

[Bug] [bsp/cvitek] uart configure cannot be called again

Open polarvid opened this issue 1 year ago • 1 comments

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

polarvid avatar Jul 08 '24 07:07 polarvid

@unicornx

Solonix-Chu avatar Jul 29 '24 06:07 Solonix-Chu