[rtems commit] bsp/lpc32xx: Fix console baud configuration

Sebastian Huber sebh at rtems.org
Thu Dec 13 10:33:37 UTC 2012


Module:    rtems
Branch:    master
Commit:    73719950c03ab8e15a8f65a9ee96ad299e01d149
Changeset: http://git.rtems.org/rtems/commit/?id=73719950c03ab8e15a8f65a9ee96ad299e01d149

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Dec 12 09:26:51 2012 +0100

bsp/lpc32xx: Fix console baud configuration

---

 c/src/lib/libbsp/arm/lpc32xx/configure.ac          |   23 +++++--
 .../libbsp/arm/lpc32xx/console/console-config.c    |   60 +++++++++++++++-----
 .../lib/libbsp/arm/lpc32xx/startup/bspstarthooks.c |   29 +---------
 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 6af6529..06be1da 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 d70f93e..2428697 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 e1b79eb..21b49de 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
 }




More information about the vc mailing list