Mikrokontrolery Infineon XMC4500 w praktyce, część 4. Obsługa GPIO
W artykule pokazano w jaki sposób, przy wykorzystaniu pakietu DAvE 3, napisać program sterujący portami wejścia/wyjścia mikrokontrolera z rodziny XMC4000 firmy Infineon. Jako platformę sprzętową wykorzystano płytkę uruchomieniową XMC4500 Relax Kit (dostępna jest także jej tańsza wersja, pozbawiona interfejsu Ethernet – XMC4500 Relax Kit Lite).
Porty wejścia/wyjścia to podstawowy zasób wewnętrzny każdego mikrokontrolera. Realizowane przez porty zadania to odczytywanie stanów logicznych z wyprowadzeń mikrokontrolera oraz wystawianie stanów logicznych na wyprowadzenia mikrokontrolera. Na podstawie pierwszej funkcjonalności możliwe jest np. zrealizowanie interfejsu użytkownika poprzez odczytywanie stanów przycisków klawiatury. Na bazie drugiej funkcjonalności możliwe jest np. zrealizowanie prostych systemów sterowania poprzez zmianę stanu przekaźników, kluczy tranzystorowych, diod LED itp. Dodatkowo porty wejścia/wyjścia są wykorzystywane przez niektóre zasoby wewnętrzne mikrokontrolera np. do odczytu wartości napięcia przez przetwornik A/C, bądź do realizacji transmisji danych przez interfejsy komunikacyjne.
Budowa portów wejścia wyjścia w mikrokontrolerze z rodziny XMC4500
W mikrokontrolerach XMC4500 występują dwa rodzaje portów: typu cyfrowego oraz typu analogowego. Ich budowę przedstawiono na rysunku 1.
Port cyfrowy składa się z dwóch modułów: modułu cyfrowego ( slice ) z rejestrami i logiką sterującą oraz modułu analogowego ze stopniem buforującym wejście/wyjście. Port tego typu może być używany zarówno do wystawiania stanów logicznych na wyprowadzeniu mikrokontrolera, jak też do odczytywania stanów logicznych z wyprowadzeniu mikrokontrolera. W przypadku wystawiania stanu logicznego 0, sygnał ma poziom napięcia równy ujemnemu potencjałowi napięcia zasilania. W przypadku wystawiania stanu logicznego 1, sygnał ma poziom napięcia równy dodatniemu potencjałowi napięcia zasilania. Gdy port odczytuje stan logiczny, umieszczony w bloku analogowym portu przerzutnik Schmidta klasyfikuje poziom napięcia do wartości logicznej 0 lub 1.
Port analogowy ma za zadanie tylko odczytywać sygnał z wyprowadzenia mikrokontrolera, dlatego w jego module cyfrowym i analogowym, w porównaniu do modułu cyfrowego i analogowego w porcie cyfrowym, nie ma elementów odpowiedzialnych za wystawianie stanów logicznych na wyprowadzeniu mikrokontrolera.
Rys. 1. Budowa portu mikrokontrolera XMC4500 (z lewej strony port cyfrowy, z prawej strony port analogowy) [1]
Oznaczenia rejestrów sterujących portami wejścia/wyjścia wraz z pełną ich nazwą przedstawiono w tabeli 1 [1].
Tab. 1. Oznaczenia oraz nazwy rejestrów sterujących portami wejścia/wyjścia
Rejestr | Pełna nazwa rejestru |
Pn_OUT | Port n Output Register |
Pn_OMR | Port n Output Modification Register |
Pn_IOCR0 | Port n Input/Output Control Register 0 |
Pn_IOCR4 | Port n Input/Output Control Register 4 |
Pn_IOCR8 | Port n Input/Output Control Register 8 |
Pn_IOCR12 | Port n Input/Output Control Register 12 |
Pn_IN | Port n Input Register |
Pn_PDR0 | Port n Pad Driver Mode 0 Register |
Pn_PDR1 | Port n Pad Driver Mode 1 Register |
Pn_PDISC | Port n Pin Function Decision Control Register (non-ADC ports) |
P14_PDISC | Port 14 Pin Function Decision Control Register (ADC ports) |
P15_PDISC | Port 15 Pin Function Decision Control Register (ADC ports) |
Pn_PPS | Port n Pin Power Save Register |
Pn_HWSEL | Port n Hardware Select Register |
DAvE Apps przewidziane do sterowania portami wejścia/wyjścia
Firma Infineon opracowała cztery komponenty oprogramowania DAvE Apps przewidziane do sterowania portami wejścia/wyjścia: IO001, IO002, IO003 oraz IO004. W tabeli 2 przedstawiono krótki opis komponentów oraz ich API ( Application Programming Interface ). Kompletna dokumentacja dotycząca komponentów IO001, IO002, IO003 oraz IO004 znajduje się w systemie pomocy pakietu DAvE 3.
Tab. 2. Opis komponentów DAvE Apps (i ich funkcji) umożliwiających sterowanie portami wejścia/wyjścia [2]
Nazwa komponentu DAvE App | API (funkcje i definicje) komponentów DAvE Apps | Opis |
IO001 | Sterowanie portami analogowymi | |
IO001_Init() | Inicjalizacja portu | |
IO001_ReadPin() | Odczyt stanu logicznego z wyprowadzenia mikrokontrolera | |
IO001_EnableAnalogInput() | Ustawienie portu do pracy w trybie analogowym | |
IO001_EnableDigitalInput() | Ustawienie portu do pracy w trybie cyfrowym | |
IO002/IO004 | Sterowanie portami cyfrowymi | |
IO002_Init() IO004_Init() |
Inicjalizacja portu | |
IO002_DisableOutputDriver() IO004_DisableOutputDriver() |
Ustawienie portu do pracy w trybie wejścia | |
IO002_EnableOutputDriver() IO004_EnableOutputDriver() |
Ustawienie portu do pracy w trybie wyjścia | |
IO002_ReadPin() IO004_ReadPin() |
Odczyt stanu logicznego z wyprowadzenia mikrokontrolera | |
IO002_SetPin() IO004_SetPin() |
Ustawienie wartości 1 na wyprowadzenia mikrokontrolera | |
IO002_ResetPin() | Ustawienie wartości 0 na wyprowadzenia mikrokontrolera | |
IO002_SetOutputValue() IO004_SetOutputValue() |
Ustawienie wskazanego stanu logicznego na wyprowadzeniu mikrokontrolera | |
IO002_TogglePin() IO004_TogglePin() |
Zmiana stanu logicznego na przeciwny na wyprowadzeniu mikrokontrolera | |
IO003 | Sterowanie grupą wyprowadzeń mikrokontrolera | |
IO003_ReadPort() | Odczyt wartości z wyprowadzeń mikrokontrolera | |
IO003_WritePort() | Ustawienie wskazanej wartości na wyprowadzeniach mikrokontrolera | |
IO003_TogglePort() | Zmiana wartości na przeciwny na wyprowadzeniach mikrokontrolera |