Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie Wydział IEiT Katedra Elektroniki TECHNIKA MIKROPROCESOROWA II LAB 6a Wykorzystanie USB do komunikacji z komputerem PC Mariusz Sokołowski http://www.fpga.agh.edu.pl/upt2 20.12.2014
1. WSTĘP 1.1. CEL Celem ćwiczenia jest: zapoznanie studenta z konfiguracją modułu FRDMKL46Z oraz z poprawnym programowaniem układu UART0, celem nawiązania komunikacji szeregowej poprzez złącze USB z komputerem klasy PC. 1.2. WYMAGANIA Sprzętowe: komputer klasy PC spełniający wymagania sprzętowe aplikacji KEIL v5, zestaw FRDMKL46Z Programowe: system operacyjny Windows XP lub wyższy środowisko Keil / uvision 5 MDK-ARM Doświadczenie: podstawowa umiejętność obsługi komputera klasy PC, podstawowa znajomość systemów operacyjnych rodziny Windows, podstawowa znajomość zagadnień z Techniki Mikroprocesorowej 1 podstawowa znajomość zagadnień z Techniki Cyfrowej Literatura: KL46 Sub-Family Reference Manual, Freescale Semiconductor Kinetis L Peripheral Module Quick Reference, Freescale Semiconductor
2. MODUŁ PORTU SZEREGOWEGO UART0 Układ MKL46Z256VLL4, będący "sercem" zestawu FRDM-KL46Z, zawiera w swoich zasobach sprzętowych, trzy porty UART. Port UART0 różni się pewnymi szczegółami w porównaniu do pozostałych portów, UART1 i UART2 (rys.1 i rys.2). Rys.1. Układ odbiornika UART0 Rys.2 Układ nadajnika UART0 Podstawowe różnice to: źródło zegara taktującego (Asynch Module Clock) wybierane w rejestrze SIM->SOPT2 (pole UART0SRC), możliwość próbkowania w odbiorniku, danych przychodzących, na obydwu zboczach zegara - ustawiane w rejestrze UART0->C5 (bit BOTHEDGE). Bit ten musi być ustawiony, gdy OSR jest wybrane z przedziału od 3 do 6 (patrz poniżej), dzielnik próbkowania nadmiarowego danych w odbiorniku, ustawiany w rejestrze UART0->C4 (pole OSR). Dozwolone wartości: od 3 do 31. Zależność pomiędzy wartościami OSR i SBR (dzielnik ustawiany w rejestrach UART0->BDL i UART0->BDH) a prędkością (BR=bit/s) nadawania/odbioru wyraża następujący wzór: Asynch Module Clock BR = (OSR + 1) SBR 3. PRZYGOTOWANIE MODUŁU FRDM-KL46Z Aby przygotować zestaw FRDM-KL46Z należy wykonać następujące czynności: wprowadzić moduł w tryb BOOTLOADER (trzymając wciśnięty przycisk RESET dołączyć kabel USB do gniazda OpenSDA), na dysk BOOTLOADER wgrać program DEBUG-APP_Pemicro_v108.SDA, znajdujący się w pakiecie FRDM-KL46Z_QSP,
otworzyć program Keil i utworzyć nowy projekt wg wcześniejszych wskazówek (ćwiczenie LAB1), kliknąć ikonę "Options for Target", a następnie otworzyć zakładkę "Debug" i ustawić debugger jak na rys.3. kliknąć "Settings" i wprowadzić ustawienia jak na rys.4, a następnie wszystkie okna zatwierdzić klikając OK. Rys.3. Rys.4. w czasie ładowania programu do mikrokontrolera (funkcja "Load") pojawi się okno jak na rys.5. Kliknąć "Connect(Reset)". Pojawi się okno programatora (rys.6), które po poprawnym wgraniu programu do mikrokontrolera zniknie, wcisnąć przycisk RESET na module i cieszyć się programem. Rys.5. Rys.6.
4. PRZYGOTOWANIE UKŁADU UART0 Aby przygotować układ UART0 do pracy, należy wykonać następujące czynności: upewnić się, czy stała CLOCK_SETUP, w zbiorze system_mkl46z4.c, ma wartość 1. Jeśli nie, to należy ją zmienić. Dla takiego ustawienia parametry podstawowych sygnałów zegarowych mają następujące wartości: zegar referencyjny dla modułu MCG - 8MHz, Core clock - 48MHz, BusClock - 24MHz, dołączyć sygnał taktujący do modułu UART0, w rejestrze SIM->SCGC4 oraz do odpowiedniego portu, w rejestrze SIM->SCGC5 (PTA1 i PTA2), ustawić odpowiednią funkcję dla wykorzystywanych końcówek portu, w rejestrze PORTA->PCR. PTA1 - odbiornik RX, PTA2 - nadajnik TX (funkcja nr 2), ustawić źródło zegara taktującego moduł UART0, w rejestrze SIM->SOPT2 (pole UART0SRC), Wybrać np. OSCERCLK (w naszym przypadku 8MHz - Asynch Module Clock), zablokować nadajnik i odbiornik, w rejestrze UART0->C2, ustawić wartość dzielnika próbkowania nadmiarowego (najlepiej 31), w rejestrze UART0->C4 (pole OSR), ustawić 13-bitową wartość dzielnika, będącego źródłem zegara dla odbiornika i nadajnika. Najpierw starsze 5 bitów ustawić w rejestrze UART0->BDH, a następnie młodsze 8 bitów w rejestrze UART0->BDL (pole SBR) - wziąć pod uwagę nastawioną wartość OSR oraz wzór z pkt. 2, ustawić np. jeden bit stopu, w rejestrze UART2->BDH (bit SBNS), ustawić długość danej np. na 8 bitów oraz brak sprzętowej obsługi sprawdzania parzystości, w rejestrze UART0->C1 (bity M i PE), w zależności od potrzeb, włączyć przerwania od nadajnika i/lub odbiornika, w rejestrze UART0->C2 (bity: TIE - rejestr nadajnika pusty i RIE - rejestr odbiornika pełny), włączyć nadajnik i odbiornik, w rejestrze UART0->C2. W tym momencie układ UART0 jest gotowy pracy. Nadawanie polega na wpisaniu danej 8-bitowej do rejestru UART0->D, a odbiór poprzez odczyt tego rejestru. Jeśli nie używamy przerwań do komunikacji z nadajnikiem i odbiornikiem, stan nadajnika sprawdzamy poprzez odczyt wartości bitu TDRE w rejestrze UART0->S1, a stan odbiornika poprzez odczyt wartości bitu RDRF w tymże rejestrze. TDRE=1 - rejestr nadajnika pusty, RDRF=1 - odbiornik pełny. Od strony komputera należy sprawdzić, uruchamiając menedżer urządzeń, który port COM jest przypisany do naszego modułu (kabel USB dołączony do złącza OpenSDA) - rys. 7. Pisząc oprogramowanie lub łącząc się poprzez terminal właśnie tego numeru portu COM należy używać. Rys.7.