fixed error in GPIO access functions (they were still based on 16-bit GPIO ports; ports are now 32-bit wide)

This commit is contained in:
stnolting 2020-09-01 23:20:50 +02:00
parent 04d7f25d43
commit d601e560de
2 changed files with 21 additions and 21 deletions

View file

@ -49,8 +49,8 @@ int neorv32_gpio_available(void);
void neorv32_gpio_pin_set(uint8_t p);
void neorv32_gpio_pin_clr(uint8_t p);
void neorv32_gpio_pin_toggle(uint8_t p);
uint16_t neorv32_gpio_pin_get(uint8_t p);
void neorv32_gpio_port_set(uint16_t d);
uint16_t neorv32_gpio_port_get(void);
uint32_t neorv32_gpio_pin_get(uint8_t p);
void neorv32_gpio_port_set(uint32_t d);
uint32_t neorv32_gpio_port_get(void);
#endif // neorv32_gpio_h

View file

@ -64,58 +64,58 @@ int neorv32_gpio_available(void) {
/**********************************************************************//**
* Set single pin of GPIO's output port.
*
* @param[in] pin Pin number to be set (0..15).
* @param[in] pin Pin number to be set (0..31).
**************************************************************************/
void neorv32_gpio_pin_set(uint8_t pin) {
pin &= 0x0f;
GPIO_OUTPUT = GPIO_OUTPUT | (uint16_t)(1 << pin);
pin &= 0x1f;
GPIO_OUTPUT = GPIO_OUTPUT | (uint32_t)(1 << pin);
}
/**********************************************************************//**
* Clear single pin of GPIO's output port.
*
* @param[in] pin Pin number to be cleared (0..15).
* @param[in] pin Pin number to be cleared (0..31).
**************************************************************************/
void neorv32_gpio_pin_clr(uint8_t pin) {
pin &= 0x0f;
GPIO_OUTPUT = GPIO_OUTPUT & ~((uint16_t)(1 << pin));
pin &= 0x1f;
GPIO_OUTPUT = GPIO_OUTPUT & ~((uint32_t)(1 << pin));
}
/**********************************************************************//**
* Toggle single pin of GPIO's output port.
*
* @param[in] pin Pin number to be toggled (0..15).
* @param[in] pin Pin number to be toggled (0..31).
**************************************************************************/
void neorv32_gpio_pin_toggle(uint8_t pin) {
pin &= 0x0f;
GPIO_OUTPUT = GPIO_OUTPUT ^ (uint16_t)(1 << pin);
pin &= 0x1f;
GPIO_OUTPUT = GPIO_OUTPUT ^ (uint32_t)(1 << pin);
}
/**********************************************************************//**
* Get single pin of GPIO's input port.
*
* @param[in] pin Pin to be read (0..15).
* @return uint16_t: =0 if pin is low, !=0 if pin is high.
* @param[in] pin Pin to be read (0..31).
* @return uint32_t: =0 if pin is low, !=0 if pin is high.
**************************************************************************/
uint16_t neorv32_gpio_pin_get(uint8_t pin) {
uint32_t neorv32_gpio_pin_get(uint8_t pin) {
pin &= 0x0f;
return GPIO_INPUT & (uint16_t)(1 << pin);
pin &= 0x1f;
return GPIO_INPUT & (uint32_t)(1 << pin);
}
/**********************************************************************//**
* Set complete GPIO output port.
*
* @param[in] port_data New port value.
* @param[in] port_data New port value (32-bit).
**************************************************************************/
void neorv32_gpio_port_set(uint16_t port_data) {
void neorv32_gpio_port_set(uint32_t port_data) {
GPIO_OUTPUT = port_data;
}
@ -124,9 +124,9 @@ void neorv32_gpio_port_set(uint16_t port_data) {
/**********************************************************************//**
* Get complete GPIO input port.
*
* @return Current input port state.
* @return Current input port state (32-bit).
**************************************************************************/
uint16_t neorv32_gpio_port_get(void) {
uint32_t neorv32_gpio_port_get(void) {
return GPIO_INPUT;
}