57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
#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;
|
|
} |