Name
GPIO Support — Use of GPIO
Synopsis
#include <cyg/hal/hal_io.h>
    desc = CYGHWR_HAL_BCM283X_GPIO(
            pin
          , 
            alt
          , 
            mode
          );
desc = CYGHWR_HAL_BCM283X_GPIO_VAR(
            pin
          , 
            alt
          , 
            mode
          );
            CYGHWR_HAL_BCM283X_GPIO_SET
          (
            desc
          );
            desc = CYGHWR_HAL_BCM283X_GPIO_GET
          (
            pin
          );
            CYGHWR_HAL_BCM283X_GPIO_OUT
          (
            desc
          , 
            val
          );
            CYGHWR_HAL_BCM283X_GPIO_IN
          (
            desc
          , 
            val
          );
Description
The BCM283X HAL provides a number of macros to support the encoding of pin multiplexing and GPIO pin modes into a 32 bit descriptor. This is useful to drivers and other packages that need to configure and use different lines for different devices. Pin multiplexing is handled in the GPIO controller, so it is handled by the same interface.
        A GPIO descriptor is created with CYGHWR_HAL_BCM283X_GPIO(
        pin, alt, mode) which takes the following arguments:
      
- pin
- This gives the GPIO pin number, between 0 and 53.
- alt
- 
              This gives the pin's function. It may be one of
              GPIO_IN,GPIO_OUT,ALT0,ALT1,ALT2,ALT3,ALT4orALT5. The first two set the pin to be a GPIO input or output respectively, the remainder select one of six alternate functions for the pin, usually assigning it to a particular device signal. The alternate function mappings can be found in the BCM2835 documentation, and may also be seen using the RedBoot gpio table command.
- mode
- This defines any additional properties that this pin should have. These either define the signal input condition on which an interrupt is raised, or the nature of any pull-up or -down to be applied to the pin. The values - RISINGand- FALLINGprogram the line to interrupt on a rising or falling edge; similarly- HIGHand- LOWinterrupt on high or low levels. The values- PULL_DOWNand- PULL_UPapply a pull resistor in the given direction.- The value in this argument is the last element of a macro of the form, - CYGHWR_HAL_BCM283X_GPIO_MODE_XXXXX. It is possible to define additional macros than enable combinations of modes. The HAL defines some such macros:- EDGEcauses and interrupt on any signal edge;- PULL_UP_FALLINGapplies a pull up on the line and interrupts on a falling edge, and- PULL_DOWN_RISINGdoes the inverse.
        Additionally, the macro
        CYGHWR_HAL_BCM283X_GPIO_NONE may be used in
        place of a pin descriptor and has a value that no valid
        descriptor can take. It may therefore be used as a placeholder
        where no GPIO pin is present or to be used. It may be passed
        to any GPIO macro which takes a descriptor and will be treated
        as a no-op.
      
The following examples show how this macro may be used:
// ACT LED is on GPIO16 on some boards
#define CYGHWR_HAL_PI_LED                       CYGHWR_HAL_BCM283X_GPIO( 16, GPIO_OUT, NONE )
// UART TX and TX pins are on GPIO14 and GPIO15
#define CYGHWR_HAL_BCM283X_UART0_TX             CYGHWR_HAL_BCM283X_GPIO( 14, ALT0, NONE )
#define CYGHWR_HAL_BCM283X_UART0_RX             CYGHWR_HAL_BCM283X_GPIO( 15, ALT0, NONE )
      
        Most of the remaining macros all take a GPIO descriptor as an
        argument. CYGHWR_HAL_BCM283X_GPIO_SET
        configures the pin according to the descriptor and must be called
        before any the following
        macros. CYGHWR_HAL_BCM283X_GPIO_OUT sets the pin
        output to the value of the least significant bit of the
        val argument. The
        val argument of
        CYGHWR_HAL_BCM283X_GPIO_IN should be a pointer
        to an int, which will be set to 0 if the pin input is
        zero, and 1 otherwise.
      
        The macro CYGHWR_HAL_BCM283X_GPIO_GET takes a
        pin number as an argument and returns a descriptor that
        encodes the current state of that pin. The
        CYGHWR_HAL_BCM283X_GPIO_VAR performs the same
        descriptor encoding as
        CYGHWR_HAL_BCM283X_GPIO except that the
        arguments are not interpreted as macro name fragments. This is
        useful for generating a descriptor at runtime from variable
        field values.
      
| 2025-10-02 | eCosPro Non-Commercial Public License | 



