diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-03-14 11:54:31 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-03-14 12:14:44 +0100 |
commit | c2015b44e576334971c5fc02905c50763829d0b3 (patch) | |
tree | 0d97d6173cc306920533366ddb21f17f9fdf76a4 /c/src/lib/libbsp/arm/edb7312 | |
parent | bsp/edb7312: Fix warnings (diff) | |
download | rtems-c2015b44e576334971c5fc02905c50763829d0b3.tar.bz2 |
bsp/edb7312: Improve output char
The output char function used by printk() is now independent of the
console driver initialization.
Diffstat (limited to 'c/src/lib/libbsp/arm/edb7312')
-rw-r--r-- | c/src/lib/libbsp/arm/edb7312/console/uart.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/c/src/lib/libbsp/arm/edb7312/console/uart.c b/c/src/lib/libbsp/arm/edb7312/console/uart.c index d71f4a198e..72764eef73 100644 --- a/c/src/lib/libbsp/arm/edb7312/console/uart.c +++ b/c/src/lib/libbsp/arm/edb7312/console/uart.c @@ -101,29 +101,38 @@ int uart_poll_read(int minor) return c; } -static ssize_t uart_write(int minor, const char *buf, size_t len) +static ssize_t uart_do_write( + volatile uint32_t *uartdr, + const char *buf, + size_t len, + volatile uint32_t *sysflg +) { - volatile uint32_t *data_reg; - volatile uint32_t *ctrl_reg2; size_t i; - char c; - - data_reg = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort; - ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2; for (i = 0; i < len; i++) { /* Wait for fifo to have room */ - while ((*ctrl_reg2 & EP7312_UART_UTXFF1) != 0) { + while ((*sysflg & EP7312_UART_UTXFF1) != 0) { continue; } - c = (char) buf[i]; - *data_reg = c; + *uartdr = buf[i]; } return len; } +static ssize_t uart_write(int minor, const char *buf, size_t len) +{ + volatile uint32_t *data_reg; + volatile uint32_t *ctrl_reg2; + + data_reg = (uint32_t *)Console_Port_Tbl[minor]->ulDataPort; + ctrl_reg2 = (uint32_t *)Console_Port_Tbl[minor]->ulCtrlPort2; + + return uart_do_write(data_reg, buf, len, ctrl_reg2); +} + static void uart_init(int minor) { volatile uint32_t *ctrl_reg1; @@ -147,7 +156,7 @@ static void uart_init(int minor) */ static void _BSP_null_char(char c) { - uart_write_polled(0, c); + uart_do_write(EP7312_UARTDR1, &c, 1, EP7312_SYSFLG1); } static int _BSP_get_char(void) |