Aplikacje zestawu Freescale KwikStik K40: obsługa UART
Dla początkujących – co to jest przerwanie? Pisząc program reagujący na takie akcje użytkownika jak naciśnięcie przycisku czy przesłanie danych przez interfejs UART w najprostszym przypadku moglibyśmy stworzyć pętlę, w której sprawdzalibyśmy, czy dane zdarzenie miało miejsce, ale jest to mało eleganckie i nieefektywne rozwiązanie. Lepszą drogą jest wykorzystanie mechanizmu przerwań, który najprościej mówiąc umożliwia automatyczne wywołanie funkcji w odpowiedzi na zdarzenie. Nazwy tych funkcji zdefiniowane są w pliku z kodem rozruchowym, przykładowo dla zdarzeń związanych z transmisją interfejsu UART5 tworzymy funkcję UART5_RX_TX_IRQHandler. |
Tak jak w poprzednim artykule wykorzystane zostaną: zestaw uruchomieniowy KwikStik, płytka bazowa KwikStikBase oraz moduł KAmodLED (moduł z 8 diodami LED i buforem 74LVC541). Niezbędny okaże się zapewne również konwerter RS-232<->USB, chyba że czytelnik posiada komputer ze złączem RS-232. Sposób połączenia przedstawiono na rysunku poniżej.
Przykładowy program po uruchomieniu wyśle przez UART5 krótką instrukcję obsługi, potem po odebraniu znaków 4, 5, 6 i 7 będzie zapalał lub gasił odpowiednie diody modułu KAmodLED. Do komunikacji z KwikStikiem potrzebny będzie programowy terminal (np. Bray Terminal), który konfigurujemy następująco: 9600 bps, 8 bitów danych, brak bitu parzystości.
Sposób konfiguracji linii GPIO służących do sterowania diodami LED (PTA14, PTA15, PTA16, PTA17) pominę, ponieważ ten temat został już omówiony w artykule <ART. O GPIO>. W płytce bazowej KwikStikBase linie interfejsu UART5 (PTE8/UART5_TX i PTE9/UART5_RX) mikrokontrolera Kinetis są wyprowadzone na gniazdo DB-9 poprzez układ MAX232. Konfiguracja interfejsu UART składa się z kilku etapów.
Najpierw musimy odblokować zegary interfejsu UART5 i portu E. Kolejnym krokiem jest wybór funkcji linii I/O PTE8 i PTE9, linie konfigurujemy jako ALT3. Teraz czas na trochę bardziej skomplikowaną operację, czyli konfigurację baudrate’u. Baudrate interfejsu UART w mikrokontrolerach Kinetis zależy od trzech parametrów:
- częstotliwości zegara taktującego blok peryferyjny. Interfejsy UART2..5 są dołączone do linii zegarowej Bus clock, której domyślna częstotliwość to 25 MHz.
- Bitów SBR rejestrów UART5_BDL i UART5_BDH. Wartość SBR to wartość rejestru BDL zsumowana z pięcioma młodszymi bitami rejestru BDH przesuniętymi osiem pozycji w lewo.
- Bitów BRFA (Baud rate fine adjust), wyznaczają one wartość BRFD, którą posłużymy się dalej we wzorze. Kilka kombinacji przedstawiam niżej, cała tabela znajduje się w Reference Manualu.
BRFA | BRFD |
00000 | 0/32 = 0 |
00001 | 1/32 = 0,03125 |
… | … |
11000 | 24/32 = 0,75 |
11001 | 25/32 = 0,78125 |
… | … |
11110 | 30/32 = 0,9375 |
11111 | 31/32 = 0,96875 |
Baudrate liczymy według wzoru: