Sterowanie portami w mikroprocesorze STM32MP może odbywać się za pośrednictwem rdzenia Cortex-M4 (w przypadku serii STM32MP1) lub Cortex-M33 (w przypadku STM32MP2), o ile rdzeń jest dostępny. Czasami jednak chcemy mieć możliwość kontrolowania pracy portu GPIO bezpośrednio z poziomu systemu operacyjnego Linux. W tym celu możemy oczywiście przekazywać informacje o tym, w jakim stanie ma znajdować się port GPIO, do koprocesora. Niestety wymaga to pisania dodatkowego kodu odpowiedzialnego za komunikację pomiędzy rdzeniami. Takie rozwiązanie wprowadza pewne opóźnienie w wykonywanym kodzie.
W kolejnych odcinkach kursu zostanie zaprezentowana procedura pozwalająca na nawiązanie komunikacji pomiędzy rdzeniami, wraz z jej potencjalnym zastosowaniem w prostych, jak i bardziej złożonych projektach. Już teraz możemy natomiast powiedzieć, że użycie tego rodzaju komunikacji okazuje się przydatne sytuacjach, w których dodatkowy rdzeń odpowiada za komunikację z zewnętrznymi układami za pomocą interfejsu SPI, I²C, etc., a główny procesor dokonuje obróbki danych, wyświetlania wartości na ekranie itp.
Jeżeli stawiamy na szybkość działania kodu bądź z innych względów nie chcemy angażować dodatkowego rdzenia, do sterowania portem GPIO możemy zastosować główny rdzeń, pracujący pod kontrolą systemu Linux.
Sterowanie LED
W omawianym przykładzie skorzystamy z portu GPIO, do którego na płytce STM32MP157C-DK2 podłączona jest niebieska dioda LED o oznaczeniu LD8. Domyślnie dioda sygnalizuje działanie rdzenia z Linuxem i imituje bicie serca.
Sterowanie diodą odbywać może się na dwa sposoby: z poziomu terminala (konsoli systemu Linux) lub bezpośrednio z poziomu kodu. Zaprezentowane zostaną oba podejścia, z uwagi na różnice wynikające ze sposobu ich użycia oraz zakresu potencjalnych zastosowań we własnych projektach.
Sterowanie LED z terminalu Linux
Sterowanie portem GPIO z poziomu terminala jest wygodnym i szybkim sposobem na zmianę aktualnego stanu danego pinu wyjściowego lub odczytanie poziomu logicznego na wejściu, bez konieczności wykonywania złożonego kodu. Może być również przydatne w momencie, gdy chcemy dokonać szybkiej zmiany stanu wyjścia niezależnie od wykonywanego kodu głównego lub w przypadku, gdy w kodzie nie znajduje się funkcja pozwalająca nam na takie działanie.
Nie będziemy ponownie pokazywać procedury nawiązywania komunikacji z naszą płytką za pośrednictwem SSH – wszystkie niezbędne działania zostały już zaprezentowane we wcześniejszych odcinkach tego kursu.