summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-12-12 09:26:51 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-12-13 11:36:37 +0100
commit73719950c03ab8e15a8f65a9ee96ad299e01d149 (patch)
treecb52725531bf6c97c815f15abf438c50eb46137f
parenttermios: Implement tcflush() (diff)
downloadrtems-73719950c03ab8e15a8f65a9ee96ad299e01d149.tar.bz2
bsp/lpc32xx: Fix console baud configuration
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/configure.ac23
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/console/console-config.c60
-rw-r--r--c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c29
3 files changed, 64 insertions, 48 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/configure.ac b/c/src/lib/libbsp/arm/lpc32xx/configure.ac
index 6af65292f1..06be1da217 100644
--- a/c/src/lib/libbsp/arm/lpc32xx/configure.ac
+++ b/c/src/lib/libbsp/arm/lpc32xx/configure.ac
@@ -43,24 +43,33 @@ RTEMS_BSPOPTS_HELP([LPC32XX_UART_1_BAUD],[baud for UART 1])
RTEMS_BSPOPTS_SET([LPC32XX_UART_2_BAUD],[*],[])
RTEMS_BSPOPTS_HELP([LPC32XX_UART_2_BAUD],[baud for UART 2])
+RTEMS_BSPOPTS_SET([LPC32XX_UART_3_BAUD],[*],[115200])
+RTEMS_BSPOPTS_HELP([LPC32XX_UART_3_BAUD],[baud for UART 3])
+
+RTEMS_BSPOPTS_SET([LPC32XX_UART_4_BAUD],[*],[115200])
+RTEMS_BSPOPTS_HELP([LPC32XX_UART_4_BAUD],[baud for UART 4])
+
+RTEMS_BSPOPTS_SET([LPC32XX_UART_5_BAUD],[*],[115200])
+RTEMS_BSPOPTS_HELP([LPC32XX_UART_5_BAUD],[baud for UART 5])
+
+RTEMS_BSPOPTS_SET([LPC32XX_UART_6_BAUD],[*],[115200])
+RTEMS_BSPOPTS_HELP([LPC32XX_UART_6_BAUD],[baud for UART 6])
+
RTEMS_BSPOPTS_SET([LPC32XX_UART_7_BAUD],[*],[])
RTEMS_BSPOPTS_HELP([LPC32XX_UART_7_BAUD],[baud for UART 7])
-RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U3CLK],[*],[])
+RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U3CLK],[*],[0x00001386])
RTEMS_BSPOPTS_HELP([LPC32XX_CONFIG_U3CLK],[clock configuration for UART 3])
-RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U4CLK],[*],[])
+RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U4CLK],[*],[0x00001386])
RTEMS_BSPOPTS_HELP([LPC32XX_CONFIG_U4CLK],[clock configuration for UART 4])
-RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U5CLK],[*],[0x00001386U])
+RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U5CLK],[*],[0x00001386])
RTEMS_BSPOPTS_HELP([LPC32XX_CONFIG_U5CLK],[clock configuration for UART 5])
-RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U6CLK],[*],[])
+RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_U6CLK],[*],[0x00001386])
RTEMS_BSPOPTS_HELP([LPC32XX_CONFIG_U6CLK],[clock configuration for UART 6])
-RTEMS_BSPOPTS_SET([LPC32XX_CONFIG_UART_CLKMODE],[*],[0x00000200U])
-RTEMS_BSPOPTS_HELP([LPC32XX_CONFIG_UART_CLKMODE],[clock mode configuration for UARTs])
-
RTEMS_BSPOPTS_SET([LPC32XX_DISABLE_MMU],[*],[])
RTEMS_BSPOPTS_HELP([LPC32XX_DISABLE_MMU],[disable MMU])
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 d70f93ecd8..2428697604 100644
--- a/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c
+++ b/c/src/lib/libbsp/arm/lpc32xx/console/console-config.c
@@ -42,10 +42,40 @@ static void lpc32xx_uart_set_register(uint32_t addr, uint8_t i, uint8_t val)
reg [i] = val;
}
+#ifdef LPC32XX_UART_3_BAUD
+ static bool lpc32xx_uart_probe_3(int minor)
+ {
+ LPC32XX_UARTCLK_CTRL |= 1U << 0;
+ LPC32XX_U3CLK = LPC32XX_CONFIG_U3CLK;
+
+ return true;
+ }
+#endif
+
+#ifdef LPC32XX_UART_4_BAUD
+ static bool lpc32xx_uart_probe_4(int minor)
+ {
+ LPC32XX_UARTCLK_CTRL |= 1U << 1;
+ LPC32XX_U4CLK = LPC32XX_CONFIG_U4CLK;
+
+ return true;
+ }
+#endif
+
+#ifdef LPC32XX_UART_6_BAUD
+ static bool lpc32xx_uart_probe_6(int minor)
+ {
+ LPC32XX_UARTCLK_CTRL |= 1U << 3;
+ LPC32XX_U6CLK = LPC32XX_CONFIG_U6CLK;
+
+ return true;
+ }
+#endif
+
/* FIXME: Console selection */
console_tbl Console_Configuration_Ports [] = {
- #ifdef LPC32XX_CONFIG_U5CLK
+ #ifdef LPC32XX_UART_5_BAUD
{
.sDeviceName = "/dev/ttyS5",
.deviceType = SERIAL_NS16550,
@@ -54,7 +84,7 @@ console_tbl Console_Configuration_Ports [] = {
.pDeviceFlow = NULL,
.ulMargin = 16,
.ulHysteresis = 8,
- .pDeviceParams = (void *) 1,
+ .pDeviceParams = (void *) LPC32XX_UART_5_BAUD,
.ulCtrlPort1 = LPC32XX_BASE_UART_5,
.ulCtrlPort2 = 0,
.ulDataPort = LPC32XX_BASE_UART_5,
@@ -62,20 +92,20 @@ console_tbl Console_Configuration_Ports [] = {
.setRegister = lpc32xx_uart_set_register,
.getData = NULL,
.setData = NULL,
- .ulClock = 16,
+ .ulClock = 16 * LPC32XX_UART_5_BAUD,
.ulIntVector = LPC32XX_IRQ_UART_5
},
#endif
- #ifdef LPC32XX_CONFIG_U3CLK
+ #ifdef LPC32XX_UART_3_BAUD
{
.sDeviceName = "/dev/ttyS3",
.deviceType = SERIAL_NS16550,
.pDeviceFns = &ns16550_fns,
- .deviceProbe = NULL,
+ .deviceProbe = lpc32xx_uart_probe_3,
.pDeviceFlow = NULL,
.ulMargin = 16,
.ulHysteresis = 8,
- .pDeviceParams = (void *) 1,
+ .pDeviceParams = (void *) LPC32XX_UART_3_BAUD,
.ulCtrlPort1 = LPC32XX_BASE_UART_3,
.ulCtrlPort2 = 0,
.ulDataPort = LPC32XX_BASE_UART_3,
@@ -83,20 +113,20 @@ console_tbl Console_Configuration_Ports [] = {
.setRegister = lpc32xx_uart_set_register,
.getData = NULL,
.setData = NULL,
- .ulClock = 16,
+ .ulClock = 16 * LPC32XX_UART_3_BAUD,
.ulIntVector = LPC32XX_IRQ_UART_3
},
#endif
- #ifdef LPC32XX_CONFIG_U4CLK
+ #ifdef LPC32XX_UART_4_BAUD
{
.sDeviceName = "/dev/ttyS4",
.deviceType = SERIAL_NS16550,
.pDeviceFns = &ns16550_fns,
- .deviceProbe = NULL,
+ .deviceProbe = lpc32xx_uart_probe_4,
.pDeviceFlow = NULL,
.ulMargin = 16,
.ulHysteresis = 8,
- .pDeviceParams = (void *) 1,
+ .pDeviceParams = (void *) LPC32XX_UART_4_BAUD,
.ulCtrlPort1 = LPC32XX_BASE_UART_4,
.ulCtrlPort2 = 0,
.ulDataPort = LPC32XX_BASE_UART_4,
@@ -104,20 +134,20 @@ console_tbl Console_Configuration_Ports [] = {
.setRegister = lpc32xx_uart_set_register,
.getData = NULL,
.setData = NULL,
- .ulClock = 16,
+ .ulClock = 16 * LPC32XX_UART_4_BAUD,
.ulIntVector = LPC32XX_IRQ_UART_4
},
#endif
- #ifdef LPC32XX_CONFIG_U6CLK
+ #ifdef LPC32XX_UART_6_BAUD
{
.sDeviceName = "/dev/ttyS6",
.deviceType = SERIAL_NS16550,
.pDeviceFns = &ns16550_fns,
- .deviceProbe = NULL,
+ .deviceProbe = lpc32xx_uart_probe_6,
.pDeviceFlow = NULL,
.ulMargin = 16,
.ulHysteresis = 8,
- .pDeviceParams = (void *) 1,
+ .pDeviceParams = (void *) LPC32XX_UART_6_BAUD,
.ulCtrlPort1 = LPC32XX_BASE_UART_6,
.ulCtrlPort2 = 0,
.ulDataPort = LPC32XX_BASE_UART_6,
@@ -125,7 +155,7 @@ console_tbl Console_Configuration_Ports [] = {
.setRegister = lpc32xx_uart_set_register,
.getData = NULL,
.setData = NULL,
- .ulClock = 16,
+ .ulClock = 16 * LPC32XX_UART_6_BAUD,
.ulIntVector = LPC32XX_IRQ_UART_6
},
#endif
diff --git a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c
index e1b79ebf90..21b49de53e 100644
--- a/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c
+++ b/c/src/lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c
@@ -263,35 +263,12 @@ static BSP_START_TEXT_SECTION void stop_dma_activities(void)
static BSP_START_TEXT_SECTION void setup_uarts(void)
{
- uint32_t uartclk_ctrl = 0;
-
- #ifdef LPC32XX_CONFIG_U3CLK
- uartclk_ctrl |= 1U << 0;
- LPC32XX_U3CLK = LPC32XX_CONFIG_U3CLK;
- #endif
- #ifdef LPC32XX_CONFIG_U4CLK
- uartclk_ctrl |= 1U << 1;
- LPC32XX_U4CLK = LPC32XX_CONFIG_U4CLK;
- #endif
- #ifdef LPC32XX_CONFIG_U5CLK
- uartclk_ctrl |= 1U << 2;
- LPC32XX_U5CLK = LPC32XX_CONFIG_U5CLK;
- #endif
- #ifdef LPC32XX_CONFIG_U6CLK
- uartclk_ctrl |= 1U << 3;
- LPC32XX_U6CLK = LPC32XX_CONFIG_U6CLK;
- #endif
-
- #ifdef LPC32XX_CONFIG_UART_CLKMODE
- LPC32XX_UART_CLKMODE = LPC32XX_CONFIG_UART_CLKMODE;
- #endif
-
- LPC32XX_UARTCLK_CTRL = uartclk_ctrl;
LPC32XX_UART_CTRL = 0x0;
LPC32XX_UART_LOOP = 0x0;
- #ifdef LPC32XX_CONFIG_U5CLK
- /* Clock is already set in LPC32XX_U5CLK */
+ #ifdef LPC32XX_UART_5_BAUD
+ LPC32XX_UARTCLK_CTRL |= 1U << 2;
+ LPC32XX_U5CLK = LPC32XX_CONFIG_U5CLK;
BSP_CONSOLE_UART_INIT(0x01);
#endif
}