diff --git a/core/esp_gpio.c b/core/esp_gpio.c new file mode 100644 index 0000000..23ddf22 --- /dev/null +++ b/core/esp_gpio.c @@ -0,0 +1,39 @@ +/* GPIO management functions + * + * Part of esp-open-rtos + * Copyright (C) 2015 Angus Gratton + * BSD Licensed as described in the file LICENSE + */ +#include + +void gpio_enable(const uint8_t gpio_num, const gpio_direction_t direction) +{ + uint32_t iomux_flags; + + switch(direction) { + case GPIO_INPUT: + iomux_flags = 0; + break; + case GPIO_OUTPUT: + iomux_flags = IOMUX_PIN_OUTPUT_ENABLE; + break; + case GPIO_OUT_OPEN_DRAIN: + iomux_flags = IOMUX_PIN_OUTPUT_ENABLE; + break; + case GPIO_INPUT_PULLUP: + iomux_flags = IOMUX_PIN_PULLUP; + break; + default: + return; /* Invalid direction flag */ + } + iomux_set_gpio_function(gpio_num, iomux_flags); + if(direction == GPIO_OUT_OPEN_DRAIN) + GPIO.CONF[gpio_num] |= GPIO_CONF_OPEN_DRAIN; + else + GPIO.CONF[gpio_num] &= ~GPIO_CONF_OPEN_DRAIN; + if (iomux_flags & IOMUX_PIN_OUTPUT_ENABLE) + GPIO.ENABLE_OUT_SET = BIT(gpio_num); + else + GPIO.ENABLE_OUT_CLEAR = BIT(gpio_num); +} +