mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-23 02:16:41 +00:00
bdk: uart: use 2 STOP bits based on baudrate
This commit is contained in:
parent
b56e788d12
commit
87fe374b3b
1 changed files with 5 additions and 2 deletions
|
@ -34,14 +34,17 @@ void uart_init(u32 idx, u32 baud, u32 mode)
|
||||||
// Set clock.
|
// Set clock.
|
||||||
bool clk_type = clock_uart_use_src_div(idx, baud);
|
bool clk_type = clock_uart_use_src_div(idx, baud);
|
||||||
|
|
||||||
|
// 2 STOP bits for rates > 1M. (Reduced efficiency but less errors on high baudrates).
|
||||||
|
u32 uart_lcr_stop = baud > 1000000 ? UART_LCR_STOP : 0;
|
||||||
|
|
||||||
// Misc settings.
|
// Misc settings.
|
||||||
u32 div = clk_type ? ((8 * baud + 408000000) / (16 * baud)) : 1; // DIV_ROUND_CLOSEST.
|
u32 div = clk_type ? ((8 * baud + 408000000) / (16 * baud)) : 1; // DIV_ROUND_CLOSEST.
|
||||||
uart->UART_IER_DLAB = 0; // Disable interrupts.
|
uart->UART_IER_DLAB = 0; // Disable interrupts.
|
||||||
uart->UART_LCR = UART_LCR_DLAB | UART_LCR_WORD_LENGTH_8; // Enable DLAB & set 8n1 mode.
|
uart->UART_LCR = UART_LCR_DLAB | UART_LCR_WORD_LENGTH_8; // Enable DLAB & set 8n1 mode.
|
||||||
uart->UART_THR_DLAB = (u8)div; // Divisor latch LSB.
|
uart->UART_THR_DLAB = (u8)div; // Divisor latch LSB.
|
||||||
uart->UART_IER_DLAB = (u8)(div >> 8); // Divisor latch MSB.
|
uart->UART_IER_DLAB = (u8)(div >> 8); // Divisor latch MSB.
|
||||||
// Disable DLAB and set 2 STOP bits (reduced efficiency but less errors on high baudrates).
|
// Disable DLAB and set STOP bits setting if applicable.
|
||||||
uart->UART_LCR = UART_LCR_STOP | UART_LCR_WORD_LENGTH_8;
|
uart->UART_LCR = uart_lcr_stop | UART_LCR_WORD_LENGTH_8;
|
||||||
(void)uart->UART_SPR;
|
(void)uart->UART_SPR;
|
||||||
|
|
||||||
// Setup and flush fifo.
|
// Setup and flush fifo.
|
||||||
|
|
Loading…
Reference in a new issue