The LM3S HAL provides a number of macros to support the encoding of GPIO pin identity and configuration into a single 32 bit descriptor. This is useful to drivers and other packages that need to configure and use different lines for different devices.
A descriptor is created with
bit, mode) which takes the following arguments:
This identifies the GPIO port to which the pin is attached. Ports are identified by letters from A to F.
This gives the bit or pin number within the port. These are numbered from 0 to 8.
This defines the drive level for the external pad. It may be set to 2mA, 4mA or 8mA. It may also be set to 8mAS to add slew rate control.
This defines the mode in which the pin is to be used. The following values are currently defined: IN_PULLUP defines the pin as a GPIO input with a pull up resistor, IN_PULLDOWN defines the pin as a GPIO input with a pull down resistor, OUT_OPENDRAIN defines the pin as a GPIO output with an open drain, ALT_DIGITAL defines the pin as a digital line under the control of a peripheral. ALT_OD defines the pin as a digital open drain line under the control of a peripheral. ALT_ODPU defines the pin as a digital open drain line with pull up under the control of a peripheral. ALT_ODPD defines the pin as a digital open drain line with pull down under the control of a peripheral. ALT_PP defines the pin as a digital pushpull line under the control of a peripheral. ALT_PPPU defines the pin as a digital pushpull line with pull up under the control of a peripheral. ALT_PPPD defines the pin as a digital pushpull line with pull down under the control of a peripheral. This set may be extended as further requirements emerge, so check the sources for new definitions.
The following examples show how this macro may be used:
// Define port A pin 0 as a digital device pin with 2mA drive level #define CYGHWR_HAL_LM3S_UART0_RX CYGHWR_HAL_LM3S_GPIO( A, 0, 2mA, ALT_DIGITAL )
Additionally, the macro CYGHWR_HAL_LM3S_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.
The remaining macros all take a GPIO pin descriptor as an
configures the pin according to the descriptor and must be called
before any other
CYGHWR_HAL_LM3S_GPIO_OUT sets the
output to the value of the least significant bit of the
val argument. The
val argument of
CYGHWR_HAL_LM3S_GPIO_IN should be a pointer
to an int, which will be set to 0 if the pin input is
zero, and 1 otherwise.