Skip to content

Commit 93c67fb

Browse files
committed
nrf5 fix - gpioe pin was uninitialzied for new mode, should been uninitailzed for mode.
1 parent ff2a7db commit 93c67fb

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ int gpio_read(gpio_t *obj)
8686
}
8787
}
8888

89-
90-
static void gpio_apply_config(uint8_t pin)
89+
static void gpiote_pin_uninit(uint8_t pin)
9190
{
9291
if (m_gpio_initialized & (1UL << pin)) {
9392
if ((m_gpio_cfg[pin].direction == PIN_OUTPUT) && (!m_gpio_cfg[pin].used_as_irq)) {
@@ -97,7 +96,10 @@ static void gpio_apply_config(uint8_t pin)
9796
nrf_drv_gpiote_in_uninit(pin);
9897
}
9998
}
99+
}
100100

101+
static void gpio_apply_config(uint8_t pin)
102+
{
101103
if (m_gpio_cfg[pin].used_as_gpio || m_gpio_cfg[pin].used_as_irq) {
102104
if ((m_gpio_cfg[pin].direction == PIN_INPUT)
103105
|| (m_gpio_cfg[pin].used_as_irq)) {
@@ -147,6 +149,9 @@ static void gpio_apply_config(uint8_t pin)
147149
void gpio_mode(gpio_t *obj, PinMode mode)
148150
{
149151
MBED_ASSERT(obj->pin <= GPIO_PIN_COUNT);
152+
153+
gpiote_pin_uninit(obj->pin); // try to uninitialize gpio before a change.
154+
150155
m_gpio_cfg[obj->pin].pull = mode;
151156
gpio_apply_config(obj->pin);
152157
}
@@ -155,6 +160,9 @@ void gpio_mode(gpio_t *obj, PinMode mode)
155160
void gpio_dir(gpio_t *obj, PinDirection direction)
156161
{
157162
MBED_ASSERT(obj->pin <= GPIO_PIN_COUNT);
163+
164+
gpiote_pin_uninit(obj->pin); // try to uninitialize gpio before a change.
165+
158166
m_gpio_cfg[obj->pin].direction = direction;
159167
gpio_apply_config(obj->pin);
160168
}
@@ -172,6 +180,8 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32
172180
MBED_ASSERT((uint32_t)pin < GPIO_PIN_COUNT);
173181
(void) nrf_drv_gpiote_init();
174182

183+
gpiote_pin_uninit(pin); // try to uninitialize gpio before a change.
184+
175185
m_gpio_cfg[pin].used_as_irq = true;
176186
m_channel_ids[pin] = id;
177187
obj->ch = pin;

0 commit comments

Comments
 (0)