From 6040531ae1a3d6b50f961ac05d98df29b17b1637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Amk=C3=A6r=20S=C3=B8rensen?= Date: Thu, 15 Oct 2015 09:10:29 +0200 Subject: [PATCH] cpu/atmega2560: fixes the configuration of pullup resistors in gpio.c --- cpu/atmega2560/periph/gpio.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/cpu/atmega2560/periph/gpio.c b/cpu/atmega2560/periph/gpio.c index 36921d30fc..e8dde7e0fd 100644 --- a/cpu/atmega2560/periph/gpio.c +++ b/cpu/atmega2560/periph/gpio.c @@ -102,6 +102,24 @@ int gpio_init(gpio_t pin, gpio_dir_t dir, gpio_pp_t pullup) else { _SFR_MEM8(_ddr_addr(pin)) &= ~(1 << _pin_num(pin)); res = bit_is_clear(_SFR_MEM8(_ddr_addr(pin)), _pin_num(pin)); + + if (res == 0) { + return -1; + } + + switch (pullup) { + case GPIO_NOPULL: + _SFR_MEM8(_port_addr(pin)) &= ~(1 << _pin_num(pin)); + res = bit_is_clear(_SFR_MEM8(_port_addr(pin)), _pin_num(pin)); + break; + case GPIO_PULLUP: + _SFR_MEM8(_port_addr(pin)) |= (1 << _pin_num(pin)); + res = bit_is_set(_SFR_MEM8(_port_addr(pin)), _pin_num(pin)); + break; + case GPIO_PULLDOWN: + /* Not supported by atmega2560 */ + return -1; + } } return (res == 0) ? -1 : 0; @@ -121,8 +139,6 @@ int gpio_init_int(gpio_t pin, gpio_pp_t pullup, gpio_flank_t flank, return -1; } - gpio_set(pin); - /* clear global interrupt flag */ cli();