From fd5b02f014799380671ce4d000055b4b1df60109 Mon Sep 17 00:00:00 2001 From: bcostm Date: Mon, 22 Sep 2014 10:03:50 +0200 Subject: [PATCH] [NUCLEO_F302R8] Fix issue with MBED_A7 test Add new STM_MODE_IT_EVT_RESET GPIO mode. --- .../targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/PinNames.h | 1 + .../hal/TARGET_STM/TARGET_NUCLEO_F302R8/gpio_irq_api.c | 6 +++--- .../targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/pinmap.c | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/PinNames.h b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/PinNames.h index 84576d7f88..996db9345d 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/PinNames.h +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/PinNames.h @@ -53,6 +53,7 @@ extern "C" { #define STM_MODE_EVT_RISING (9) #define STM_MODE_EVT_FALLING (10) #define STM_MODE_EVT_RISING_FALLING (11) +#define STM_MODE_IT_EVT_RESET (12) // High nibble = port number (0=A, 1=B, 2=C, 3=D, 4=E, 5=F, 6=G, 7=H) // Low nibble = pin number diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/gpio_irq_api.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/gpio_irq_api.c index 990f3baa05..a32e1f5f02 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/gpio_irq_api.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/gpio_irq_api.c @@ -204,7 +204,7 @@ void gpio_irq_free(gpio_irq_t *obj) void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) { - uint32_t mode = STM_MODE_INPUT; + uint32_t mode = STM_MODE_IT_EVT_RESET; uint32_t pull = GPIO_NOPULL; if (enable) { @@ -232,7 +232,7 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) mode = STM_MODE_IT_FALLING; obj->event = EDGE_FALL; } else { // NONE or RISE - mode = STM_MODE_INPUT; + mode = STM_MODE_IT_EVT_RESET; obj->event = EDGE_NONE; } } @@ -241,7 +241,7 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) mode = STM_MODE_IT_RISING; obj->event = EDGE_RISE; } else { // NONE or FALL - mode = STM_MODE_INPUT; + mode = STM_MODE_IT_EVT_RESET; obj->event = EDGE_NONE; } } diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/pinmap.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/pinmap.c index 5daa0d9ce0..0070028644 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/pinmap.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_F302R8/pinmap.c @@ -33,7 +33,7 @@ #include "mbed_error.h" // GPIO mode look-up table -static const uint32_t gpio_mode[12] = { +static const uint32_t gpio_mode[13] = { 0x00000000, // 0 = GPIO_MODE_INPUT 0x00000001, // 1 = GPIO_MODE_OUTPUT_PP 0x00000011, // 2 = GPIO_MODE_OUTPUT_OD @@ -45,7 +45,8 @@ static const uint32_t gpio_mode[12] = { 0x10310000, // 8 = GPIO_MODE_IT_RISING_FALLING 0x10120000, // 9 = GPIO_MODE_EVT_RISING 0x10220000, // 10 = GPIO_MODE_EVT_FALLING - 0x10320000 // 11 = GPIO_MODE_EVT_RISING_FALLING + 0x10320000, // 11 = GPIO_MODE_EVT_RISING_FALLING + 0x10000000 // 12 = Reset IT and EVT (not in STM32Cube HAL) }; // Enable GPIO clock and return GPIO base address