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/uart.c | |
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/uart.c')
-rw-r--r-- | c/src/lib/libbsp/arm/lm3s69xx/console/uart.c | 28 |
1 files changed, 28 insertions, 0 deletions
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; } |