GpioPin_ARTERY_AT32F435_437/Src/GpioPin.c

83 lines
1.7 KiB
C

//
// Created by cfif on 16.09.22.
//
#include "GpioPin.h"
tGpioPin vInitGpioPinOpenDrain(gpio_type *port, uint32_t pinMask, gpio_mode_type direction, bool reverse,
crm_periph_clock_type clock) {
crm_periph_clock_enable(clock, TRUE);
gpio_init_type GPIOInit;
gpio_default_para_init(&GPIOInit);
GPIOInit.gpio_mode = direction;
GPIOInit.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
tGpioPin pin = {
.port = port,
.pin = pinMask,
.reverse = reverse
};
GPIOInit.gpio_pins = pin.pin;
gpio_init(pin.port, &GPIOInit);
return pin;
}
tGpioPin vInitGpioPinPull(
gpio_type *port,
uint32_t pinMask,
gpio_mode_type direction,
bool reverse,
crm_periph_clock_type clock,
gpio_pull_type gpio_pull
) {
crm_periph_clock_enable(clock, TRUE);
gpio_init_type GPIOInit;
gpio_default_para_init(&GPIOInit);
GPIOInit.gpio_mode = direction;
GPIOInit.gpio_pull = gpio_pull;
tGpioPin pin = {
.port = port,
.pin = pinMask,
.reverse = reverse
};
GPIOInit.gpio_pins = pin.pin;
gpio_init(pin.port, &GPIOInit);
return pin;
}
void GpioPinSet(tGpioPin *pin, bool value) {
if (pin->reverse) {
value = !value;
}
if (value) {
gpio_bits_set(pin->port, pin->pin);
} else {
gpio_bits_reset(pin->port, pin->pin);
}
}
bool GpioPinGet(tGpioPin *pin) {
bool value;
if (gpio_input_data_bit_read(pin->port, pin->pin) == SET) {
value = true;
} else { //if value == RESET;
value = false;
}
if (pin->reverse) {
value = !value;
}
return value;
}