[U-Boot-Users] at91rm9200 serial frequency fix

michael trimarchi trimarchi at gandalf.sssup.it
Sun Aug 19 18:35:47 CEST 2007


Fix CD calcutation on serial device.

Signed-off-by: Trimarchi Michael <trimarchimichael at yahoo.it>
---

--- cpu/arm920t/at91rm9200/serial.c.orig	2007-08-19 19:26:23.000000000 +0200
+++ cpu/arm920t/at91rm9200/serial.c	2007-08-19 19:29:50.000000000 +0200
@@ -50,14 +50,18 @@ AT91PS_USART us = (AT91PS_USART) AT91C_B
 AT91PS_USART us = (AT91PS_USART) AT91C_BASE_US1;
 #endif
 
+#define BAUDRATE(mck, baud) \
+	((((mck) * 10) % ((baud) * 16)) >= 5) ? \
+	(mck / (baud * 16) + 1) : ((mck) / (baud * 16))
+
 void serial_setbrg (void)
 {
 	int baudrate;
 
 	if ((baudrate = gd->baudrate) <= 0)
 		baudrate = CONFIG_BAUDRATE;
-	/* MASTER_CLOCK/(16 * baudrate) */
-	us->US_BRGR = (AT91C_MASTER_CLOCK >> 4) / (unsigned)baudrate;
+
+	us->US_BRGR = BOUDRATE(AT91C_MASTER_CLOCK, (unsigned)baudrate);
 }
 
 int serial_init (void)




More information about the U-Boot mailing list