GPIO w Linuxie

W poprzednim artykule opisałem jak dobrać się do diod w zestawie devkit8000. Jest to rozwiązanie dobre tylko wtedy, gdy rzeczywiście są to diody na stałe przylutowane do nóżki mikrokontrolera. W większości przypadków chcielibyśmy wykorzystywać tę samą nóżkę wiele razy i stosować ją jako wejście lub wyjście. Do tego celu służą nam porty GPIO, aby je uaktywnić w jądrze systemu należy wejść w katalogu z jądrem (linux-2.6.28omap) i napisać komendę "make menuconfig". Tu może was spotkać przykra niespodzianka. Pierwsza jest taka, że graficzny interfejs konfiguracyjny może nie być obsługiwany przez system 64 bitowy i będziecie musieli doinstalować biblioteki dla systemu 64 bitowego (oczywiście w terminalu będą informacje jak takie biblioteki się nazywają), druga przykra wiadomość to taka, że w konsoli yaquake nie otworzycie graficznej konfiguracji, ponieważ wyświetlacz tej konsoli jest za mały i będziecie musieli otworzyć zwykły terminal. Gdy już wam się uda otworzyć graficzny interfejs konfiguracyjny jądra należy wyszukać Device Driver --> GPIO Support --> [*] /sys/class/gpio/... Tak jak na obrazku:

Oczywiście po zapisaniu zmian tworzymy obraz jądra komendą "make uImage" i wgrywamy go na kartę SD. W nowopowstałym katalogu /sys/class/gpio/ znajdują się pliki konfiguracyjne portów GPIO oraz katalogi z aktualnie używanymi nóżkami mikrokontrolera. Wykonajmy takie samo zadanie jak w poprzednim artykule, tylko za pomocą GPIO. Aby zapalić diodę led2 należy przesłać do pliku export numer nóżki na której jest podpięta dioda. W naszym przypadku jest to nóżka 163. W pliku konfiguracyjnym z poprzedniego artykułu można zauważyć, że ta nóżka ma podpięte wyzwalacze, dlatego zaświecimy diodę led3 która jest podpięta do nóżki 164, wysyłamy tę liczbę za pomocą polecenia:

echo 164 > /sys/class/gpio/export

Po wykonaniu tego polecenia zostanie utworzony katalog gpio164 w którym będą znajdować się pliki konfiguracyjne dla naszej nóżki o numerze 164. Nas będzie interesować pliki direction (ustawinie kierunku portu) oraz plik value (wartość na nóżce). Aby ustawić port jako wyjście należy użyć polecenia:

echo out > /sys/class/gpio/gpio164/direction

Teraz mamy już skonfigurowany port jako wyjście. Aby sterować napięciem na nóżce wystarczy zapisać do pliku value 0 lub 1:

echo 0 > /sys/calss/gpio/gpio164/value
echo 1 > /sys/calss/gpio/gpio164/value

W taki sposób uzyskamy ten sam efekt co w poprzednim ćwiczeniu z diodami. W ten sposób możemy dostać się do nóżek mikrokontrolera, a po wykonaniu zadania możemy zwolnić daną nóżkę za pomocą komendy:

echo 164 > /sys/class/gpio/unexport

Całość możecie zobaczyć na poniższym logu z konsoli:

Taką samą procedurę można przeprowadzić dla przycisku. Wystarczy ustawić interesujący nas przycisk jako wejście i odczytywać stan pinu z pliku value. W zestawie Devkit8000 mamy zamontowane 4 mikroprzyciski, aby z nich skorzystać należy zobaczyć do jakiej nóżki są podłączone i wykonać podobne operację co poprzednio. My wybierzemy przycisk opisany jako "user_key", z noty katalogowej zestawu odczytujemy, że jest podłączony do nóżki o numerze 26 i używamy tego wyprowadzenia jako port GPIO:

echo 26 > /sys/class/gpio/export

Następnie wybieramy tę nóżkę jako wejście:

echo out > /sys/class/gpio/gpio126/direction

Te dwa polecenia sprawiają, że nóżka o numerze 26 jest przyciskiem, teraz wystarczy sprawdzić stan nóżki pleceniem dla wciśniętego przycisku i dla niewciśniętego przycisku:

cat /sys/class/gpio/gpio26/value

Wciśnięty przycisk powinien dać nam wartość 0, ponieważ zwieramy go do masy, a rozwarty przycisk powinien dać nam wartość 1, ponieważ jest podciągnięty do napięcia poprzez pull-up. Logi przy zwartym i rozwartym przycisku można znaleźć poniżej: