diff --git a/cpu/fe310/periph/gpio.c b/cpu/fe310/periph/gpio.c index 85e1934995..b9a1a3a370 100644 --- a/cpu/fe310/periph/gpio.c +++ b/cpu/fe310/periph/gpio.c @@ -32,34 +32,10 @@ /* Num of GPIOs supported */ #define GPIO_NUMOF (32) +#ifdef MODULE_PERIPH_GPIO_IRQ static gpio_flank_t isr_flank[GPIO_NUMOF]; static gpio_isr_ctx_t isr_ctx[GPIO_NUMOF]; - -void gpio_isr(int num) -{ - uint32_t pin = num - INT_GPIO_BASE; - - /* Invoke callback function */ - if (isr_ctx[pin].cb) { - isr_ctx[pin].cb(isr_ctx[pin].arg); - } - - /* Clear interupt */ - switch (isr_flank[pin]) { - case GPIO_FALLING: - GPIO_REG(GPIO_FALL_IP) |= (1 << pin); - break; - - case GPIO_RISING: - GPIO_REG(GPIO_RISE_IP) |= (1 << pin); - break; - - case GPIO_BOTH: - GPIO_REG(GPIO_FALL_IP) |= (1 << pin); - GPIO_REG(GPIO_RISE_IP) |= (1 << pin); - break; - } -} +#endif int gpio_init(gpio_t pin, gpio_mode_t mode) { @@ -99,6 +75,63 @@ int gpio_init(gpio_t pin, gpio_mode_t mode) return 0; } +int gpio_read(gpio_t pin) +{ + return (GPIO_REG(GPIO_INPUT_VAL) & (1 << pin)) ? 1 : 0; +} + +void gpio_set(gpio_t pin) +{ + GPIO_REG(GPIO_OUTPUT_VAL) |= (1 << pin); +} + +void gpio_clear(gpio_t pin) +{ + GPIO_REG(GPIO_OUTPUT_VAL) &= ~(1 << pin); +} + +void gpio_toggle(gpio_t pin) +{ + GPIO_REG(GPIO_OUTPUT_VAL) ^= (1 << pin); +} + +void gpio_write(gpio_t pin, int value) +{ + if (value) { + GPIO_REG(GPIO_OUTPUT_VAL) |= (1 << pin); + } + else { + GPIO_REG(GPIO_OUTPUT_VAL) &= ~(1 << pin); + } +} + +#ifdef MODULE_PERIPH_GPIO_IRQ +void gpio_isr(int num) +{ + uint32_t pin = num - INT_GPIO_BASE; + + /* Invoke callback function */ + if (isr_ctx[pin].cb) { + isr_ctx[pin].cb(isr_ctx[pin].arg); + } + + /* Clear interupt */ + switch (isr_flank[pin]) { + case GPIO_FALLING: + GPIO_REG(GPIO_FALL_IP) |= (1 << pin); + break; + + case GPIO_RISING: + GPIO_REG(GPIO_RISE_IP) |= (1 << pin); + break; + + case GPIO_BOTH: + GPIO_REG(GPIO_FALL_IP) |= (1 << pin); + GPIO_REG(GPIO_RISE_IP) |= (1 << pin); + break; + } +} + int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank, gpio_cb_t cb, void *arg) { @@ -182,33 +215,4 @@ void gpio_irq_disable(gpio_t pin) break; } } - -int gpio_read(gpio_t pin) -{ - return (GPIO_REG(GPIO_INPUT_VAL) & (1 << pin)) ? 1 : 0; -} - -void gpio_set(gpio_t pin) -{ - GPIO_REG(GPIO_OUTPUT_VAL) |= (1 << pin); -} - -void gpio_clear(gpio_t pin) -{ - GPIO_REG(GPIO_OUTPUT_VAL) &= ~(1 << pin); -} - -void gpio_toggle(gpio_t pin) -{ - GPIO_REG(GPIO_OUTPUT_VAL) ^= (1 << pin); -} - -void gpio_write(gpio_t pin, int value) -{ - if (value) { - GPIO_REG(GPIO_OUTPUT_VAL) |= (1 << pin); - } - else { - GPIO_REG(GPIO_OUTPUT_VAL) &= ~(1 << pin); - } -} +#endif