7 void gpio_select_function(uint8_t gpio, uint8_t func) {
9 uint8_t major, minor, shift;
10 volatile uint32_t *base = GPIO_FUNC_SEL0;
17 value &= ~(mask << shift);
18 value |= (func << shift);
22 void gpio_reg_set(
volatile uint32_t* reg, uint8_t bit) {
26 *(reg + major) |= (1UL << minor);
29 void gpio_reg_clear(
volatile uint32_t* reg, uint8_t bit) {
33 *(reg + major) &= ~(1UL << minor);
36 void gpio_set_pad_dir(uint8_t gpio, uint8_t dir) {
40 if (dir) gpio_reg_set(GPIO_PAD_DIR0 + major, minor);
41 else gpio_reg_clear(GPIO_PAD_DIR0 + major, minor);
44 void gpio_set(uint8_t gpio) {
48 *(GPIO_DATA_SET0 + major) = (1UL << minor);
51 void gpio_reset(uint8_t gpio) {
55 *(GPIO_DATA_RESET0 + major) = (1UL << minor);
58 bool gpio_read(uint8_t gpio) {
62 return (*(GPIO_DATA0 + major) >> minor) & 1;