#include "drivers/xilinx_gpio.h" sys_ret_t xilinx_gpio_init(xilinx_gpio_handle_t *handle) { handle->instance->TRI = 0xFFFFFFFF; return RET_OK; } sys_ret_t xilinx_gpio_pinmode(xilinx_gpio_handle_t *handle, uint32_t pin, uint8_t output) { if(output) { handle->instance->TRI &= ~(1U << pin); } else { handle->instance->TRI |= (1U << pin); } return RET_OK; } sys_ret_t xilinx_gpio_write(xilinx_gpio_handle_t *handle, uint32_t pin, uint8_t value) { if(value) { handle->instance->DATA |= (1U << pin); } else { handle->instance->DATA &= ~(1U << pin); } return RET_OK; } uint8_t xilinx_gpio_read(xilinx_gpio_handle_t *handle, uint32_t pin) { return (handle->instance->DATA & (1U << pin)) ? 1 : 0; } sys_ret_t xilinx_gpio_toggle(xilinx_gpio_handle_t *handle, uint32_t pin) { handle->instance->DATA ^= (1U << pin); return RET_OK; } sys_ret_t xilinx_gpio_port_mode(xilinx_gpio_handle_t *handle, uint8_t bank, uint32_t output_mask) { if(bank == 0) { handle->instance->TRI = ~output_mask; } else { handle->instance->TRI2 = ~output_mask; } return RET_OK; } sys_ret_t xilinx_gpio_port_write(xilinx_gpio_handle_t *handle, uint8_t bank, uint32_t value) { if(bank == 0) { handle->instance->DATA = value; } else { handle->instance->DATA2 = value; } return RET_OK; }