[rtems commit] LEON3: added TX-wait-complete and CR on NL support for UART

Gedare Bloom gedare at rtems.org
Thu Apr 19 17:25:53 UTC 2012


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

Author:    Daniel Hellstrom <daniel at gaisler.com>
Date:      Thu Apr 19 15:21:25 2012 +0200

LEON3: added TX-wait-complete and CR on NL support for UART

Signed-off-by: Daniel Hellstrom <daniel at gaisler.com>

---

 c/src/lib/libbsp/sparc/leon3/console/console.c   |   11 +++++++----
 c/src/lib/libbsp/sparc/leon3/console/debugputs.c |   18 ++++++++++++++++--
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c
index f286a68..0575468 100644
--- a/c/src/lib/libbsp/sparc/leon3/console/console.c
+++ b/c/src/lib/libbsp/sparc/leon3/console/console.c
@@ -50,8 +50,11 @@ int syscon_uart_index __attribute__((weak)) = 0;
 
 extern void apbuart_outbyte_polled(
   ambapp_apb_uart *regs,
-  char ch
-);
+  unsigned char ch,
+  int do_cr_on_newline,
+  int wait_sent
+  );
+
 
 /* body is in debugputs.c */
 
@@ -156,7 +159,7 @@ ssize_t console_write_polled(int minor, const char *buf, size_t len)
     port = minor - 1;
 
   while (nwrite < len) {
-    apbuart_outbyte_polled(apbuarts[port].regs, *buf++);
+    apbuart_outbyte_polled(apbuarts[port].regs, *buf++, 1, 0);
     nwrite++;
   }
   return nwrite;
@@ -323,7 +326,7 @@ rtems_device_driver console_initialize(
    * On a MP system one should not open UARTs that other OS instances use.
    */
   if (syscon_uart_index < uarts) {
-    status = rtems_io_register_name( "/dev/console", major, 0 );
+    status = rtems_io_register_name("/dev/console", major, 0);
     if (status != RTEMS_SUCCESSFUL)
       rtems_fatal_error_occurred(status);
   }
diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
index 7058cf8..080d4fa 100644
--- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
+++ b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
@@ -89,9 +89,12 @@ int bsp_debug_uart_init(void)
  */
 void apbuart_outbyte_polled(
   ambapp_apb_uart *regs,
-  unsigned char ch
+  unsigned char ch,
+  int do_cr_on_newline,
+  int wait_sent
 )
 {
+send:
   while ( (regs->status & LEON_REG_UART_STATUS_THE) == 0 ) {
     /* Lower bus utilization while waiting for UART */
     asm volatile ("nop"::); asm volatile ("nop"::);
@@ -100,6 +103,17 @@ void apbuart_outbyte_polled(
     asm volatile ("nop"::); asm volatile ("nop"::);
   }
   regs->data = (unsigned int) ch;
+
+  if ((ch == '\n') && do_cr_on_newline) {
+    ch = '\r';
+    goto send;
+  }
+
+  /* Wait until the character has been sent? */
+  if (wait_sent) {
+    while ((regs->status & LEON_REG_UART_STATUS_THE) == 0)
+      ;
+  }
 }
 
 /*
@@ -129,7 +143,7 @@ static void bsp_out_char(char c)
     return;
   }
 
-  apbuart_outbyte_polled(dbg_uart, c);
+  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
 }
 
 /*




More information about the vc mailing list