diff --git a/arch/cpu/cc2538/dev/gpio-hal-arch.c b/arch/cpu/cc2538/dev/gpio-hal-arch.c index bd2dfb92d..14c992fe9 100644 --- a/arch/cpu/cc2538/dev/gpio-hal-arch.c +++ b/arch/cpu/cc2538/dev/gpio-hal-arch.c @@ -57,39 +57,35 @@ gpio_hal_arch_pin_cfg_set(gpio_hal_pin_t pin, gpio_hal_pin_cfg_t cfg) gpio_hal_pin_cfg_t tmp; - tmp = cfg & GPIO_HAL_PIN_CFG_EDGE_BOTH; - if(tmp == GPIO_HAL_PIN_CFG_EDGE_NONE) { - GPIO_DISABLE_INTERRUPT(port_base, pin_mask); - } else if(tmp == GPIO_HAL_PIN_CFG_EDGE_RISING) { - GPIO_DETECT_EDGE(port_base, pin_mask); - GPIO_TRIGGER_SINGLE_EDGE(port_base, pin_mask); - GPIO_DETECT_RISING(port_base, pin_mask); - } else if(tmp == GPIO_HAL_PIN_CFG_EDGE_FALLING) { - GPIO_DETECT_EDGE(port_base, pin_mask); - GPIO_TRIGGER_SINGLE_EDGE(port_base, pin_mask); - GPIO_DETECT_FALLING(port_base, pin_mask); - } else if(tmp == GPIO_HAL_PIN_CFG_EDGE_BOTH) { - GPIO_DETECT_EDGE(port_base, pin_mask); - GPIO_TRIGGER_BOTH_EDGES(port_base, pin_mask); - } - - tmp = cfg & GPIO_HAL_PIN_CFG_PULL_MASK; - if(tmp == GPIO_HAL_PIN_CFG_PULL_NONE) { - ioc_set_over(port, pin_num, IOC_OVERRIDE_DIS); - } else if(tmp == GPIO_HAL_PIN_CFG_PULL_DOWN) { - ioc_set_over(port, pin_num, IOC_OVERRIDE_PDE); - } else if(tmp == GPIO_HAL_PIN_CFG_PULL_UP) { - ioc_set_over(port, pin_num, IOC_OVERRIDE_PUE); - } - - tmp = cfg & GPIO_HAL_PIN_CFG_INT_MASK; + tmp = cfg & GPIO_HAL_PIN_BM_INT; if(tmp == GPIO_HAL_PIN_CFG_INT_DISABLE) { GPIO_DISABLE_INTERRUPT(port_base, pin_mask); - } else if(tmp == GPIO_HAL_PIN_CFG_INT_ENABLE) { + } else { + if(tmp == GPIO_HAL_PIN_CFG_INT_RISING) { + GPIO_DETECT_EDGE(port_base, pin_mask); + GPIO_TRIGGER_SINGLE_EDGE(port_base, pin_mask); + GPIO_DETECT_RISING(port_base, pin_mask); + } else if(tmp == GPIO_HAL_PIN_CFG_INT_FALLING) { + GPIO_DETECT_EDGE(port_base, pin_mask); + GPIO_TRIGGER_SINGLE_EDGE(port_base, pin_mask); + GPIO_DETECT_FALLING(port_base, pin_mask); + } else if(tmp == GPIO_HAL_PIN_CFG_INT_BOTH) { + GPIO_DETECT_EDGE(port_base, pin_mask); + GPIO_TRIGGER_BOTH_EDGES(port_base, pin_mask); + } GPIO_ENABLE_INTERRUPT(port_base, pin_mask); NVIC_EnableIRQ(port); } + tmp = cfg & GPIO_HAL_PIN_BM_INPUT; + if(tmp == GPIO_HAL_PIN_CFG_INPUT_NOPULL) { + ioc_set_over(port, pin_num, IOC_OVERRIDE_DIS); + } else if(tmp == GPIO_HAL_PIN_CFG_INPUT_PULLDOWN) { + ioc_set_over(port, pin_num, IOC_OVERRIDE_PDE); + } else if(tmp == GPIO_HAL_PIN_CFG_INPUT_PULLUP) { + ioc_set_over(port, pin_num, IOC_OVERRIDE_PUE); + } + GPIO_SOFTWARE_CONTROL(port_base, pin_mask); } /*---------------------------------------------------------------------------*/ @@ -111,11 +107,11 @@ gpio_hal_arch_pin_cfg_get(gpio_hal_pin_t pin) /* Pull */ tmp = ioc_get_over(port, pin_num); if(tmp == IOC_OVERRIDE_PUE) { - cfg |= GPIO_HAL_PIN_CFG_PULL_UP; + cfg |= GPIO_HAL_PIN_CFG_INPUT_PULLUP; } else if(tmp == IOC_OVERRIDE_PDE) { - cfg |= GPIO_HAL_PIN_CFG_PULL_DOWN; + cfg |= GPIO_HAL_PIN_CFG_INPUT_PULLDOWN; } else { - cfg |= GPIO_HAL_PIN_CFG_PULL_NONE; + cfg |= GPIO_HAL_PIN_CFG_INPUT_NOPULL; } /* Interrupt enable/disable */ @@ -123,20 +119,14 @@ gpio_hal_arch_pin_cfg_get(gpio_hal_pin_t pin) if(tmp == 0) { cfg |= GPIO_HAL_PIN_CFG_INT_DISABLE; } else { - cfg |= GPIO_HAL_PIN_CFG_INT_ENABLE; - } - - /* Edge detection */ - if(REG((port_base) + GPIO_IS) & pin_mask) { - cfg |= GPIO_HAL_PIN_CFG_EDGE_NONE; - } else { + /* Edge detection */ if(REG((port_base) + GPIO_IBE) & pin_mask) { - cfg |= GPIO_HAL_PIN_CFG_EDGE_BOTH; + cfg |= GPIO_HAL_PIN_CFG_INT_BOTH; } else { if(REG((port_base) + GPIO_IEV) & pin_mask) { - cfg |= GPIO_HAL_PIN_CFG_EDGE_RISING; + cfg |= GPIO_HAL_PIN_CFG_INT_RISING; } else { - cfg |= GPIO_HAL_PIN_CFG_EDGE_FALLING; + cfg |= GPIO_HAL_PIN_CFG_INT_FALLING; } } } diff --git a/arch/cpu/cc2538/dev/gpio-hal-arch.h b/arch/cpu/cc2538/dev/gpio-hal-arch.h index 25abb3eb4..761a182a7 100644 --- a/arch/cpu/cc2538/dev/gpio-hal-arch.h +++ b/arch/cpu/cc2538/dev/gpio-hal-arch.h @@ -56,7 +56,12 @@ #define PIN_TO_NUM(pin) (pin % 8) #define PIN_TO_PORT_BASE(pin) GPIO_PORT_TO_BASE(PIN_TO_PORT(pin)) /*---------------------------------------------------------------------------*/ -#define gpio_hal_arch_interrupt_enable(p) do { \ +#define gpio_hal_arch_init() do { \ + /* do nothing */ \ +} while(0); + +#define gpio_hal_arch_interrupt_enable(p, cfg) do { \ + gpio_hal_arch_pin_cfg_set((p), (cfg) & GPIO_HAL_PIN_BM_INT); \ GPIO_ENABLE_INTERRUPT(PIN_TO_PORT_BASE(p), GPIO_PIN_MASK((p) % 8)); \ NVIC_EnableIRQ(PIN_TO_PORT(p)); \ } while(0); diff --git a/arch/platform/cc2538dk/dev/board-buttons.c b/arch/platform/cc2538dk/dev/board-buttons.c index 6afc915df..5701d6f99 100644 --- a/arch/platform/cc2538dk/dev/board-buttons.c +++ b/arch/platform/cc2538dk/dev/board-buttons.c @@ -44,22 +44,23 @@ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" +#include "dev/gpio-hal.h" /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTON(key_left, "Key Left", \ GPIO_PORT_PIN_TO_GPIO_HAL_PIN(BUTTON_LEFT_PORT, BUTTON_LEFT_PIN), \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_BUTTON_ZERO, true); + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_BUTTON_ZERO, true); BUTTON_HAL_BUTTON(key_right, "Key Right", \ GPIO_PORT_PIN_TO_GPIO_HAL_PIN(BUTTON_RIGHT_PORT, BUTTON_RIGHT_PIN), \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_BUTTON_ONE, true); + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_BUTTON_ONE, true); BUTTON_HAL_BUTTON(key_up, "Key Up", \ GPIO_PORT_PIN_TO_GPIO_HAL_PIN(BUTTON_UP_PORT, BUTTON_UP_PIN), \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_BUTTON_TWO, true); + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_BUTTON_TWO, true); BUTTON_HAL_BUTTON(key_down, "Key Down", \ GPIO_PORT_PIN_TO_GPIO_HAL_PIN(BUTTON_DOWN_PORT, BUTTON_DOWN_PIN), \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_BUTTON_THREE, true); + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_BUTTON_THREE, true); BUTTON_HAL_BUTTON(key_select, "Key Select", \ GPIO_PORT_PIN_TO_GPIO_HAL_PIN(BUTTON_SELECT_PORT, BUTTON_SELECT_PIN), \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_BUTTON_FOUR, true); + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_BUTTON_FOUR, true); /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&key_left, &key_right, &key_up, &key_down, &key_select); /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/srf06-cc26xx/launchpad/board-buttons.c b/arch/platform/srf06-cc26xx/launchpad/board-buttons.c index 1850684c3..0fa6907c6 100644 --- a/arch/platform/srf06-cc26xx/launchpad/board-buttons.c +++ b/arch/platform/srf06-cc26xx/launchpad/board-buttons.c @@ -39,6 +39,7 @@ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" +#include "dev/gpio-hal.h" #include "ti-lib.h" /*---------------------------------------------------------------------------*/ diff --git a/arch/platform/srf06-cc26xx/sensortag/board-buttons.c b/arch/platform/srf06-cc26xx/sensortag/board-buttons.c index 73fc178bd..bdf481359 100644 --- a/arch/platform/srf06-cc26xx/sensortag/board-buttons.c +++ b/arch/platform/srf06-cc26xx/sensortag/board-buttons.c @@ -38,23 +38,23 @@ */ /*---------------------------------------------------------------------------*/ #include "contiki.h" -#include "dev/gpio-hal.h" #include "dev/button-hal.h" +#include "dev/gpio-hal.h" #include "ti-lib.h" #include /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTON(reed_relay, "Reed Relay", BOARD_IOID_REED_RELAY, \ - GPIO_HAL_PIN_CFG_PULL_DOWN, \ + GPIO_HAL_PIN_CFG_INPUT_PULLDOWN, \ BUTTON_HAL_ID_REED_RELAY, true); BUTTON_HAL_BUTTON(key_left, "Key Left", BOARD_IOID_KEY_LEFT, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_LEFT, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_LEFT, \ true); BUTTON_HAL_BUTTON(key_right, "Key Right", BOARD_IOID_KEY_RIGHT, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_RIGHT, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_RIGHT, \ true); /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&reed_relay, &key_left, &key_right); diff --git a/arch/platform/srf06-cc26xx/srf06/board-buttons.c b/arch/platform/srf06-cc26xx/srf06/board-buttons.c index db06cfcc0..68562f15a 100644 --- a/arch/platform/srf06-cc26xx/srf06/board-buttons.c +++ b/arch/platform/srf06-cc26xx/srf06/board-buttons.c @@ -39,23 +39,24 @@ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "dev/button-hal.h" +#include "dev/gpio-hal.h" #include "ti-lib.h" /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTON(key_left, "Key Left", BOARD_IOID_KEY_LEFT, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_LEFT, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_LEFT, \ true); BUTTON_HAL_BUTTON(key_right, "Key Right", BOARD_IOID_KEY_RIGHT, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_RIGHT, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_RIGHT, \ true); BUTTON_HAL_BUTTON(key_up, "Key Up", BOARD_IOID_KEY_UP, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_UP, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_UP, \ true); BUTTON_HAL_BUTTON(key_down, "Key Down", BOARD_IOID_KEY_DOWN, \ - GPIO_HAL_PIN_CFG_PULL_UP, BUTTON_HAL_ID_KEY_DOWN, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, BUTTON_HAL_ID_KEY_DOWN, \ true); BUTTON_HAL_BUTTON(key_select, "Key Select", BOARD_IOID_KEY_SELECT, \ - GPIO_HAL_PIN_CFG_PULL_UP, \ + GPIO_HAL_PIN_CFG_INPUT_PULLUP, \ BUTTON_HAL_ID_KEY_SELECT, true); /*---------------------------------------------------------------------------*/ BUTTON_HAL_BUTTONS(&key_left, &key_right, &key_up, &key_down, &key_select); diff --git a/examples/dev/gpio-hal/gpio-hal-example.c b/examples/dev/gpio-hal/gpio-hal-example.c index 380c06388..aa6a063d7 100644 --- a/examples/dev/gpio-hal/gpio-hal-example.c +++ b/examples/dev/gpio-hal/gpio-hal-example.c @@ -115,11 +115,11 @@ PROCESS_THREAD(gpio_hal_example, ev, data) gpio_hal_pin_cfg_t interrupt; interrupt = gpio_hal_arch_pin_cfg_get(btn_pin) & - GPIO_HAL_PIN_CFG_INT_ENABLE; + GPIO_HAL_PIN_BM_INT; - if(interrupt == 0) { + if(interrupt != GPIO_HAL_PIN_CFG_INT_DISABLE) { printf("Enabling button interrupt\n"); - gpio_hal_arch_interrupt_enable(btn_pin); + gpio_hal_arch_interrupt_enable(btn_pin, GPIO_HAL_PIN_CFG_INT_BOTH); } else { printf("Disabling button interrupt\n"); gpio_hal_arch_interrupt_disable(btn_pin); diff --git a/examples/platform-specific/cc26xx/cc26xx-demo.c b/examples/platform-specific/cc26xx/cc26xx-demo.c index 8c90905af..acc3ca823 100644 --- a/examples/platform-specific/cc26xx/cc26xx-demo.c +++ b/examples/platform-specific/cc26xx/cc26xx-demo.c @@ -98,11 +98,11 @@ #define CC26XX_DEMO_LEDS_BUTTON LEDS_RED #define CC26XX_DEMO_LEDS_REBOOT LEDS_ALL /*---------------------------------------------------------------------------*/ -#define CC26XX_DEMO_TRIGGER_1 BOARD_BUTTON_HAL_INDEX_KEY_LEFT -#define CC26XX_DEMO_TRIGGER_2 BOARD_BUTTON_HAL_INDEX_KEY_RIGHT +#define CC26XX_DEMO_TRIGGER_1 BUTTON_HAL_ID_KEY_LEFT +#define CC26XX_DEMO_TRIGGER_2 BUTTON_HAL_ID_KEY_RIGHT #if BOARD_SENSORTAG -#define CC26XX_DEMO_TRIGGER_3 BOARD_BUTTON_HAL_INDEX_REED_RELAY +#define CC26XX_DEMO_TRIGGER_3 BUTTON_HAL_ID_REED_RELAY #endif /*---------------------------------------------------------------------------*/ static struct etimer et; diff --git a/examples/platform-specific/cc26xx/very-sleepy-demo/very-sleepy-demo.c b/examples/platform-specific/cc26xx/very-sleepy-demo/very-sleepy-demo.c index ebd55712b..d707f3cd1 100644 --- a/examples/platform-specific/cc26xx/very-sleepy-demo/very-sleepy-demo.c +++ b/examples/platform-specific/cc26xx/very-sleepy-demo/very-sleepy-demo.c @@ -63,7 +63,7 @@ #define VERY_SLEEPY_MODE_OFF 0 #define VERY_SLEEPY_MODE_ON 1 /*---------------------------------------------------------------------------*/ -#define BUTTON_TRIGGER BOARD_BUTTON_HAL_INDEX_KEY_LEFT +#define BUTTON_TRIGGER BUTTON_HAL_ID_KEY_LEFT /*---------------------------------------------------------------------------*/ #define MAC_CAN_BE_TURNED_OFF 0 #define MAC_MUST_STAY_ON 1