summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lm3s69xx/console
diff options
context:
space:
mode:
authorEugeniy Meshcheryakov <eugen@debian.org>2013-04-26 11:03:59 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-04-26 11:03:59 +0200
commitf22bba3cb43182374bbddfad4e28545f89bd14ed (patch)
treed19f5e147e3b3adf8c75782c676a25f804fb9ca5 /c/src/lib/libbsp/arm/lm3s69xx/console
parentlibcsupport: Delete libc_wrapup() (diff)
downloadrtems-f22bba3cb43182374bbddfad4e28545f89bd14ed.tar.bz2
bsp/lm3s69xx: New BSP variants
Add support for LM3S3749.
Diffstat (limited to 'c/src/lib/libbsp/arm/lm3s69xx/console')
-rw-r--r--c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c13
-rw-r--r--c/src/lib/libbsp/arm/lm3s69xx/console/uart.c28
2 files changed, 37 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c b/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c
index e0c79b8090..474c02a92c 100644
--- a/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c
+++ b/c/src/lib/libbsp/arm/lm3s69xx/console/console-config.c
@@ -1,4 +1,6 @@
/*
+ * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
+ *
* Copyright (c) 2011 Sebastian Huber. All rights reserved.
*
* embedded brains GmbH
@@ -29,7 +31,8 @@ console_tbl Console_Configuration_Ports [] = {
.pDeviceFns = &lm3s69xx_uart_fns,
.ulCtrlPort1 = LM3S69XX_UART_0_BASE,
.ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_0
+ .ulIntVector = LM3S69XX_IRQ_UART_0,
+ .pDeviceParams = (void *)0
},
#endif
#ifdef LM3S69XX_ENABLE_UART_1
@@ -39,7 +42,8 @@ console_tbl Console_Configuration_Ports [] = {
.pDeviceFns = &lm3s69xx_uart_fns,
.ulCtrlPort1 = LM3S69XX_UART_1_BASE,
.ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_1
+ .ulIntVector = LM3S69XX_IRQ_UART_1,
+ .pDeviceParams = (void *)1
}
#endif
#ifdef LM3S69XX_ENABLE_UART_2
@@ -49,7 +53,8 @@ console_tbl Console_Configuration_Ports [] = {
.pDeviceFns = &lm3s69xx_uart_fns,
.ulCtrlPort1 = LM3S69XX_UART_2_BASE,
.ulClock = LM3S69XX_UART_BAUD,
- .ulIntVector = LM3S69XX_IRQ_UART_2
+ .ulIntVector = LM3S69XX_IRQ_UART_2,
+ .pDeviceParams = (void *)2
}
#endif
};
@@ -64,7 +69,7 @@ static void output_char(char c)
{
const console_fns *con =
Console_Configuration_Ports [Console_Port_Minor].pDeviceFns;
-
+
if (c == '\n') {
con->deviceWritePolled((int) Console_Port_Minor, '\r');
}
diff --git a/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c b/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c
index cc51c83c47..4d916662c2 100644
--- a/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c
+++ b/c/src/lib/libbsp/arm/lm3s69xx/console/uart.c
@@ -1,4 +1,6 @@
/*
+ * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
+ *
* Copyright (c) 2011 Sebastian Huber. All rights reserved.
*
* embedded brains GmbH
@@ -15,6 +17,8 @@
#include <bspopts.h>
#include <bsp/uart.h>
#include <libchip/sersupp.h>
+#include <bsp/syscon.h>
+#include <bsp/lm3s69xx.h>
static volatile lm3s69xx_uart *get_uart_regs(int minor)
{
@@ -23,11 +27,35 @@ static volatile lm3s69xx_uart *get_uart_regs(int minor)
return (lm3s69xx_uart *) ct->ulCtrlPort1;
}
+static unsigned int get_uart_number(int minor)
+{
+ console_tbl *ct = Console_Port_Tbl [minor];
+
+ return (unsigned int)ct->pDeviceParams;
+}
+
+/*
+ * Returns both integer and fractional parts as one number.
+ */
+static uint32_t get_baud_div(uint32_t baud)
+{
+ uint32_t clock4 = LM3S69XX_SYSTEM_CLOCK * 4;
+ return (clock4 + baud - 1) / baud;
+}
+
static void initialize(int minor)
{
volatile lm3s69xx_uart *uart = get_uart_regs(minor);
+ unsigned int num = get_uart_number(minor);
+
+ lm3s69xx_syscon_enable_uart_clock(num, true);
uart->ctl = 0;
+
+ uint32_t brd = get_baud_div(LM3S69XX_UART_BAUD);
+ uart->ibrd = brd / 64;
+ uart->fbrd = brd % 64;
+
uart->lcrh = UARTLCRH_WLEN(0x3) | UARTLCRH_FEN;
uart->ctl = UARTCTL_RXE | UARTCTL_TXE | UARTCTL_UARTEN;
}