[rtems commit] bsp/edb7312: Improve output char

Sebastian Huber sebh at rtems.org
Thu Mar 14 11:09:42 UTC 2013


Module:    rtems
Branch:    master
Commit:    c2015b44e576334971c5fc02905c50763829d0b3
Changeset: http://git.rtems.org/rtems/commit/?id=c2015b44e576334971c5fc02905c50763829d0b3

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Mar 14 11:54:31 2013 +0100

bsp/edb7312: Improve output char

The output char function used by printk() is now independent of the
console driver initialization.

---

 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 d71f4a1..72764ee 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)




More information about the vc mailing list