STM32Butterfly2: obsługa joysticka
Po przeprowadzeniu konfiguracji program definiuje zmienną pomocniczą i przechodzi do nieskończonej pętli while, podczas której wykonywane są operacje odczytu i ustawiania danych. W pierwszym kroku pętli następuje zdefiniowanie zmiennej jkey, przechowującej informacje o stanie joysticka. Automatycznie do zmiennej następuje przypisanie odpowiedniej wartości przez funkcję joy_keys(), listing jej wnętrza został przedstawiony poniżej.
static inline int joy_keys(void) { return (~io_get_mask(JOY_PORT, JOY_BITS) & JOY_BITS) >> JOY_PIN_OK; }
Jak się okazuje, działanie funkcji polega na zwróceniu wartości prezentującej stany linii, do których podłączony jest joystick. Realizuje to funkcja io_get_mask, która jako pierwszy parametr przyjmuje nazwę portu GPIO, a jako drugi parametr maskę ograniczającą odczyt tylko do wskazanych bitów rejestru prezentującego stan linii. Negacja otrzymanej wartości wynika z faktu, iż aktywnym stanem na linii joysticka jest stan niski, z tego też powodu występuje nastopny iloczyn z maską określającą linie joysticka. Natomiast przesunięcie w prawo ma za zadanie przekształcenie wartości do takiej postaci, gdzie w kolejności od najmłodszego bitu poszczególne bity będą przedstawiały linie: joystick wciśnięty, pozycja joysticka przesunięta do góry, pozycja joysticka przesunięta do dołu, pozycja joysticka przesunięta w prawo i pozycja joysticka przesunięta w lewo.
W następnym kroku sprawdzany jest warunek czy joystick nie został wciśnięty, realizowane jest to przez iloczyn logiczny zmiennej jkey i maski określającej linie „OK”. W przypadku spełnienia warunku następuje przypisanie do zmiennej jkey wartości 0. Jeśli warunek nie został spełniony, realizowane jest działanie sumy logicznej na zmiennej jkey. W wyniku tego działania ustawiane są odpowiednie bity zmiennej, odpowiadające za konkretne diody LED.
Ostatnim etapem jest ustawienie odpowiednich stanów na liniach, do których podpięty jest moduł z diodami LED. Operacja ta jest realizowana poprzez funkcję io_set_clr_mask. Jako pierwszy parametr przyjmowana jest nazwa portu GPIO, jako druki parametr wartość, której poszczególne bity prezentują linie do ustawienia w stan wysoki (wartość bitu ‘1’) lub w stan niski (wartość bitu ‘0’). Ostatni parametr funkcji jest maską ograniczającą działanie tylko na wskazanych liniach.