summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-03-14 11:54:31 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-03-14 12:14:44 +0100
commitc2015b44e576334971c5fc02905c50763829d0b3 (patch)
tree0d97d6173cc306920533366ddb21f17f9fdf76a4 /c
parentbsp/edb7312: Fix warnings (diff)
downloadrtems-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')
-rw-r--r--c/src/lib/libbsp/arm/edb7312/console/uart.c31
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)