#ifndef PLATFORMS_STM32_GPIO_H
#define PLATFORMS_STM32_GPIO_H
#include <libopencm3/cm3/common.h>
#include <libopencm3/stm32/memorymap.h>
#include <libopencm3/stm32/gpio.h>
static inline void bmp_gpio_set(const uint32_t gpioport, const uint16_t gpios)
{
GPIO_BSRR(gpioport) = gpios;
#if defined(STM32F4) || defined(STM32F7)
GPIO_BSRR(gpioport) = gpios;
#endif
}
#define gpio_set bmp_gpio_set
static inline void bmp_gpio_clear(const uint32_t gpioport, const uint16_t gpios)
{
#ifdef GPIO_BRR
GPIO_BRR(gpioport) = gpios;
#else
#if defined(STM32F4) || defined(STM32F7)
GPIO_BSRR(gpioport) = gpios << 16U;
#endif
GPIO_BSRR(gpioport) = gpios << 16U;
#endif
}
#define gpio_clear bmp_gpio_clear
static inline uint16_t bmp_gpio_get(const uint32_t gpioport, const uint16_t gpios)
{
return GPIO_IDR(gpioport) & gpios;
}
#define gpio_get bmp_gpio_get
static inline void gpio_set_val(const uint32_t gpioport, const uint16_t gpios, const bool val)
{
if (val)
gpio_set(gpioport, gpios);
else
gpio_clear(gpioport, gpios);
}
#endif