void pin_mode(PinName pin, PinMode mode) { if (pin == (PinName)NC) { return; } // set pullup, pulldown,... // select resister number int group = pin / 10; vuint32_t *res = GPFSEL(group); vuint32_t shift = (pin % 10) * 3; switch(mode){ case Output: case Alt0: case Alt1: case Alt2: case Alt3: case Alt4: case Alt5: *res = (mode << shift) | (*res & ~(0x07 << shift)); break; case PullUp: case PullDown: case PullNone: pin_pull(pin, mode); break; case Input: // register clear(3bit) *res &= ~(0x07 << shift); default: return; } }
void gpio_set_pulldown(unsigned int pin) { pin_pull(pin, PULLDOWN); }
void gpio_set_pullup(unsigned int pin) { pin_pull(pin, PULLUP); }