int gpio_init(gpio_t pin, gpio_dir_t dir, gpio_pp_t pullup) { int res; if (dir == GPIO_DIR_OUT) { _SFR_MEM8(_ddr_addr(pin)) |= (1 << _pin_num(pin)); res = bit_is_set(_SFR_MEM8(_ddr_addr(pin)), _pin_num(pin)); } else { _SFR_MEM8(_ddr_addr(pin)) &= ~(1 << _pin_num(pin)); res = bit_is_clear(_SFR_MEM8(_ddr_addr(pin)), _pin_num(pin)); } return (res == 0) ? -1 : 0; }
int gpio_init(gpio_t pin, gpio_mode_t mode) { switch (mode) { case GPIO_OUT: _SFR_MEM8(_ddr_addr(pin)) |= (1 << _pin_num(pin)); break; case GPIO_IN: _SFR_MEM8(_ddr_addr(pin)) &= ~(1 << _pin_num(pin)); _SFR_MEM8(_port_addr(pin)) &= ~(1 << _pin_num(pin)); break; case GPIO_IN_PU: _SFR_MEM8(_port_addr(pin)) |= (1 << _pin_num(pin)); break; default: return -1; } return 0; }