GPIO - General Purpose Input/Output#

General Purpose Input/Output (GPIO) API.

This module contains functions to control the GPIO peripheral of Silicon Labs 32-bit MCUs and SoCs. The GPIO peripheral is used for pin configuration and direct pin manipulation and sensing as well as routing for peripheral pin connections.

Enumerations#

enum
gpioPortA = 0
gpioPortB = 1
gpioPortC = 2
gpioPortD = 3
gpioPortE = 4
gpioPortF = 5
}

GPIO ports IDs.

enum
gpioDriveModeStandard = GPIO_P_CTRL_DRIVEMODE_STANDARD
gpioDriveModeLowest = GPIO_P_CTRL_DRIVEMODE_LOWEST
gpioDriveModeHigh = GPIO_P_CTRL_DRIVEMODE_HIGH
gpioDriveModeLow = GPIO_P_CTRL_DRIVEMODE_LOW
}

GPIO drive mode.

enum
gpioModeDisabled = _GPIO_P_MODEL_MODE0_DISABLED
gpioModeInput = _GPIO_P_MODEL_MODE0_INPUT
gpioModeInputPull = _GPIO_P_MODEL_MODE0_INPUTPULL
gpioModeInputPullFilter = _GPIO_P_MODEL_MODE0_INPUTPULLFILTER
gpioModePushPull = _GPIO_P_MODEL_MODE0_PUSHPULL
gpioModePushPullDrive = _GPIO_P_MODEL_MODE0_PUSHPULLDRIVE
gpioModeWiredOr = _GPIO_P_MODEL_MODE0_WIREDOR
gpioModeWiredOrPullDown = _GPIO_P_MODEL_MODE0_WIREDORPULLDOWN
gpioModeWiredAnd = _GPIO_P_MODEL_MODE0_WIREDAND
gpioModeWiredAndFilter = _GPIO_P_MODEL_MODE0_WIREDANDFILTER
gpioModeWiredAndPullUp = _GPIO_P_MODEL_MODE0_WIREDANDPULLUP
gpioModeWiredAndPullUpFilter = _GPIO_P_MODEL_MODE0_WIREDANDPULLUPFILTER
gpioModeWiredAndDrive = _GPIO_P_MODEL_MODE0_WIREDANDDRIVE
gpioModeWiredAndDriveFilter = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEFILTER
gpioModeWiredAndDrivePullUp = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEPULLUP
gpioModeWiredAndDrivePullUpFilter = _GPIO_P_MODEL_MODE0_WIREDANDDRIVEPULLUPFILTER
}

Pin mode.

Functions#

void
GPIO_DbgLocationSet(unsigned int location)

Sets the pin location of the debug pins (Serial Wire interface).

void
GPIO_DriveModeSet(GPIO_Port_TypeDef port, GPIO_DriveMode_TypeDef mode)

Sets drive mode for a GPIO port.

void
GPIO_ExtIntConfig(GPIO_Port_TypeDef port, unsigned int pin, unsigned int intNo, bool risingEdge, bool fallingEdge, bool enable)

Configure the GPIO external pin interrupt.

void
GPIO_PinModeSet(GPIO_Port_TypeDef port, unsigned int pin, GPIO_Mode_TypeDef mode, unsigned int out)

Set the mode for a GPIO pin.

GPIO_PinModeGet(GPIO_Port_TypeDef port, unsigned int pin)

Get the mode for a GPIO pin.

void
GPIO_EM4EnablePinWakeup(uint32_t pinmask, uint32_t polaritymask)

Enable GPIO pin wake-up from EM4.

void

Enable/disable serial wire clock pin.

void
GPIO_DbgSWDIOEnable(bool enable)

Enable/disable serial wire data I/O pin.

void
GPIO_DbgSWOEnable(bool enable)

Enable/Disable serial wire output pin.

void
GPIO_EM4DisablePinWakeup(uint32_t pinmask)

Disable GPIO pin wake-up from EM4.

uint32_t

Check which GPIO pin(s) that caused a wake-up from EM4.

void

Enable GPIO pin retention of output enable, output value, pull enable, and pull direction in EM4.

void
GPIO_InputSenseSet(uint32_t val, uint32_t mask)

Enable/disable input sensing.

void
GPIO_IntClear(uint32_t flags)

Clear one or more pending GPIO interrupts.

void
GPIO_IntDisable(uint32_t flags)

Disable one or more GPIO interrupts.

void
GPIO_IntEnable(uint32_t flags)

Enable one or more GPIO interrupts.

uint32_t

Get enabled GPIO interrupts.

uint32_t

Get pending GPIO interrupts.

uint32_t

Get enabled and pending GPIO interrupt flags.

void
GPIO_IntSet(uint32_t flags)

Set one or more pending GPIO interrupts from SW.

void
GPIO_Lock(void)

Lock the GPIO configuration.

unsigned int
GPIO_PinInGet(GPIO_Port_TypeDef port, unsigned int pin)

Read the pad value for a single pin in a GPIO port.

void
GPIO_PinLock(GPIO_Port_TypeDef port, unsigned int pin)

Lock all GPIO configuration settings for a given pin.

void
GPIO_PinOutClear(GPIO_Port_TypeDef port, unsigned int pin)

Set a single pin in GPIO data out port register to 0.

unsigned int
GPIO_PinOutGet(GPIO_Port_TypeDef port, unsigned int pin)

Get current setting for a pin in a GPIO port data out register.

void
GPIO_PinOutSet(GPIO_Port_TypeDef port, unsigned int pin)

Set a single pin in GPIO data out register to 1.

void
GPIO_PinOutToggle(GPIO_Port_TypeDef port, unsigned int pin)

Toggle a single pin in GPIO port data out register.

uint32_t
GPIO_PortInGet(GPIO_Port_TypeDef port)

Read the pad values for GPIO port.

void
GPIO_PortOutClear(GPIO_Port_TypeDef port, uint32_t pins)

Set bits in DOUT register for a port to 0.

uint32_t
GPIO_PortOutGet(GPIO_Port_TypeDef port)

Get the current setting for a GPIO port data out register.

void
GPIO_PortOutSet(GPIO_Port_TypeDef port, uint32_t pins)

Set bits GPIO data out register to 1.

void
GPIO_PortOutSetVal(GPIO_Port_TypeDef port, uint32_t val, uint32_t mask)

Set GPIO port data out register.

void
GPIO_PortOutToggle(GPIO_Port_TypeDef port, uint32_t pins)

Toggle pins in GPIO port data out register.

void

Unlock the GPIO configuration.

Enumeration Documentation#

GPIO_Port_TypeDef#

GPIO_Port_TypeDef

GPIO ports IDs.

Enumerator
gpioPortA

Port A.

gpioPortB

Port B.

gpioPortC

Port C.

gpioPortD

Port D.

gpioPortE

Port E.

gpioPortF

Port F.


Definition at line 470 of file platform/emlib/inc/em_gpio.h

GPIO_DriveMode_TypeDef#

GPIO_DriveMode_TypeDef

GPIO drive mode.

Enumerator
gpioDriveModeStandard

Default 6mA.

gpioDriveModeLowest

0.5 mA.

gpioDriveModeHigh

20 mA.

gpioDriveModeLow

2 mA.


Definition at line 519 of file platform/emlib/inc/em_gpio.h

GPIO_Mode_TypeDef#

GPIO_Mode_TypeDef

Pin mode.

For more details on each mode, refer to the reference manual.

Enumerator
gpioModeDisabled

Input disabled.

gpioModeInput

Input enabled.

gpioModeInputPull

Input enabled.

gpioModeInputPullFilter

Input enabled with filter.

gpioModePushPull

Push-pull output.

gpioModePushPullDrive

Push-pull output with drive-strength set by DRIVEMODE.

gpioModeWiredOr

Wired-or output.

gpioModeWiredOrPullDown

Wired-or output with pull-down.

gpioModeWiredAnd

Open-drain output.

gpioModeWiredAndFilter

Open-drain output with filter.

gpioModeWiredAndPullUp

Open-drain output with pull-up.

gpioModeWiredAndPullUpFilter

Open-drain output with filter and pull-up.

gpioModeWiredAndDrive

Open-drain output with drive-strength set by DRIVEMODE.

gpioModeWiredAndDriveFilter

Open-drain output with filter and drive-strength set by DRIVEMODE.

gpioModeWiredAndDrivePullUp

Open-drain output with pull-up and drive-strength set by DRIVEMODE.

gpioModeWiredAndDrivePullUpFilter

Open-drain output with filter, pull-up and drive-strength set by DRIVEMODE.


Definition at line 556 of file platform/emlib/inc/em_gpio.h

Function Documentation#

GPIO_DbgLocationSet#

void GPIO_DbgLocationSet (unsigned int location)

Sets the pin location of the debug pins (Serial Wire interface).

Parameters
[in]location

The debug pin location to use (0-3).

Note

  • Changing the pins used for debugging uncontrolled, may result in a lockout.


Definition at line 74 of file platform/emlib/src/em_gpio.c

GPIO_DriveModeSet#

void GPIO_DriveModeSet (GPIO_Port_TypeDef port, GPIO_DriveMode_TypeDef mode)

Sets drive mode for a GPIO port.

Parameters
[in]port

The GPIO port to access.

[in]mode

Drive mode to use for the port.


Definition at line 102 of file platform/emlib/src/em_gpio.c

GPIO_ExtIntConfig#

void GPIO_ExtIntConfig (GPIO_Port_TypeDef port, unsigned int pin, unsigned int intNo, bool risingEdge, bool fallingEdge, bool enable)

Configure the GPIO external pin interrupt.

Parameters
[in]port

The port to associate with the pin.

[in]pin

The pin number on the port.

[in]intNo

The interrupt number to trigger.

[in]risingEdge

Set to true if the interrupt will be enabled on the rising edge. Otherwise, false.

[in]fallingEdge

Set to true if the interrupt will be enabled on the falling edge. Otherwise, false.

[in]enable

Set to true if the interrupt will be enabled after the configuration is complete. False to leave disabled. See GPIO_IntDisable() and GPIO_IntEnable().

It is recommended to disable interrupts before configuring the GPIO pin interrupt. See GPIO_IntDisable() for more information.

The GPIO interrupt handler must be in place before enabling the interrupt.

Notice that any pending interrupt for the selected interrupt is cleared by this function.

Note

  • On series 0 devices, the pin number parameter is not used. The pin number used on these devices is hardwired to the interrupt with the same number.
    On series 1 devices, the pin number can be selected freely within a group. Interrupt numbers are divided into 4 groups (intNo / 4) and valid pin number within the interrupt groups are: 0: pins 0-3 (interrupt number 0-3) 1: pins 4-7 (interrupt number 4-7) 2: pins 8-11 (interrupt number 8-11) 3: pins 12-15 (interrupt number 12-15)


Definition at line 177 of file platform/emlib/src/em_gpio.c

GPIO_PinModeSet#

void GPIO_PinModeSet (GPIO_Port_TypeDef port, unsigned int pin, GPIO_Mode_TypeDef mode, unsigned int out)

Set the mode for a GPIO pin.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin number in the port.

[in]mode

The desired pin mode.

[in]out

A value to set for the pin in the DOUT register. The DOUT setting is important for some input mode configurations to determine the pull-up/down direction.


Definition at line 347 of file platform/emlib/src/em_gpio.c

GPIO_PinModeGet#

GPIO_Mode_TypeDef GPIO_PinModeGet (GPIO_Port_TypeDef port, unsigned int pin)

Get the mode for a GPIO pin.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin number in the port.

Returns

  • The pin mode.


Definition at line 396 of file platform/emlib/src/em_gpio.c

GPIO_EM4EnablePinWakeup#

void GPIO_EM4EnablePinWakeup (uint32_t pinmask, uint32_t polaritymask)

Enable GPIO pin wake-up from EM4.

Parameters
[in]pinmask

A bitmask containing the bitwise logic OR of which GPIO pin(s) to enable. See Reference Manuals for a pinmask to the GPIO port/pin mapping.

[in]polaritymask

A bitmask containing the bitwise logic OR of GPIO pin(s) wake-up polarity. See Reference Manuals for pinmask-to-GPIO port/pin mapping.

When the function exits, EM4 mode can be safely entered.

Note


Definition at line 425 of file platform/emlib/src/em_gpio.c

GPIO_DbgSWDClkEnable#

void GPIO_DbgSWDClkEnable (bool enable)

Enable/disable serial wire clock pin.

Parameters
[in]enable
  • false - disable serial wire clock.

  • true - enable serial wire clock (default after reset).

Note

  • Disabling SWDClk will disable the debug interface, which may result in a lockout if done early in startup (before debugger is able to halt core).


Definition at line 627 of file platform/emlib/inc/em_gpio.h

GPIO_DbgSWDIOEnable#

void GPIO_DbgSWDIOEnable (bool enable)

Enable/disable serial wire data I/O pin.

Parameters
[in]enable
  • false - disable serial wire data pin.

  • true - enable serial wire data pin (default after reset).

Note

  • Disabling SWDClk will disable the debug interface, which may result in a lockout if done early in startup (before debugger is able to halt core).


Definition at line 654 of file platform/emlib/inc/em_gpio.h

GPIO_DbgSWOEnable#

void GPIO_DbgSWOEnable (bool enable)

Enable/Disable serial wire output pin.

Parameters
[in]enable
  • false - disable serial wire viewer pin (default after reset).

  • true - enable serial wire viewer pin.

Note

  • Enabling this pin is not sufficient to fully enable serial wire output, which is also dependent on issues outside the GPIO module. Refer to DBG_SWOEnable().

Warnings

  • If debug port is locked, SWO pin is not disabled automatically. To avoid information leakage through SWO, disable SWO pin after locking debug port.


Definition at line 688 of file platform/emlib/inc/em_gpio.h

GPIO_EM4DisablePinWakeup#

void GPIO_EM4DisablePinWakeup (uint32_t pinmask)

Disable GPIO pin wake-up from EM4.

Parameters
[in]pinmask

Bit mask containing the bitwise logic OR of which GPIO pin(s) to disable. Refer to Reference Manuals for pinmask to GPIO port/pin mapping.


Definition at line 721 of file platform/emlib/inc/em_gpio.h

GPIO_EM4GetPinWakeupCause#

uint32_t GPIO_EM4GetPinWakeupCause (void )

Check which GPIO pin(s) that caused a wake-up from EM4.

Parameters
N/A

Returns

  • Bit mask containing the bitwise logic OR of which GPIO pin(s) caused the wake-up. Refer to Reference Manuals for pinmask to GPIO port/pin mapping.


Definition at line 742 of file platform/emlib/inc/em_gpio.h

GPIO_EM4SetPinRetention#

void GPIO_EM4SetPinRetention (bool enable)

Enable GPIO pin retention of output enable, output value, pull enable, and pull direction in EM4.

Parameters
[in]enable
  • true - enable EM4 pin retention.

  • false - disable EM4 pin retention.

Note

  • On series 0 devices EM4 gpio retention can either be turned on or off. On series 1 devices there are three EM4 GPIO retention modes available. These modes are "Disabled", "EM4EXIT" and "SWUNLATCH". Use the EMU_EM4Init() to configure the GPIO retention mode on a series 1 device.

The behavior of this function depends on the configured GPIO retention mode. If the GPIO retention mode is configured to be "SWUNLATCH" then this function will not change anything. If the retention mode is anything else then this function will set the GPIO retention mode to "EM4EXIT" when the enable argument is true, and "Disabled" when false.


Definition at line 774 of file platform/emlib/inc/em_gpio.h

GPIO_InputSenseSet#

void GPIO_InputSenseSet (uint32_t val, uint32_t mask)

Enable/disable input sensing.

Parameters
[in]val

Bitwise logic OR of one or more of:

  • GPIO_INSENSE_INT - interrupt input sensing.

  • GPIO_INSENSE_PRS - peripheral reflex system input sensing.

[in]mask

Mask containing bitwise logic OR of bits similar as for val used to indicate which input sense options to disable/enable.

Disabling input sensing if not used, can save some energy consumption.


Definition at line 827 of file platform/emlib/inc/em_gpio.h

GPIO_IntClear#

void GPIO_IntClear (uint32_t flags)

Clear one or more pending GPIO interrupts.

Parameters
[in]flags

Bitwise logic OR of GPIO interrupt sources to clear.


Definition at line 844 of file platform/emlib/inc/em_gpio.h

GPIO_IntDisable#

void GPIO_IntDisable (uint32_t flags)

Disable one or more GPIO interrupts.

Parameters
[in]flags

GPIO interrupt sources to disable.


Definition at line 860 of file platform/emlib/inc/em_gpio.h

GPIO_IntEnable#

void GPIO_IntEnable (uint32_t flags)

Enable one or more GPIO interrupts.

Parameters
[in]flags

GPIO interrupt sources to enable.

Note

  • Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. To ignore a pending interrupt, consider using GPIO_IntClear() prior to enabling the interrupt.


Definition at line 877 of file platform/emlib/inc/em_gpio.h

GPIO_EnabledIntGet#

uint32_t GPIO_EnabledIntGet (void )

Get enabled GPIO interrupts.

Parameters
N/A

Returns

  • Enabled GPIO interrupt sources.


Definition at line 890 of file platform/emlib/inc/em_gpio.h

GPIO_IntGet#

uint32_t GPIO_IntGet (void )

Get pending GPIO interrupts.

Parameters
N/A

Returns

  • GPIO interrupt sources pending.


Definition at line 902 of file platform/emlib/inc/em_gpio.h

GPIO_IntGetEnabled#

uint32_t GPIO_IntGetEnabled (void )

Get enabled and pending GPIO interrupt flags.

Parameters
N/A

Useful for handling more interrupt sources in the same interrupt handler.

Note

  • Interrupt flags are not cleared by the use of this function.

Returns

  • Pending and enabled GPIO interrupt sources. The return value is the bitwise AND combination of

    • the OR combination of enabled interrupt sources in GPIO_IEN register and

    • the OR combination of valid interrupt flags in GPIO_IF register.


Definition at line 922 of file platform/emlib/inc/em_gpio.h

GPIO_IntSet#

void GPIO_IntSet (uint32_t flags)

Set one or more pending GPIO interrupts from SW.

Parameters
[in]flags

GPIO interrupt sources to set to pending.


Definition at line 941 of file platform/emlib/inc/em_gpio.h

GPIO_Lock#

void GPIO_Lock (void )

Lock the GPIO configuration.

Parameters
N/A

Definition at line 954 of file platform/emlib/inc/em_gpio.h

GPIO_PinInGet#

unsigned int GPIO_PinInGet (GPIO_Port_TypeDef port, unsigned int pin)

Read the pad value for a single pin in a GPIO port.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin number to read.

Returns

  • The pin value, 0 or 1.


Definition at line 972 of file platform/emlib/inc/em_gpio.h

GPIO_PinLock#

void GPIO_PinLock (GPIO_Port_TypeDef port, unsigned int pin)

Lock all GPIO configuration settings for a given pin.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin number to lock.

The lock can only be cleared by a chip reset.


Definition at line 991 of file platform/emlib/inc/em_gpio.h

GPIO_PinOutClear#

void GPIO_PinOutClear (GPIO_Port_TypeDef port, unsigned int pin)

Set a single pin in GPIO data out port register to 0.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin to set.

Note

  • To ensure that the setting takes effect on the output pad, the pin must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1020 of file platform/emlib/inc/em_gpio.h

GPIO_PinOutGet#

unsigned int GPIO_PinOutGet (GPIO_Port_TypeDef port, unsigned int pin)

Get current setting for a pin in a GPIO port data out register.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin to get setting for.

Returns

  • The DOUT setting for the requested pin, 0 or 1.


Definition at line 1045 of file platform/emlib/inc/em_gpio.h

GPIO_PinOutSet#

void GPIO_PinOutSet (GPIO_Port_TypeDef port, unsigned int pin)

Set a single pin in GPIO data out register to 1.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin to set.

Note

  • To ensure that the setting takes effect on the output pad, the pin must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1067 of file platform/emlib/inc/em_gpio.h

GPIO_PinOutToggle#

void GPIO_PinOutToggle (GPIO_Port_TypeDef port, unsigned int pin)

Toggle a single pin in GPIO port data out register.

Parameters
[in]port

The GPIO port to access.

[in]pin

The pin to toggle.

Note

  • To ensure that the setting takes effect on the output pad, the pin must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1094 of file platform/emlib/inc/em_gpio.h

GPIO_PortInGet#

uint32_t GPIO_PortInGet (GPIO_Port_TypeDef port)

Read the pad values for GPIO port.

Parameters
[in]port

The GPIO port to access.

Returns

  • The pad values for the GPIO port.


Definition at line 1117 of file platform/emlib/inc/em_gpio.h

GPIO_PortOutClear#

void GPIO_PortOutClear (GPIO_Port_TypeDef port, uint32_t pins)

Set bits in DOUT register for a port to 0.

Parameters
[in]port

The GPIO port to access.

[in]pins

Bit mask for bits to clear in DOUT register.

Note

  • To ensure that the setting takes effect on the output pad, the pin must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1139 of file platform/emlib/inc/em_gpio.h

GPIO_PortOutGet#

uint32_t GPIO_PortOutGet (GPIO_Port_TypeDef port)

Get the current setting for a GPIO port data out register.

Parameters
[in]port

The GPIO port to access.

Returns

  • The data out setting for the requested port.


Definition at line 1161 of file platform/emlib/inc/em_gpio.h

GPIO_PortOutSet#

void GPIO_PortOutSet (GPIO_Port_TypeDef port, uint32_t pins)

Set bits GPIO data out register to 1.

Parameters
[in]port

The GPIO port to access.

[in]pins

Bit mask for bits to set to 1 in DOUT register.

Note

  • To ensure that the setting takes effect on the respective output pads, the pins must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1183 of file platform/emlib/inc/em_gpio.h

GPIO_PortOutSetVal#

void GPIO_PortOutSetVal (GPIO_Port_TypeDef port, uint32_t val, uint32_t mask)

Set GPIO port data out register.

Parameters
[in]port

The GPIO port to access.

[in]val

Value to write to port data out register.

[in]mask

Mask indicating which bits to modify.

Note

  • To ensure that the setting takes effect on the respective output pads, the pins must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1213 of file platform/emlib/inc/em_gpio.h

GPIO_PortOutToggle#

void GPIO_PortOutToggle (GPIO_Port_TypeDef port, uint32_t pins)

Toggle pins in GPIO port data out register.

Parameters
[in]port

The GPIO port to access.

[in]pins

Bit mask with pins to toggle.

Note

  • To ensure that the setting takes effect on the output pad, the pin must be configured properly. If not, it will take effect whenever the pin has been properly configured.


Definition at line 1237 of file platform/emlib/inc/em_gpio.h

GPIO_Unlock#

void GPIO_Unlock (void )

Unlock the GPIO configuration.

Parameters
N/A

Definition at line 1283 of file platform/emlib/inc/em_gpio.h