diff options
author | Gary Jennejohn <garyj@pollux.denx.de> | 2007-01-24 12:16:56 +0100 |
---|---|---|
committer | Gary Jennejohn <garyj@pollux.denx.de> | 2007-01-24 12:16:56 +0100 |
commit | 6bd2447ee47ee23c18d2b3c7ccd5a20f7626f5b3 (patch) | |
tree | b002914fc995346cb06a8f79dbb100c5e9164cd6 /cpu/arm720t/serial.c | |
parent | b78bb469f536b357ee21c54f40201dbe4b201ac3 (diff) | |
download | u-boot-imx-6bd2447ee47ee23c18d2b3c7ccd5a20f7626f5b3.zip u-boot-imx-6bd2447ee47ee23c18d2b3c7ccd5a20f7626f5b3.tar.gz u-boot-imx-6bd2447ee47ee23c18d2b3c7ccd5a20f7626f5b3.tar.bz2 |
Add port for the lpc2292sodimm evaluation board from EmbeddedArtists
Diffstat (limited to 'cpu/arm720t/serial.c')
-rw-r--r-- | cpu/arm720t/serial.c | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/cpu/arm720t/serial.c b/cpu/arm720t/serial.c index 054bab9..15c54af 100644 --- a/cpu/arm720t/serial.c +++ b/cpu/arm720t/serial.c @@ -123,4 +123,80 @@ serial_puts (const char *s) } } -#endif /* defined(CONFIG_IMPA7) || defined(CONFIG_EP7312) */ +#elif defined(CONFIG_LPC2292) + +#include <asm/arch/hardware.h> + +void serial_setbrg (void) +{ + DECLARE_GLOBAL_DATA_PTR; + + unsigned short divisor = 0; + + switch (gd->baudrate) { + case 1200: divisor = 3072; break; + case 9600: divisor = 384; break; + case 19200: divisor = 192; break; + case 38400: divisor = 96; break; + case 57600: divisor = 64; break; + case 115200: divisor = 32; break; + default: hang (); break; + } + + /* init serial UART0 */ + PUT8(U0LCR, 0); + PUT8(U0IER, 0); + PUT8(U0LCR, 0x80); /* DLAB=1 */ + PUT8(U0DLL, (unsigned char)(divisor & 0x00FF)); + PUT8(U0DLM, (unsigned char)(divisor >> 8)); + PUT8(U0LCR, 0x03); /* 8N1, DLAB=0 */ + PUT8(U0FCR, 1); /* Enable RX and TX FIFOs */ +} + +int serial_init (void) +{ + unsigned long pinsel0; + + serial_setbrg (); + + pinsel0 = GET32(PINSEL0); + pinsel0 &= ~(0x00000003); + pinsel0 |= 5; + PUT32(PINSEL0, pinsel0); + + return (0); +} + +void serial_putc (const char c) +{ + if (c == '\n') + { + while((GET8(U0LSR) & (1<<5)) == 0); /* Wait for empty U0THR */ + PUT8(U0THR, '\r'); + } + + while((GET8(U0LSR) & (1<<5)) == 0); /* Wait for empty U0THR */ + PUT8(U0THR, c); +} + +int serial_getc (void) +{ + while((GET8(U0LSR) & 1) == 0); + return GET8(U0RBR); +} + +void +serial_puts (const char *s) +{ + while (*s) { + serial_putc (*s++); + } +} + +/* Test if there is a byte to read */ +int serial_tstc (void) +{ + return (GET8(U0LSR) & 1); +} + +#endif |