|
@@ -49,17 +49,26 @@ int serial_init(void)
|
|
|
{
|
|
|
atmel_usart3_t *usart = (atmel_usart3_t *)CONFIG_USART_BASE;
|
|
|
|
|
|
+ /*
|
|
|
+ * Just in case: drain transmitter register
|
|
|
+ * 1000us is enough for baudrate >= 9600
|
|
|
+ */
|
|
|
+ if (!(readl(&usart->csr) & USART3_BIT(TXEMPTY)))
|
|
|
+ __udelay(1000);
|
|
|
+
|
|
|
writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), &usart->cr);
|
|
|
|
|
|
serial_setbrg();
|
|
|
|
|
|
- writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);
|
|
|
writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
|
|
|
| USART3_BF(USCLKS, USART3_USCLKS_MCK)
|
|
|
| USART3_BF(CHRL, USART3_CHRL_8)
|
|
|
| USART3_BF(PAR, USART3_PAR_NONE)
|
|
|
| USART3_BF(NBSTOP, USART3_NBSTOP_1)),
|
|
|
&usart->mr);
|
|
|
+ writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);
|
|
|
+ /* 100us is enough for the new settings to be settled */
|
|
|
+ __udelay(100);
|
|
|
|
|
|
return 0;
|
|
|
}
|