[rtems commit] bsp/lpc24xx: Evaluate LPC17XX pin type

Sebastian Huber sebh at rtems.org
Fri Oct 12 13:38:00 UTC 2012


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Oct 12 10:04:28 2012 +0200

bsp/lpc24xx: Evaluate LPC17XX pin type

New pin type LPC17XX_PIN_TYPE_OPEN_DRAIN.

---

 c/src/lib/libbsp/arm/lpc24xx/include/io.h |    9 ++++++---
 c/src/lib/libbsp/arm/lpc24xx/misc/io.c    |   15 ++++++++++++++-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/io.h b/c/src/lib/libbsp/arm/lpc24xx/include/io.h
index f77b447..497d4a7 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/include/io.h
+++ b/c/src/lib/libbsp/arm/lpc24xx/include/io.h
@@ -240,7 +240,8 @@ typedef enum {
   LPC17XX_PIN_TYPE_ADC,
   LPC17XX_PIN_TYPE_DAC,
   LPC17XX_PIN_TYPE_I2C,
-  LPC17XX_PIN_TYPE_I2C_FAST_PLUS
+  LPC17XX_PIN_TYPE_I2C_FAST_PLUS,
+  LPC17XX_PIN_TYPE_OPEN_DRAIN
 } lpc17xx_pin_type;
 
 #ifdef ARM_MULTILIB_ARCH_V4
@@ -1102,8 +1103,10 @@ rtems_status_code lpc24xx_pin_config(
   LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2)
 #define LPC24XX_PIN_USB_SCL_1\
   LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1)
-#define LPC24XX_PIN_USB_SDA_1\
-  LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 1)
+#define LPC24XX_PIN_USB_SDA_1 \
+  LPC24XX_PIN_WITH_TYPE( \
+    1, 29, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_OPEN_DRAIN \
+  )
 #define LPC24XX_PIN_USB_CONNECT_1\
   LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1)
 
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
index b16615e..ddf7ce3 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
+++ b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
@@ -394,8 +394,21 @@ lpc24xx_pin_set_function(
     *pinsel = (*pinsel & ~pinsel_mask) | pinsel_value;
     rtems_interrupt_enable(level);
   #else
+    uint32_t iocon_extra = 0;
+
     /* TODO */
-    *iocon = IOCON_FUNC(pin_range.fields.function);
+    switch (pin_range.fields.type) {
+      case LPC17XX_PIN_TYPE_I2C_FAST_PLUS:
+        iocon_extra |= IOCON_HS;
+        break;
+      case LPC17XX_PIN_TYPE_OPEN_DRAIN:
+        iocon_extra |= IOCON_OD;
+        break;
+      default:
+        break;
+    }
+
+    *iocon = IOCON_FUNC(pin_range.fields.function) | iocon_extra;
   #endif
 
   return RTEMS_SUCCESSFUL;




More information about the vc mailing list