summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc32xx
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc32xx')
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/Makefile.am1
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/console/console-config.c15
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/include/bsp.h4
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/include/lpc-ethernet-config.h5
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/misc/idle-thread.c34
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c1
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
}