// // 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; }