RISC-V/V003/stm32f051/gpio.cpp
2024-05-07 11:46:49 +02:00

26 lines
1 KiB
C++

#include "gpio.h"
static constexpr uint32_t RCC_AHBENR_GPIOAEN = 1u << 17; /*!< GPIOA clock enable */
static constexpr uint32_t RCC_AHBENR_GPIOBEN = 1u << 18; /*!< GPIOB clock enable */
static constexpr uint32_t RCC_AHBENR_GPIOCEN = 1u << 19; /*!< GPIOC clock enable */
static constexpr uint32_t RCC_AHBENR_GPIODEN = 1u << 20; /*!< GPIOD clock enable */
static constexpr uint32_t RCC_AHBENR_GPIOFEN = 1u << 22; /*!< GPIOF clock enable */
static const GpioAssocPort cPortTab[] = {
{&GPIOA, RCC_AHBENR_GPIOAEN},
{&GPIOB, RCC_AHBENR_GPIOBEN},
{&GPIOC, RCC_AHBENR_GPIOCEN},
{&GPIOD, RCC_AHBENR_GPIODEN},
{&GPIOF, RCC_AHBENR_GPIOFEN},
};
GpioClass::GpioClass (GpioPortNum const port, const uint32_t no, const GPIOMode_TypeDef type) noexcept :
io(cPortTab[port].portAdr), pos(1UL << no), num(no) {
// Povol hodiny
RCC.AHBENR.R |= cPortTab[port].clkMask;
// A nastav pin (pořadí dle ST knihovny).
setSpeed (GPIO_Speed_Level_3);
setOType (GPIO_OType_PP);
setMode (type);
setPuPd (GPIO_PuPd_NOPULL);
}