83 lines
1.7 KiB
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;
|
|
}
|
|
|