diff --git a/include/libopenstm32/gpio.h b/include/libopenstm32/gpio.h index 89018b9a..f808c93b 100644 --- a/include/libopenstm32/gpio.h +++ b/include/libopenstm32/gpio.h @@ -140,6 +140,7 @@ void gpio_set_mode(u32 gpioport, u8 mode, u8 cnf, u16 gpios); void gpio_set(u32 gpioport, u16 gpios); void gpio_clear(u32 gpioport, u16 gpios); +u16 gpio_get(u32 gpioport, u16 gpios); void gpio_toggle(u32 gpioport, u16 gpios); u16 gpio_port_read(u32 gpioport); void gpio_port_write(u32 gpioport, u16 data); diff --git a/lib/gpio.c b/lib/gpio.c index e9f90ca5..2ade8424 100644 --- a/lib/gpio.c +++ b/lib/gpio.c @@ -25,6 +25,7 @@ * GPIO_CNF_OUTPUT_PUSHPULL, GPIO12); * gpio_set(GPIOB, GPIO4); * gpio_clear(GPIOG, GPIO2 | GPIO9); + * gpio_get(GPIOC, GPIO1); * gpio_toggle(GPIOA, GPIO7); * reg16 = gpio_port_read(GPIOD); * gpio_port_write(GPIOF, 0xc8fe); @@ -66,6 +67,11 @@ void gpio_clear(u32 gpioport, u16 gpios) GPIO_BRR(gpioport) = gpios; } +u16 gpio_get(u32 gpioport, u16 gpios) +{ + return gpio_port_read(gpioport) & gpios; +} + /* TODO: Should work for multiple GPIOs? */ void gpio_toggle(u32 gpioport, u16 gpio) {