From 741bfc22b199d42f9aff3b956cc39078fd009e0d Mon Sep 17 00:00:00 2001 From: Toyomasa Watarai Date: Tue, 11 Feb 2014 23:18:59 +0900 Subject: [PATCH] [LPC1549] Fixed GPIO Clean-up PinNames.h and GPIOrelated functions. --- .../hal/TARGET_NXP/TARGET_LPC15XX/PinNames.h | 20 +++++----- .../hal/TARGET_NXP/TARGET_LPC15XX/gpio_api.c | 22 +++-------- .../hal/TARGET_NXP/TARGET_LPC15XX/pinmap.c | 38 ++----------------- 3 files changed, 18 insertions(+), 62 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/PinNames.h b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/PinNames.h index 62a33dc1d6..04a8aef871 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/PinNames.h +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/PinNames.h @@ -27,26 +27,26 @@ typedef enum { PIN_OUTPUT } PinDirection; -#define PORT_SHIFT 5 - typedef enum { // LPC Pin Names P0_0 = 0, P0_1, P0_2, P0_3, P0_4, P0_5, P0_6, P0_7, P0_8, P0_9, P0_10, P0_11, P0_12, P0_13, P0_14, P0_15, P0_16, P0_17, P0_18, P0_19, P0_20, P0_21, P0_22, P0_23, P0_24, P0_25, P0_26, P0_27, P0_28, P0_29, P0_30, P0_31, P1_0, P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7, P1_8, P1_9, P1_10, P1_11, P1_12, P1_13, P1_14, P1_15, P1_16, P1_17, P1_18, P1_19, P1_20, P1_21, P1_22, P1_23, P1_24, P1_25, P1_26, P1_27, P1_28, P1_29, P1_30, P1_31, P2_0, P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7, P2_8, P2_9, P2_10, P2_11, P2_12, - + + LED_RED = P0_25, + LED_GREEN = P0_3, + LED_BLUE = P1_1, // mbed original LED naming - LED1 = P0_1, - LED2 = P0_3, - LED3 = P0_25, - LED4 = P0_25, - LED_RED = P0_2, + LED1 = LED_BLUE, + LED2 = LED_GREEN, + LED3 = LED_RED, + LED4 = LED_RED, // Serial to USB pins - USBTX = P0_4, - USBRX = P0_0, + USBTX = P0_18, + USBRX = P0_13, // Not connected NC = (int)0xFFFFFFFF, diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/gpio_api.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/gpio_api.c index 623cb2c68f..f974e782a5 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/gpio_api.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/gpio_api.c @@ -17,32 +17,20 @@ #include "pinmap.h" static int gpio_enabled = 0; + static void gpio_enable(void) { gpio_enabled = 1; - /* Enable AHB clock to the GPIO domain. */ - LPC_SYSCON->SYSAHBCLKCTRL0 |= (1<<14); - LPC_SYSCON->SYSAHBCLKCTRL0 |= (1<<15); - LPC_SYSCON->SYSAHBCLKCTRL0 |= (1<<16); - - /* Peripheral reset control to GPIO and GPIO INT, a "1" bring it out of reset. */ - LPC_SYSCON->PRESETCTRL0 &= ~(0x1<<14); - LPC_SYSCON->PRESETCTRL0 |= (0x1<<14); - LPC_SYSCON->PRESETCTRL0 &= ~(0x1<<15); - LPC_SYSCON->PRESETCTRL0 |= (0x1<<15); - LPC_SYSCON->PRESETCTRL0 &= ~(0x1<<16); - LPC_SYSCON->PRESETCTRL0 |= (0x1<<16); + /* Enable AHB clock to the GPIO0/1/2 and IOCON domain. */ + LPC_SYSCON->SYSAHBCLKCTRL0 |= (0xFUL << 13); } uint32_t gpio_set(PinName pin) { - int f = 0; if (!gpio_enabled) gpio_enable(); - pin_function(pin, f); - - return (1 << ((int)pin & 0x1F)); + return (1UL << ((int)pin & 0x1f)); } void gpio_init(gpio_t *obj, PinName pin, PinDirection direction) { @@ -51,7 +39,7 @@ void gpio_init(gpio_t *obj, PinName pin, PinDirection direction) { obj->pin = pin; obj->mask = gpio_set(pin); - unsigned int port = (unsigned int)pin >> PORT_SHIFT; + unsigned int port = (unsigned int)(pin >> 5); obj->reg_set = &LPC_GPIO_PORT->SET[port]; obj->reg_clr = &LPC_GPIO_PORT->CLR[port]; diff --git a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/pinmap.c b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/pinmap.c index 6d4d363aab..d39c6912dc 100644 --- a/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/pinmap.c +++ b/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC15XX/pinmap.c @@ -16,51 +16,19 @@ #include "pinmap.h" #include "error.h" -__IO uint32_t* IOCON_REGISTERS[76] = { - &LPC_IOCON->PIO0_0 , &LPC_IOCON->PIO0_1 , &LPC_IOCON->PIO0_2 , - &LPC_IOCON->PIO0_3 , &LPC_IOCON->PIO0_4 , &LPC_IOCON->PIO0_5 , - &LPC_IOCON->PIO0_6 , &LPC_IOCON->PIO0_7 , &LPC_IOCON->PIO0_8 , - &LPC_IOCON->PIO0_9 , &LPC_IOCON->PIO0_10, &LPC_IOCON->PIO0_11, - &LPC_IOCON->PIO0_12, &LPC_IOCON->PIO0_13, &LPC_IOCON->PIO0_14, - &LPC_IOCON->PIO0_15, &LPC_IOCON->PIO0_16, &LPC_IOCON->PIO0_17, - &LPC_IOCON->PIO0_18, &LPC_IOCON->PIO0_19, &LPC_IOCON->PIO0_20, - &LPC_IOCON->PIO0_21, &LPC_IOCON->PIO0_22, &LPC_IOCON->PIO0_23, - &LPC_IOCON->PIO0_24, &LPC_IOCON->PIO0_25, &LPC_IOCON->PIO0_26, - &LPC_IOCON->PIO0_27, &LPC_IOCON->PIO0_28, &LPC_IOCON->PIO0_29, - &LPC_IOCON->PIO0_30, &LPC_IOCON->PIO0_31, - - &LPC_IOCON->PIO1_0 , &LPC_IOCON->PIO1_1 , &LPC_IOCON->PIO1_2 , - &LPC_IOCON->PIO1_3 , &LPC_IOCON->PIO1_4 , &LPC_IOCON->PIO1_5 , - &LPC_IOCON->PIO1_6 , &LPC_IOCON->PIO1_7 , &LPC_IOCON->PIO1_8 , - &LPC_IOCON->PIO1_9 , &LPC_IOCON->PIO1_10, &LPC_IOCON->PIO1_11, - &LPC_IOCON->PIO1_12, &LPC_IOCON->PIO1_13, &LPC_IOCON->PIO1_14, - &LPC_IOCON->PIO1_15, &LPC_IOCON->PIO1_16, &LPC_IOCON->PIO1_17, - &LPC_IOCON->PIO1_18, &LPC_IOCON->PIO1_19, &LPC_IOCON->PIO1_20, - &LPC_IOCON->PIO1_21, &LPC_IOCON->PIO1_22, &LPC_IOCON->PIO1_23, - &LPC_IOCON->PIO1_24, &LPC_IOCON->PIO1_25, &LPC_IOCON->PIO1_26, - &LPC_IOCON->PIO1_27, &LPC_IOCON->PIO1_28, &LPC_IOCON->PIO1_29, - &LPC_IOCON->PIO1_30, &LPC_IOCON->PIO1_31, - - &LPC_IOCON->PIO2_0 , &LPC_IOCON->PIO2_1 , &LPC_IOCON->PIO2_2 , - &LPC_IOCON->PIO2_3 , &LPC_IOCON->PIO2_4 , &LPC_IOCON->PIO2_5 , - &LPC_IOCON->PIO2_6 , &LPC_IOCON->PIO2_7 , &LPC_IOCON->PIO2_8 , - &LPC_IOCON->PIO2_9 , &LPC_IOCON->PIO2_10, &LPC_IOCON->PIO2_11, -}; - void pin_function(PinName pin, int function) { - } void pin_mode(PinName pin, PinMode mode) { if (pin == (uint32_t)NC) { return; } - if ((pin == 22) || (pin == 23)) { + if ((pin == P0_22) || (pin == P0_23)) { // The true open-drain pins PIO0_22 and PIO0_23 can be configured for different I2C-bus speeds. return; } - __IO uint32_t *reg = IOCON_REGISTERS[pin]; - + __IO uint32_t *reg = (__IO uint32_t*)(LPC_IOCON_BASE + (pin * 4)); + if (mode == OpenDrain) { *reg |= (1 << 10); } else {