diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc32xx')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/Makefile.am | 1 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/console/console-config.c | 15 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/include/bsp.h | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h | 5 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/misc/idle-thread.c | 34 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c | 1 |
6 files changed, 58 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am index 09c385d25a..37a4793b39 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am +++ b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am @@ -137,6 +137,7 @@ libbsp_a_SOURCES += misc/restart.c libbsp_a_SOURCES += misc/system-clocks.c libbsp_a_SOURCES += misc/timer.c libbsp_a_SOURCES += misc/nand-select.c +libbsp_a_SOURCES += misc/idle-thread.c # SSP diff --git a/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c b/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c index 2428697604..738f5d86de 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c +++ b/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c @@ -28,14 +28,14 @@ extern console_fns lpc32xx_hsu_fns; -static uint8_t lpc32xx_uart_get_register(uint32_t addr, uint8_t i) +static uint8_t lpc32xx_uart_get_register(uintptr_t addr, uint8_t i) { volatile uint32_t *reg = (volatile uint32_t *) addr; return (uint8_t) reg [i]; } -static void lpc32xx_uart_set_register(uint32_t addr, uint8_t i, uint8_t val) +static void lpc32xx_uart_set_register(uintptr_t addr, uint8_t i, uint8_t val) { volatile uint32_t *reg = (volatile uint32_t *) addr; @@ -47,6 +47,7 @@ static void lpc32xx_uart_set_register(uint32_t addr, uint8_t i, uint8_t val) { LPC32XX_UARTCLK_CTRL |= 1U << 0; LPC32XX_U3CLK = LPC32XX_CONFIG_U3CLK; + LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 4, 5); return true; } @@ -55,8 +56,17 @@ static void lpc32xx_uart_set_register(uint32_t addr, uint8_t i, uint8_t val) #ifdef LPC32XX_UART_4_BAUD static bool lpc32xx_uart_probe_4(int minor) { + volatile lpc32xx_gpio *gpio = &lpc32xx.gpio; + + /* + * Set GPO_21/U4_TX/LCDVD[3] to U4_TX. This works only if LCD module is + * disabled. + */ + gpio->p2_mux_set = BSP_BIT32(2); + LPC32XX_UARTCLK_CTRL |= 1U << 1; LPC32XX_U4CLK = LPC32XX_CONFIG_U4CLK; + LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 6, 7); return true; } @@ -67,6 +77,7 @@ static void lpc32xx_uart_set_register(uint32_t addr, uint8_t i, uint8_t val) { LPC32XX_UARTCLK_CTRL |= 1U << 3; LPC32XX_U6CLK = LPC32XX_CONFIG_U6CLK; + LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 10, 11); return true; } diff --git a/c/src/lib/libbsp/arm/lpc32xx/include/bsp.h b/c/src/lib/libbsp/arm/lpc32xx/include/bsp.h index 5d9d18ac3b..5e6800f722 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/include/bsp.h +++ b/c/src/lib/libbsp/arm/lpc32xx/include/bsp.h @@ -149,6 +149,10 @@ void lpc32xx_select_nand_controller(lpc32xx_nand_controller nand_controller); void bsp_restart(void *addr); +void *bsp_idle_thread(uintptr_t arg); + +#define BSP_IDLE_TASK_BODY bsp_idle_thread + #define BSP_CONSOLE_UART_BASE LPC32XX_BASE_UART_5 /** diff --git a/c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h b/c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h index 12dbd792f6..3dc1dc0f3c 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h +++ b/c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h @@ -71,6 +71,11 @@ extern "C" { } #endif +static void lpc_eth_config_module_disable(void) +{ + LPC32XX_MAC_CLK_CTRL = 0; +} + #define LPC_ETH_CONFIG_USE_TRANSMIT_DMA static char *lpc_eth_config_alloc_table_area(size_t size) diff --git a/c/src/lib/libbsp/arm/lpc32xx/misc/idle-thread.c b/c/src/lib/libbsp/arm/lpc32xx/misc/idle-thread.c new file mode 100644 index 0000000000..0ac51c0f46 --- /dev/null +++ b/c/src/lib/libbsp/arm/lpc32xx/misc/idle-thread.c @@ -0,0 +1,34 @@ +/** + * @file + * + * @ingroup lpc32xx + * + * @brief bsp_idle_thread() implementation. + */ + +/* + * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#include <bsp.h> + +#include <libcpu/arm-cp15.h> + +void *bsp_idle_thread(uintptr_t arg) +{ + while (true) { + arm_cp15_wait_for_interrupt(); + } + + return NULL; +} diff --git a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c index 21b49de53e..acc24e9cc5 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c +++ b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c @@ -269,6 +269,7 @@ static BSP_START_TEXT_SECTION void setup_uarts(void) #ifdef LPC32XX_UART_5_BAUD LPC32XX_UARTCLK_CTRL |= 1U << 2; LPC32XX_U5CLK = LPC32XX_CONFIG_U5CLK; + LPC32XX_UART_CLKMODE = BSP_FLD32SET(LPC32XX_UART_CLKMODE, 0x2, 8, 9); BSP_CONSOLE_UART_INIT(0x01); #endif } |