OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [sw/] [lib/] [source/] [neorv32_gpio.c] - Diff between revs 44 and 61

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 44 Rev 61
Line 62... Line 62...
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Set single pin of GPIO's output port.
 * Set single pin of GPIO's output port.
 *
 *
 * @param[in] pin Output pin number to be set (0..31).
 * @param[in] pin Output pin number to be set (0..63).
 **************************************************************************/
 **************************************************************************/
void neorv32_gpio_pin_set(uint8_t pin) {
void neorv32_gpio_pin_set(int pin) {
 
 
  pin &= 0x1f;
  uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
  GPIO_OUTPUT = GPIO_OUTPUT | (uint32_t)(1 << pin);
 
 
  if (pin < 32) {
 
    GPIO_OUTPUT_LO |= mask;
 
  }
 
  else {
 
    GPIO_OUTPUT_HI |= mask;
 
  }
}
}
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Clear single pin of GPIO's output port.
 * Clear single pin of GPIO's output port.
 *
 *
 * @param[in] pin Output pin number to be cleared (0..31).
 * @param[in] pin Output pin number to be cleared (0..63).
 **************************************************************************/
 **************************************************************************/
void neorv32_gpio_pin_clr(uint8_t pin) {
void neorv32_gpio_pin_clr(int pin) {
 
 
  pin &= 0x1f;
  uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
  GPIO_OUTPUT = GPIO_OUTPUT & ~((uint32_t)(1 << pin));
 
 
  if (pin < 32) {
 
    GPIO_OUTPUT_LO &= ~mask;
 
  }
 
  else {
 
    GPIO_OUTPUT_HI &= ~mask;
 
  }
}
}
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Toggle single pin of GPIO's output port.
 * Toggle single pin of GPIO's output port.
 *
 *
 * @param[in] pin Output pin number to be toggled (0..31).
 * @param[in] pin Output pin number to be toggled (0..63).
 **************************************************************************/
 **************************************************************************/
void neorv32_gpio_pin_toggle(uint8_t pin) {
void neorv32_gpio_pin_toggle(int pin) {
 
 
 
  uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
 
 
  pin &= 0x1f;
  if (pin < 32) {
  GPIO_OUTPUT = GPIO_OUTPUT ^ (uint32_t)(1 << pin);
    GPIO_OUTPUT_LO ^= mask;
 
  }
 
  else {
 
    GPIO_OUTPUT_HI ^= mask;
 
  }
}
}
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Get single pin of GPIO's input port.
 * Get single pin of GPIO's input port.
 *
 *
 * @param[in] pin Input pin to be read (0..31).
 * @param[in] pin Input pin to be read (0..63).
 * @return uint32_t: =0 if pin is low, !=0 if pin is high.
 * @return =0 if pin is low, !=0 if pin is high.
 **************************************************************************/
 **************************************************************************/
uint32_t neorv32_gpio_pin_get(uint8_t pin) {
uint32_t neorv32_gpio_pin_get(int pin) {
 
 
 
  uint32_t mask = (uint32_t)(1 << (pin & 0x1f));
 
 
  pin &= 0x1f;
  if (pin < 32) {
  return GPIO_INPUT & (uint32_t)(1 << pin);
    return GPIO_INPUT_LO & mask;
 
  }
 
  else {
 
    return GPIO_INPUT_HI & mask;
 
  }
}
}
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Set complete GPIO output port.
 * Set complete GPIO output port.
 *
 *
 * @param[in] port_data New output port value (32-bit).
 * @param[in] port_data New output port value (64-bit).
 **************************************************************************/
 **************************************************************************/
void neorv32_gpio_port_set(uint32_t port_data) {
void neorv32_gpio_port_set(uint64_t port_data) {
 
 
  GPIO_OUTPUT = port_data;
  GPIO_OUTPUT = port_data;
}
}
 
 
 
 
/**********************************************************************//**
/**********************************************************************//**
 * Get complete GPIO input port.
 * Get complete GPIO input port.
 *
 *
 * @return Current input port state (32-bit).
 * @return Current input port state (64-bit).
 **************************************************************************/
 **************************************************************************/
uint32_t neorv32_gpio_port_get(void) {
uint64_t neorv32_gpio_port_get(void) {
 
 
  return GPIO_INPUT;
  return GPIO_INPUT;
}
}
 
 
 
 
/**********************************************************************//**
 
 * Configure pin-change IRQ mask for input pins.
 
 *
 
 * @note The pin-change IRQ will trigger on any transition (rising and falling edge) for any enabled input pin.
 
 *
 
 * @param[in] pin_sel Mask to select which input pins can cause a pin-change IRQ (32-bit), 1 = pin enabled.
 
 **************************************************************************/
 
void neorv32_gpio_pin_change_config(uint32_t pin_sel) {
 
 
 
  GPIO_INPUT = pin_sel;
 
}
 
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.