Politechnika Wrocławska, Wydział Elektroniki Mikrosystemów i Fotoniki Wydziałowy Zakład Metrologii Mikro- i Nanostruktur LABORATORIUM UKŁADÓW PROGRAMOWALNYCH PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2015/2016 Wprowadzenie - Keil µvision, konfiguracja... Prowadzący: dr inż. Daniel Kopiec Konsultacje: PN godz. 11-13, ŚR godz. 14-16 Miejsce konsultacji: sala 015a budynek C2 Email: daniel.kopiec@pwr.edu.pl Tel.: 71 320 3651 Miejsce odbywania zajęć: sala 108 budynek C2 Spis treści: 1. Programowanie układów rodziny ARM środowisko programistyczne 2. Keil µvision instalacja 3. Konfiguracja środowiska Keil µvision 5 do pracy z układem ARM firmy NXP LPC2368 4. Dodawanie plików do projektu, szkielet programu podstawowy kod, programowanie 5. Programowanie szeregowe Flash Magic 1
1. Programowanie układów rodziny ARM środowisko programistyczne Mikrokontrolery oraz mikroprocesory rodziny ARM (ang. Advanced RISC Machine) (ARM7, ARM9, ARM11, Cortex-M, itp.) stanowię obecnie bardzo popularne układy wykorzystywane masowo w sprzęcie elektronicznym takim jak: telefony komórkowe, tablety, inteligentne czujniki, dyski twarde, interaktywne zabawki i wielu innych zastosowaniach. Wydajność układów opartych o rdzenie ARM jest na tyle duża, że umożliwiają pracę pod kontrolą systemów operacyjnych. Z punktu widzenia użytkownika niezwykle istotne jest środowisko programistyczne, a przede wszystkim łatwość jego konfiguracji. Do najbardziej popularnych środowisk tzw. toolchain-ów zaliczyć można: Keil µvision (www.keil.com) CrossWorks for ARM (www.rowley.co.uk/arm) IAR Embedded Workbench for ARM (www.iar.com) ARM DS-5 Development Studio (www.arm.com) Eclipse (www.emb4fun.de), CodeSourcery, CooCox CoIDE (www.coocox.org) i wiele innych narzędzi. Do przygotowania projektów podczas zajęć laboratoryjnych wybrano środowisko Keil µvision 5. Niewątpliwą zaletą środowiska jest integracja wszystkich niezbędnych pakietów i modułów oraz obsługa szerokiej gamy mikrokontrolerów ARM różnorakich producentów (Analog Devices, Atmel, Cypress, Freescale, NXP, STM, Texas Instruments i wielu wielu inych). Konfiguracja środowiska wymaga podania jedynie podstawowych informacji o układzie bez mozolnego wgłębiania się już w pierwszych krokach w dokumentację techniczną. Należy jednak pamiętać, że stosowanie oprogramowania Keil µvision wiążę się z pewnymi ograniczeniami, mianowicie wersja edukacyjna ogranicza kod wynikowy do 32 kb kodu, dodatkowo środowisko bez wykupienia licencji nie może być wykorzystywana w celach zarobkowych. W tym momencie z alternatywą przychodzą darmowe toolchain-y uruchamiane w Eclipsie. Przewagą środowisk komercyjnych niewątpliwie jest fakt, że integruję wszystkie potrzebne narzędzia w jednym miejscu np. edytor, kompilator, debugger, które znacząco poprawiają jakość oraz szybkość pracy. 2
2. Keil µvision instalacja Środowisko Keil µvision można bezpośrednio pobrać ze strony producenta: https://www.keil.com/download/product/ W dziale Download Products należy wybrać MDK-ARM Pobranie pliku wymaga jednak podania swoich danych osobowych jak: imię nazwisko, adres email, nazwa firmy i adres. W tej części należy podać swoje dane oraz adres email z domeny uczelni nr_albumu@studnet.pwr.edu.pl. 3
W tym kroku należy podać swój adres email, ponieważ w wiadomości zwrotnej uzyskamy link do pobrania środowiska Keil µvision (rozmiar pliku ~450 MB). Drugim ważnym plikiem jest biblioteka obsługiwanych układów ARM, dostępna pod adresem: http://www2.keil.com/mdk5/legacy Z uwagi na fakt, że podczas laboratorium korzystać będziemy z układów ARM7 (NXP LPC2368), pobieramy jedynie pakiet Legacy Support for ARM7, ARM9 & Cortex-R. Pakiet ten pozwalana również na zachowanie zgodności ze środowiskiem Keil µvision 4. Pobranie pliku tak jak poprzednio wymaga podania swoich danych. Instalacja plików: Instalacja plików powinna rozpocząć się z od zainstalowania środowiska Keil µvision 5 a następnie pakietu Legacy Support for ARM7, ARM9 & Cortex-R. Potwierdzając kolejne kroki instalacji przyciskiem NEXT powinniśmy bez problemu zainstalować środowisko i pakiet zgodności. 4
3. Konfiguracja środowiska Keil µvision 5 do pracy z układem ARM firmy NXP LPC2368 Okno programu można podzielić na trzy zasadnicze komponenty: a) pasek narzędzi, b) okno nawigacji projektu, c) edytor kodu, d) okno komunikatów, Pasek narzędzi Okno nawigacji Edytor kodu Okno komunikatów Przed przystąpieniem do edycji kodu a następnie uruchamiania konkretnego układu ARM należy przeprowadzić konfigurację środowiska. W tym celu z paska narzędzi przechodzimy do zakładki Project następnie New µvision 5 Project W oknie, które ukaże się naszym oczom należy podać katalog, w którym umieszczone zostaną wszystkie pliki projektu, należy jednak pamiętać, że 5
zarówno nazwy katalogów oraz nazwy plików nie powinny zawierać polskich znaków. Rozszerzenie projektu stworzonego w środowisku Keil posiada rozszerzenia *.uvproj. Po zatwierdzeniu ścieżki dostępu do folderu oraz podaniu nazwy projektu należy wybrać odpowiedni układ, dlatego też z rozwijalnej listy wybieramy Legacy Device Database. rozwijalna lista Z listy producentów układów ARM wybieramy interesujący nas układ: firma NPX, LPC 2368 (ARM 7TDMI-S) a następnie wybór zatwierzdzamy klikając przycisk OK. W tym momencie zostaniemy zapytani przez środowisko czy do projektu ma zostać dodany plik LPC2300.s Zatwierdzamy klikając TAK. Plik LPC2300.s zawiera tzw. startup, czyli początkową konfigurację układu, tj. umiejscowienie wektorów przerwań, konfigurację układów PLL, MAM itp. 6
To jeszcze nieststy nie koniec konfiguracji: Przechodzimy do zakładki Flash a następnie Configure Flash Tools Naszym oczom powinno ukazać się znajome okno: ZAKŁADKA DEVICE: - podstawowe informacje nt. wybranego przez nas układu ZAKŁADKA TARGET: - w części a należy podać częstotliwość rezonatora kwarcowego uzytego do generowania sygnału taktującego, wartość tą należy odczytać z dokumentacji (schemat) lub odszukać rezonator na płytce PCB w pobliżu układu ARM. W naszym wypadku Xtal =12 MHz. a b c d 7
- w części b należy wybrać ARM-Mode lub Thumb-Mode, wybór należy od użytkownika oraz zamierzonego celu szybkość wykonywania kodu lub ilość zajmowanego miejsca. Zasadniczą róznicą trybu ARM jest to, że instrukcje zawszę są 32-bitowe, natomiast dla trybu Thumb 16-bitowe. - w części c i d, konieczne staje się zdefiniowanie obszarów pamięci. W tym momencie koniecznością staje się zaglądnięcie do noty katalogowej układu LPC2368 dostępnej tutaj: http://www.nxp.com/documents/data_sheet/lpc2364_65_66_67_68.pdf Na podstawie tabeli ze strony 20 wyżej wymienionego pliku można odczytać interesujące obszary pamięci: on chip IROM (sekcja c), oznacza wewnętrzną pamięć FLASH, zgodnie z rysunkiem rozpoczyna się od adresu 0x00000000 a kończy pod adresem 0x0007FFFF, tak więć rzeczywisty zakres adresów odpowiedzialny za pamięć wynosi 0x80000, takie dane należy podać w części c. on chip IRAM (sekcja d), oznacza wewnętrzną pamięć RAM, zgodnie z diagramem jej początek mieści się od adresu 0x40000000 a kończy w zakresie 0x40007FFF co daje łącznie pulę 0x8000 adresów, nic nie stoi na przeszkodzie aby jako dodatkową pamięć ram wykorzystać dodatkowe adresy pamięci RAM zakresu 0x7FD00000. ZAKŁADKA OUTPUT: - należy zaznaczyć opcję tworzenie pliku *.hex, plik ten będzie użyteczny na etapie debugowania programu 8
ZAKŁADKA LINKER: - należy zaznaczyć opcję: Use Memory Layout From Target Dialog, przedstawion opcja informuje środowisko o rozmieszczeniu pamięci na podstawie pliku LPC2300.s, opcja jest o tyle ważna, że umożliwią zmapowanie pamięci wewnętrznej wg. określonych procedur ZAKŁADKA DEBUG: - w momencie kiedy zależy nam na pracy z rzeczywistym układem należy wybrać pracę z odpowiednim układem debugera/programatora, w naszym wypadku stosujemy debuger J-Link EDU. Naciskając przycisk Settings przechodzimy do odpowiednich ustawień pracy programatora J-Link. JTAG Speed: - szybkość komunikacji pomiędzy interfejsem układu ARM a J-Linkiem, bezpiecznie w tym miejscu ustawić opcję negocjacji prędkości: Adaptive Clocking, - pozostałe funkcje pozostają bez zmian, - okienko Info umożliwia między innymi: sprawdzenie czy J-Link jest obecny w systemie, czy Target, mikrokontroler komunikuje się z J-Linkiem 9
Po wybraniu opcji JLink, otrzymamy sygnaturę urządzenia. Warto zwrócić uwagę, że wartość sygnatury podawana jest w zapisie hex i powinna ona być rózna od wartości 0, w przeciwnym razie nie poprawnie został zainstalowany sterownik urządzenia. Po wybraniu opcji Target otzymamy kilka ważnych informacji dotyczących naszego mikrokontrolera jak np. sygnatura inaczej ID w zapisie hex. Wartość ta również powinna być różna od 0. Wystąpienie wartości 0 lub 1 może sugerować błędne podłączenie programatora pod interfejs JTAG lub nadpisanie ważnych obszarów pamięci mikrokontrolera i tym samym brak dostępu do obszaru bootloadera. Wówczas konieczne staje się skasowanie pamięci procesora za pomocą interfejsu szeregowego procedura ta opisana została w punkcie 4. ZAKŁADKA UTILITIES: W zakładce tej należy skonfigurować odpowiednią mapę pamięci dla wybranego układu mikrokontrolera serii ARM. 10
Naciskając przycisk Setting przechodzimy do bardziej zaawansowanych ustawień programu, gdzie należy m.in. zaznaczyć: Erases Full Chip oraz za pomocą przycisku ADD wybrać odpowidnią mapę pamięci układu: LPC2000 IAP512 kb Flash Wybranie tych opcji umożliwi m.in. programowania układu z pominięciem programatora JTAG. IAP In-Application Programming, czyli możliwość programowania/kasowania pamięci wewnętrznej z poziomu aplikacji, programu. Nie wymienione okna zakładek: Listing, User, C/C++ pozostawiamy na tym etapie bez zmian. 4. Dodawanie plików do projektu Po skonfigurowaniu istotnych opcji programu można przystapić do programowania układów ARM. Językiem programowania stosowanym podczas zajęć będzie język ANSI C oraz asembler dla mikrprocesorów/mikrokontrolerów ARM. Główna część projektów tworzona będzie w języku C nastomiast newralgiczne elementy programu w asemblerze. Aby dodać pliki do projektu w okne nawigacji projektu, należy prawym przyciskiem myszki kliknąć na folder Source Group, wybrać opcję Add New Item to Group Source Group, po pojawieniu się nowego okna wybrać plik C Filc (.c), nadać mu odpowiednią nazwę, podać katalog docelowy i zatwierdzić klikając przycisk ADD. Od tego momentu plik *.c powinen być widoczy w oknie nawigacyjnym projektu. W analogiczny sposób można dodawać inne pliki wymagane w projekcie. 11
Szkielet programu podstawowy kod Podstawowy progam powinen wyglądać następująco: #include "LPC23xx.h" // standardowa biblioteka definiująca rejestry, peryferia //pliki nagłówkowe, biblioteki, deklaracje funkcji, zmiennych globalnych int main (void) { // konfiguracja układów, rejestrów itp.. while (1) { // pętla główna programu } Należy pamiętać, że jeżeli w programie zabraknie pętli nieskończonej wówczas program wykona się tylko raz. Niewątpliwą zaletą programów pisanych w C jest możliwość wzbogacenia kodu programu o wstawki asemblerowe, czyli fragmenty kodu zoptymalizowane pod względem szybkości wykonywania kodu, zastosowanych instrukcji. Kod asemblera powinien być poprzedzony słowem kluczowym asm a zawartość umieszczona pomiędzy nawiasami klamrowymi { } zgodnie z poniższym przykładem: 12
asm { MOV R0, #40 ; MOV R1, #25 ; dalej: CMP R0, R1 BEQ stop BLT mniej SUB R0, R0, R1 B dalej mniej: SUB R1, R1, R0 B dalej stop: B stop } #include "LPC23xx.h" int main (void) { while (1) { kod asm można umieścić np. w tym miejscu } } Kod assemblera można wstawić w dowolnym miejscu programu, może to być również osobna funkcja lub wywołanie z osobnego pliku. Warto jednak pamiętać, że operandy wstawiane w instrukcjach asemblerowych nie odnoszą się do fizycznych rejestrów mikrokontrolera. Zadanie rozdzielania rejestrów zależy tylko i wyłącznie od kompilatora, dlatego też operandy traktowane będą tylko i wyłącznie jako zmienne wirtualne rejestry. Programowanie załadowanie programu do pamięci układu W momencie kiedy napisany został odpowiedni kod programu należy przeprowadzić jego kompilację, czyli przetłumaczyć na jezyk maszynowy (0 i 1). W tym celu należy wykonać kompilację za pomocą przycisku F7 lub z paska zakładek wybrać Project a nastepnie Build Target. To samo zadanie można wykonać używając ikone znajdujących się na pasku narzędzi: Zbuduj czyli kompilacja Załaduj program do pamięci układu Poprawność kompilacji oraz ładowania programu do pomięci układu sygnalizowane jest w oknie komunikatu każdorazowo należy upewnić się, że proces ten zakończył się powodzeniem. 13
5. Programowanie szeregowe - Flash Magic Producent układów LPC czyli firma NXP umożliwiła użytkownikowi programowanie układów ARM za pomocą interfejsu szeregowego oraz oprogramowania Flash Magic. W skrócie nazwano to ISP z ang. In-System Programming. Procedura ISP umożliwia kasowanie dowolnego obszaru pamięci FLASH i RAM oraz ponowne zapisywanie. Bootloader ISP zlokalizowany jest w obszarze wewnętrznej pamięci układu, którego użytkownik nie może modyfikować możliwy jest tylko odczyt co jednocześnie stanowi zabezpieczenie przez nieautoryzowanym nadpisaniem tego fragmentu pamięci a w konsekwencji niemożliwość dalszego użytkowania układu. Moduł mikrokontrolera MMlpc23xx oraz rozmieszczenie poszczególnych wyprowadzeń W celu skorzystanie z możliwości programowania układu ISP, konieczne staje się podłączenie wyprowadzeń P0.2 i P0.3 do portu szeregowego RS232. RX interfejsu RS232 TX interfejsu RS232 Linia P0.3 w złączu J1 Linia P0.2 w złączu J1 Połącznie powinno zostać wykonane do pinów opisanych poniżej: 14
Oprogramowanie Flash Magic jest komercyjnie dostępnym oprogramowaniem, jest ono udostępniane bezpłatnie, obsługa jest bardzo intuicyjna więc szczegółowy opis w tym miejscu został pominięty. Najważniejsza jest jednak procedura uruchomienie bootloadera, obejmuje ona kilka istotnych kroków: 15
przed włączeniem zasilania układu/modułu linię P2.10 należy ustawić w stan niski podłączyć do GND, włączamy zasilanie układu/modułu, wybieramy interesujące nas opcje w programie Flash Magic np. Erase Flash, poprawnie zakończona czynność potwierdzona zostaje odpowiednim komunikatem, linię P2.10 odłączamy od GND, wykonujemy RESET układu lub wyłączamy i włączamy zasilanie na tym kończy się procedura Literatura: [1] Entering ISP mode from user code - Application note AN10356 http://www.nxp.com/documents/application_note/an10356.pdf 16