diff options
author | Eugeniy Meshcheryakov <eugen@debian.org> | 2013-04-26 11:03:59 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-04-26 11:03:59 +0200 |
commit | f22bba3cb43182374bbddfad4e28545f89bd14ed (patch) | |
tree | d19f5e147e3b3adf8c75782c676a25f804fb9ca5 /c/src/lib/libbsp/arm/lm3s69xx/console | |
parent | libcsupport: Delete libc_wrapup() (diff) | |
download | rtems-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.c | 13 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lm3s69xx/console/uart.c | 28 |
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; } |