Line 50... |
Line 50... |
*
|
*
|
* @return 0 if GPIO was not synthesized, 1 if GPIO is available.
|
* @return 0 if GPIO was not synthesized, 1 if GPIO is available.
|
**************************************************************************/
|
**************************************************************************/
|
int neorv32_gpio_available(void) {
|
int neorv32_gpio_available(void) {
|
|
|
if (SYSINFO_FEATURES & (1 << SYSINFO_FEATURES_IO_GPIO)) {
|
if (NEORV32_SYSINFO.SOC & (1 << SYSINFO_SOC_IO_GPIO)) {
|
return 1;
|
return 1;
|
}
|
}
|
else {
|
else {
|
return 0;
|
return 0;
|
}
|
}
|
Line 69... |
Line 69... |
void neorv32_gpio_pin_set(int pin) {
|
void neorv32_gpio_pin_set(int pin) {
|
|
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
|
|
if (pin < 32) {
|
if (pin < 32) {
|
GPIO_OUTPUT_LO |= mask;
|
NEORV32_GPIO.OUTPUT_LO |= mask;
|
}
|
}
|
else {
|
else {
|
GPIO_OUTPUT_HI |= mask;
|
NEORV32_GPIO.OUTPUT_HI |= mask;
|
}
|
}
|
}
|
}
|
|
|
|
|
/**********************************************************************//**
|
/**********************************************************************//**
|
Line 87... |
Line 87... |
void neorv32_gpio_pin_clr(int pin) {
|
void neorv32_gpio_pin_clr(int pin) {
|
|
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
|
|
if (pin < 32) {
|
if (pin < 32) {
|
GPIO_OUTPUT_LO &= ~mask;
|
NEORV32_GPIO.OUTPUT_LO &= ~mask;
|
}
|
}
|
else {
|
else {
|
GPIO_OUTPUT_HI &= ~mask;
|
NEORV32_GPIO.OUTPUT_HI &= ~mask;
|
}
|
}
|
}
|
}
|
|
|
|
|
/**********************************************************************//**
|
/**********************************************************************//**
|
Line 105... |
Line 105... |
void neorv32_gpio_pin_toggle(int pin) {
|
void neorv32_gpio_pin_toggle(int pin) {
|
|
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
|
|
if (pin < 32) {
|
if (pin < 32) {
|
GPIO_OUTPUT_LO ^= mask;
|
NEORV32_GPIO.OUTPUT_LO ^= mask;
|
}
|
}
|
else {
|
else {
|
GPIO_OUTPUT_HI ^= mask;
|
NEORV32_GPIO.OUTPUT_HI ^= mask;
|
}
|
}
|
}
|
}
|
|
|
|
|
/**********************************************************************//**
|
/**********************************************************************//**
|
Line 124... |
Line 124... |
uint32_t neorv32_gpio_pin_get(int pin) {
|
uint32_t neorv32_gpio_pin_get(int pin) {
|
|
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
|
|
|
if (pin < 32) {
|
if (pin < 32) {
|
return GPIO_INPUT_LO & mask;
|
return NEORV32_GPIO.INPUT_LO & mask;
|
}
|
}
|
else {
|
else {
|
return GPIO_INPUT_HI & mask;
|
return NEORV32_GPIO.INPUT_HI & mask;
|
}
|
}
|
}
|
}
|
|
|
|
|
/**********************************************************************//**
|
/**********************************************************************//**
|
Line 139... |
Line 139... |
*
|
*
|
* @param[in] port_data New output port value (64-bit).
|
* @param[in] port_data New output port value (64-bit).
|
**************************************************************************/
|
**************************************************************************/
|
void neorv32_gpio_port_set(uint64_t port_data) {
|
void neorv32_gpio_port_set(uint64_t port_data) {
|
|
|
GPIO_OUTPUT = port_data;
|
union {
|
|
uint64_t uint64;
|
|
uint32_t uint32[sizeof(uint64_t)/2];
|
|
} data;
|
|
|
|
data.uint64 = port_data;
|
|
NEORV32_GPIO.OUTPUT_LO = data.uint32[0];
|
|
NEORV32_GPIO.OUTPUT_HI = data.uint32[1];
|
}
|
}
|
|
|
|
|
/**********************************************************************//**
|
/**********************************************************************//**
|
* Get complete GPIO input port.
|
* Get complete GPIO input port.
|
*
|
*
|
* @return Current input port state (64-bit).
|
* @return Current input port state (64-bit).
|
**************************************************************************/
|
**************************************************************************/
|
uint64_t neorv32_gpio_port_get(void) {
|
uint64_t neorv32_gpio_port_get(void) {
|
|
|
return GPIO_INPUT;
|
union {
|
|
uint64_t uint64;
|
|
uint32_t uint32[sizeof(uint64_t)/2];
|
|
} data;
|
|
|
|
data.uint32[0] = NEORV32_GPIO.OUTPUT_LO;
|
|
data.uint32[1] = NEORV32_GPIO.OUTPUT_HI;
|
|
|
|
return data.uint64;
|
}
|
}
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|