int gpio_init_out(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_output(pin); /* configure the pin's pull resistor state */ IOC_PXX_OVER[pin] = IOC_OVERRIDE_OE | 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; }
static void assert_scl(void) { cc2538_gpio_clear(I2C_0_SCL_PIN); IOC_PXX_OVER[I2C_0_SCL_PIN] |= IOC_OVERRIDE_OE; gpio_dir_output(I2C_0_SCL_PIN); gpio_software_control(I2C_0_SCL_PIN); }