void gpio_irq_disable(gpio_t dev) { if (gpio_enabled(dev)) { int pin = pin_lut[dev]; GPIO_NUM_TO_DEV(pin)->IE &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(pin)); } }
void gpio_clear(gpio_t dev) { int pin; if (!gpio_enabled(dev)) { return; } pin = pin_lut[dev]; GPIO_NUM_TO_DEV(pin)->DATA &= ~GPIO_PIN_MASK(GPIO_BIT_NUM(pin)); }
int gpio_read(gpio_t dev) { int pin; if (!gpio_enabled(dev)) { return -1; } pin = pin_lut[dev]; return (GPIO_NUM_TO_DEV(pin)->DATA >> GPIO_BIT_NUM(pin)) & 1; }
int gpio_init_in(gpio_t dev, gpio_pp_t pushpull) { int pin; if (!gpio_enabled(dev)) { return -1; } pin = pin_lut[dev]; gpio_software_control(pin); gpio_dir_input(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = ioc_mask_lut[pushpull]; return 0; }
int gpio_init(gpio_t dev, gpio_mode_t mode) { int pin; if (!gpio_enabled(dev)) { return -1; } pin = pin_lut[dev]; gpio_software_control(pin); switch (mode) { case GPIO_IN: gpio_dir_input(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = (IOC_OVERRIDE_DIS); break; case GPIO_IN_PD: gpio_dir_input(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = (IOC_OVERRIDE_PDE); break; case GPIO_IN_PU: gpio_dir_input(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = (IOC_OVERRIDE_PUE); break; case GPIO_OUT: gpio_dir_output(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = (IOC_OVERRIDE_OE); break; default: return -1; } return 0; }