GPIO (General Purpose Input/Output) bezeichnet frei programmierbare digitale Ein- und Ausgänge eines integrierten Schaltkreises, beispielsweise eines Mikrocontrollers, Mikroprozessors oder SoC. Diese Pins besitzen zunächst keine fest definierte Funktion und können per Software konfiguriert werden. Dadurch lassen sich unterschiedliche externe Signale erfassen oder elektronische Komponenten direkt ansteuern.
GPIO-Pins stellen eine grundlegende Schnittstelle zwischen der digitalen Logik eines Prozessors und der Außenwelt dar. Über sie können Sensoren, Schalter oder Kommunikationsleitungen angeschlossen werden. Gleichzeitig lassen sich über GPIO-Ausgänge beispielsweise LEDs, Relais, Treiber oder andere elektronische Baugruppen steuern.
Inhalt
Funktionsprinzip
Ein GPIO-Pin kann typischerweise in zwei grundlegenden Betriebsarten verwendet werden:
Input (Eingang): Der Mikrocontroller liest den logischen Zustand eines externen Signals ein. Häufig wird dabei zwischen zwei Zuständen unterschieden: High und Low.
Output (Ausgang): Der Mikrocontroller setzt aktiv einen logischen Pegel an einem Pin und steuert damit externe Komponenten.
Pins sind meist zu Ports zusammengefasst. Ein Port besteht aus mehreren Pins, die gemeinsam über ein Register angesprochen werden können. Dadurch lassen sich mehrere Signale gleichzeitig lesen oder schreiben.
Um ein Port zu lesen oder zu schreiben müssen die Register, je nach Busweite 32 oder 64 Bit, mit bitweiser Arithmetik gelesen oder geschrieben werden.
Programmierung von GPIO-Pins
Die Konfiguration und Steuerung von GPIO-Pins erfolgt über Hardware-Register des Mikrocontrollers. Diese Register befinden sich im Speicherbereich des Controllers und können direkt durch Software beschrieben werden. Viele Mikrocontroller-Hersteller haben definierte Software-Stacks für GPIO-Routinen. Gerade im Aerospace- oder Bahn-Kontext ist es absolut üblich Treiber und Low-Level-Software für Peripherie wie GPIOs selbst zu schreiben.
Ein wichtiges Register ist das GPIO Mode Register. Dieses Register legt fest, in welchem Betriebsmodus sich ein Pin befindet. Das Register ist typischerweise 32 Bit breit, wobei für jeden Pin zwei Bits reserviert sind.
Die möglichen Betriebsmodi sind häufig:
- Input Mode
Der Pin arbeitet als digitaler Eingang. - General Purpose Output Mode
Der Pin wird als digitaler Ausgang verwendet. - Alternate Function Mode
Der Pin übernimmt eine spezielle Hardwarefunktion, beispielsweise für UART, SPI, I²C oder Timer

Letztere Punkt bedeutet, dass wenn eine Peripherie-Funktion erfordert wird, bei den meisten Mikrocontrollern der GPIO ebenfalls initialisiert werden muss (Portclock und Mode Register).
Für den Falle Output wird dann über das GPIO Output Data Register der Wert gesetzt. Über dieses Register wird der Ausgangszustand eines Pins gesteuert. Wird ein Bit gesetzt oder gelöscht, ändert sich entsprechend der logische Pegel am zugehörigen GPIO-Pin.

In vielen Mikrocontrollern existieren zusätzlich weitere Register für:
- Pull-up / Pull-down-Konfiguration
- Ausgangsgeschwindigkeit
- Open-Drain oder Push-Pull-Ausgangsmodi
Typische Anwendungen
GPIO-Pins werden in Embedded-Systemen für zahlreiche Aufgaben verwendet, zum Beispiel:
- Einlesen von Tastern oder Schaltern
- Ansteuerung von LEDs
- Steuerung von Relais oder Motoren
- Kommunikation mit einfachen Peripheriegeräten
Darüber hinaus können GPIO-Pins verwendet werden, um Kommunikationsprotokolle rein softwarebasiert zu implementieren. Verfahren wie I²C oder SPI lassen sich beispielsweise über sogenannte Bit-Banging-Techniken realisieren.
Interrupts bei GPIO
Eine der wichtigsten Funktionen von GPIO-Pins ist die Möglichkeit, Interrupts auszulösen. Dabei reagiert der Mikrocontroller unmittelbar auf ein externes Ereignis an einem GPIO-Pin, ohne dass die Software den Pin kontinuierlich abfragen muss.
Prinzipiell könnte ein Programm den Zustand eines GPIO-Pins regelmäßig prüfen (sogenanntes Polling). Das jedoch frisst Runtime, da der Prozessor permanent Ressourcen aufwenden muss, um den Pin zu überwachen. Mit Interrupts kann stattdessen ein Ereignis – beispielsweise ein Signalwechsel an einem Pin – automatisch eine Interrupt-Service-Routine (ISR) auslösen.
Wird ein solches Ereignis erkannt, unterbricht der Mikrocontroller kurz die aktuelle Programmausführung und springt zur zugehörigen Interrupt-Routine. Dort kann das Ereignis verarbeitet werden, etwa das Einlesen eines Tasters, das Starten einer Messung oder das Reagieren auf ein externes Signal.
Gerade in Embedded Systems sind GPIO-Interrupts von großer Bedeutung, da sie eine ereignisgesteuerte Programmierung ermöglichen. Dadurch kann der Prozessor energieeffizient arbeiten und gleichzeitig sehr schnell auf externe Ereignisse reagieren. Interrupts werden daher häufig für zeitkritische Signale, Benutzerinteraktionen oder externe Kommunikationsschnittstellen eingesetzt.
Fazit
GPIOs gehören zu den wichtigsten Schnittstellen eines Mikrocontrollers. Sie ermöglichen eine flexible Verbindung zwischen digitaler Logik und externer Hardware. Durch ihre programmierbare Konfiguration können sie in unterschiedlichsten Anwendungen eingesetzt werden und bilden damit eine grundlegende Komponente vieler Embedded-Systeme.