diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2012-04-19 15:21:25 +0200 |
---|---|---|
committer | Gedare Bloom <gedare@rtems.org> | 2012-04-19 13:28:06 -0400 |
commit | 5d48037f83479c6937983d6a423933931d305855 (patch) | |
tree | e91d50d5ccb93e7ec2f10763f9c15fde15a6ad4d | |
parent | LEON3: debugputs removed pointless isinit code, invoked only once (diff) | |
download | rtems-5d48037f83479c6937983d6a423933931d305855.tar.bz2 |
LEON3: added TX-wait-complete and CR on NL support for UART
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/console/console.c | 11 | ||||
-rw-r--r-- | 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 f286a6867c..0575468ffc 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 7058cf8c8e..080d4fad69 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); } /* |