# General Purpose Input/Output

Els ports GPIO (General Purpose Input/Output, en anglès Entrada/Sortida per a un Ús General) són un tipus de ports d'entrada/sortida molt utilitzats en el món dels microcontroladors, en particular en l'entorn de l'electronica de sistemes incrustats, des de llur aparició cap al començament dels anys 1980.

## Ús

Un connector GPIO ofereix a una placa electrònica la possibilitat de comunicar-se amb altres circuits.
El GPIO és un element molt present en la informàtica. Certes plaques mare com la Intel® NUC DE3815TYBE, o bé plaques de prova com la DSP, integren connectors o instruccions específiques del GPIO. La Raspberry Pi disposa d'un connector GPIO des de la seva primera versió, això fa que a més del seu ús com a ordinador personal, també es pugui utilitzar com a controlador d'aplicacions purament electròniques, seguint el model de Stellaris Launchpad o d'Arduino. Altres models de plaques, com ara la BeagleBoard, també integren ports GPIO.

## Programació

Diferents biblioteques faciliten la programació dels connectors GPIO. La RaspberryPi, per exemple, disposa de wiringPi per al llenguatge C, RPi.GPIO per al llenguatge Python o Pi4J per al llenguatge Java. En algunes arquitectures també s'hi pot accedir directament des del processador. Per exemple, es pot tenir accés al GPIO del RaspberryPi incloent simplement el fitxer bcm2835.h, mòdul específic del processador Broadcom BCM 2835 (es troba ja instal·lat a cada RaspberryPi, en un codi font en llenguatge C, això estalvia la necessitat d'utilitzar altres biblioteques).
Linux reconeix de forma nativa els ports GPIO. La documentació completa es troba en el lloc oficial del kernel, on s'explica com programar els controladors de dispositius.
Microsoft Windows integra també una API de desenvolupament específica per a la creació de controladors GPIO.

## Capacitats

Un connector GPIO pot estar configurat per actuar com a entrada (recepció d'un senyal) o com a sortida (emissió d'un senyal). Quan es configura com a sortida, el senyal que es vol emetre s'ha d'escriure en un registre intern. Quan es configura com a entrada, es pot conèixer el seu estat actuant també amb un registre intern, en aquest cas llegint-lo.
Un connector GPIO només pot tractar senyals binaris del tipus 1 o 0. En altre cas, caldrà una connexió de suport analògica del tipus CAN/CNA com passa amb el MCP3008.
Els perifèrics GPIO poden generar interrupcions, amb les quals s'informa d'un canvi d'estat en una entrada.
Un connector GPIO té una alimentació generalment de 3.3Vcc i només pot emetre corrents d'intensitat dèbil, de 3mA a 50mA, per la qual cosa no actuen normalment de forma directa sobre els perifèrics sinó que envien senyals que cal amplificar.

## Vegeu també

* Entrades-Sortides
* Bus informàtic
* Microcontrolador
* Microprocessador
* I2C

## Referències

* ↑ http://www.series80.org/PDFs/HP82940A-GPIO.pdf%5BEnllaç+no+actiu%5D
* ↑ http://www.intel.fr/content/www/fr/fr/nuc/nuc-board-de3815tybe.html
* ↑ http://www.ti.com/product/tms320c6474
* ↑ http://tronixstuff.com/2014/01/29/tutorial-pcduino-gpio-arduino-ide/ Arxivat 2014-11-09 a Wayback Machine.
* ↑ http://mchobby.be/wiki/index.php?title=Rasp-Hack-GPIO_Connecteur%5BEnllaç+no+actiu%5D
* ↑ http://www.ti.com/tool/ek-lm4f120xl Arxivat 2014-12-13 a Wayback Machine.
* ↑ https://www.stlo.unicaen.fr/sc12-g2b/index.php/fr/la-librairie-wiring-pi Arxivat 2014-12-19 a Wayback Machine.
* ↑ https://pypi.python.org/pypi/RPi.
* ↑ http://pi4j.com/
* ↑ http://www.airspayce.com/mikem/bcm2835/
* ↑ http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf
* ↑ http://oversimple.fr/tag/bcm2835/
* ↑ https://www.kernel.org/doc/Documentation/gpio
* ↑ http://www.ctcom.com.tw/doc/324257.pdf Arxivat 2016-03-03 a Wayback Machine.
* ↑ http://msdn.microsoft.com/en-us/library/windows/hardware/hh439512%28v=vs.85%29.aspx
* ↑ https://learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf
* ↑ http://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/4346/4346-4-rpi-gpio.pdf
* ↑ https://mespotesgeek.fr/controle-dun-dispositif-basse-tension-via-raspberry-pi/ Arxivat 2014-11-11 a Wayback Machine.