ISBN Copyright by Wydawnictwo BTC Warszawa Redaktor techniczny: Delfina Korabiewska Redaktor merytoryczny: mgr Anna Kubacka

W książce zawarto praktyczne wprowadzenie w świat programowania w języku C mikrokontrolerów z rdzeniem ARM7. Przykłady zawarte w książce pokazują spo...
12 downloads 0 Views 388KB Size
W książce zawarto praktyczne wprowadzenie w świat programowania w języku C mikrokontrolerów z rdzeniem ARM7. Przykłady zawarte w książce pokazują sposób wykorzystywania zasobów wbudowanych w mikrokontrolery z rodziny LPC2000 firmy NXP – od elementarnych (np. sterowanie liniami wejścia-wyjścia, programowanie timerów) do bardziej skomplikowanych (np. szeregowa transmisja z wykorzystaniem wbudowanych interfejsów UART, I2C, SPI). Najlepszą metodą przyswajania nowych wiadomości jest ich praktyczne wypróbowanie. Jako platformę sprzętową umożliwiającą praktyczne przetestowanie zamieszczonych w książce przykładów wybrano zestaw uruchomieniowy ZL9ARM+ZL10ARM z mikrokontrolerem z rodziny LPC2000 firmy NXP – są to obecnie najpopularniejsze w świecie elektroników mikrokontrolery z rdzeniem ARM7. Książka jest przeznaczona dla wszystkich miłośników techniki mikroprocesorowej, którzy zamierzają wykorzystywać w swoich opracowaniach nowoczesne mikrokontrolery z rdzeniem ARM7. Wiele informacji zawartych w książce może być przydatnych studentom wydziałów elektroniki, automatyki i informatyki wyższych uczelni technicznych, jak również inżynierom-konstruktorom systemów mikroprocesorowych.

Redaktor techniczny: Delfina Korabiewska Redaktor merytoryczny: mgr Anna Kubacka

ISBN 978-83-60233-22-1 © Copyright by Wydawnictwo BTC Warszawa 2007

Wydawnictwo BTC ul. Lwowska 5 05-120 Legionowo fax: (22) 814-13-02 http://www.btc.pl e-mail: [email protected] Wydanie I.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz wydawnictwo BTC dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz wydawnictwo BTC nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentów niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Druk i oprawa: Drukarnia Narodowa S.A.

Spis treści

3

Od autora.......................................................................................................................5 1. Rdzeń ARM7TDMI-S ............................................................................................... 7 1.1.

Wstęp ....................................................................................................................8

1.2.

Architektura RISC. Charakterystyka procesora ARM7TDMI-S ..........................8

1.3.

Tryby ochrony procesora ....................................................................................11

1.4.

Rejestry ...............................................................................................................13

1.5.

Wyjątki procesora................................................................................................18

1.6.

Lista instrukcji ARM ..........................................................................................20

2. Mikrokontrolery LPC213x/LPC214x .................................................................. 25 2.1.

Wstęp ..................................................................................................................26

2.2.

Porty wejścia-wyjścia (GPIO) oraz zasilanie mikrokontrolera ...........................28

2.3.

Magistrale wewnętrzne mikrokontrolera ............................................................32

2.4.

Przestrzeń adresowa mikrokontrolera. Kontroler pamięci MAM .......................34

2.5.

Sygnał zegarowy i układ zerowania mikrokontrolera .........................................37

2.6.

Przerwania zewnętrzne, tryby oszczędzania energii ...........................................40

3. Przykłady aplikacji .................................................................................................. 43 3.1.

Najprostsza aplikacja mikrokontroleraLPC213x/214x .......................................44

3.2.

Zestaw uruchomieniowy ZL9ARM ....................................................................46

4. Środowisko programistyczne................................................................................. 51 4.1.

Wstęp ..................................................................................................................52

4.2.

Instalacja oprogramowania .................................................................................52

4.3.

Składniki projektu dla LPC21xx .........................................................................58

4.4.

Automatyzacja kompilacji projektu za pomocą GNU make ...............................59

4.5.

Skrypty linkera ....................................................................................................66

4.6.

Programowanie pamięci Flash w mikrokontrolerach LPC21xx .........................70

4.7.

Praca w środowisku Eclipse – pierwszy projekt .................................................73

4.8.

Kilka słów o programie węża świetlnego ...........................................................76

5. Podstawowe urządzenia peryferyjne mikrokontrolera .................................. 79 5.1.

Wstęp, start systemu............................................................................................80

5.2.

Mapowanie pamięci, czyli rejestr MEMMAP ....................................................81

5.3.

Konfiguracja pętli PLL oraz sygnałów zegarowych ...........................................82

5.4.

Konfiguracja kontrolera pamięci MAM..............................................................85

5.5.

Pozostałe elementy pliku startowego ..................................................................87

4

Spis treści

5.6.

Detektor zaniku napięcia, wykrywanie przyczyny zerowania ............................90

5.7.

Tryby oszczędzania energii .................................................................................92

6. Porty wejścia-wyjścia (GPIO) ............................................................................... 95 6.1.

Wstęp ..................................................................................................................96

6.2.

Budowa portów GPIO mikrokontrolerów LPC ..................................................96

6.3.

Praktyczna obsługa portów ...............................................................................101

6.4.

Obsługa wyświetlacza LCD ..............................................................................104

7. System przerwań mikrokontrolera .................................................................... 113 7.1.

Wstęp ................................................................................................................114

7.2.

Przerwania programowe....................................................................................114

7.3.

Przerwania sprzętowe – kontroler przerwań VIC .............................................118

7.4.

Przerwania „szybkie” FIQ.................................................................................119

7.5.

Wektoryzowane przerwania IRQ ......................................................................120

7.6.

Przerwania niewektoryzowane IRQ ..................................................................122

7.7.

Obsługa przerwań w jednostce centralnej .........................................................122

7.8.

Przerwania zewnętrzne EINT ...........................................................................124

7.9.

Praktyczne zagadnienia dotyczące systemu przerwań ......................................126

8. Odmierzanie czasu – układy licznikowe ........................................................... 133 8.1.

Wstęp ................................................................................................................134

8.2.

Układy czasowo-licznikowe T0 i T1 ................................................................134

8.3.

Układ PWM ......................................................................................................144

8.4.

Zegar czasu rzeczywistego RTC .......................................................................151

8.5.

Układ watchdog ................................................................................................158

9. Interfejsy szeregowe ............................................................................................... 163 9.1.

Wstęp ................................................................................................................164

9.2.

Porty szeregowe UART.....................................................................................164

9.3.

Interfejs I2C .......................................................................................................177

9.4.

Interfejs SPI.......................................................................................................185

10. Przetwarzanie sygnałów analogowych .............................................................. 199 10.1. Wstęp ................................................................................................................200 10.2. Przetworniki analogowo-cyfrowe .....................................................................200 10.3. Przetwornik cyfrowo-analogowy ......................................................................211 10.4. Biblioteka standardowa STDIO ........................................................................213

Literatura ................................................................................................................. 216

Od autora

Od autora

5

Trudno dziś znaleźć na rynku urządzenie, które nie byłoby wyposażone w system mikroprocesorowy. Zastosowanie mikroprocesora umożliwia znaczne zwiększenie funkcjonalności urządzenia, o czym dawniej można było tylko pomarzyć. Historia rozwoju mikroprocesorów rozpoczęła się w roku 1971, kiedy Intel na zlecenie japońskiej firmy Busicom produkującej kalkulatory wyprodukował pierwszy 4-bitowy mikroprocesor Intel4004 w obudowie DIP16 zawierający 2300 tranzystorów i pracujący z zawrotną na owe czasy częstotliwością 100 kHz. Szybko okazało się jednak, że zaprojektowane układy mają szersze zastosowanie i Intel zdecydował się na odkupienie praw do użycia układu. Japończycy nie wiązali wielkich nadziei z tym układem i sprzedali prawa do niego Intelowi za 60 000 $. Szybko okazało się, że możliwości oraz wydajność 4004 nie są wystarczające, dlatego Intel opracował 8-bitowy układ mikroprocesora Intel8080 pracujący z częstotliwością 2 MHz, który okazał się wielkim rynkowym sukcesem. Zaczęły pojawiać się pierwsze mikrokomputery wykorzystujące wspomniany układ oraz klony układu i8080 produkowane przez inne firmy. Wkrótce nastąpił burzliwy rozwój techniki komputerowej i mikroprocesorów, co zaowocowało wyprodukowaniem przez firmę Intel 16-bitowego mikroprocesora i8086. Układ ten firma IBM wykorzystała w pierwszych komputerach klasy PC, które okazały się wielkim sukcesem rynkowym. Intel zachęcony powodzeniem rodziny x86 wyprodukował kolejne mikroprocesory rodziny x86. Klasyczne mikroprocesory do prawidłowej pracy wymagały zewnętrznych układów peryferyjnych, takich jak pamięć RAM, układy czasowo-licznikowe układy wejścia-wyjścia. Wraz ze wzrostem liczby urządzeń, w których mikroprocesory znajdowały zastosowanie, okazało się, że ich wykorzystywanie w wielu urządzeniach jest zbyt kosztowne, a duża moc obliczeniowa nie zawsze jest wymagana. W związku z tym powstała idea integracji całego systemu mikroprocesorowego w jednym układzie scalonym, tak aby mógł on pracować autonomicznie bez żadnych dodatkowych układów. Jednocześnie tak powstały układ nie musiał charakteryzować się dużą mocą obliczeniową, ponieważ najczęściej miał być wykorzystywany do sterowania prostymi procesami. Tak właśnie zrodziła się idea mikrokomputera jednoukładowego (obecnie nazywanego mikrokontrolerem), który do prawidłowego działania nie wymagał dodatkowych układów zewnętrznych. Pierwszy mikrokomputer jednoukładowy 8048 opracowano w firmie Intel w roku 1976. Zawierał on w sobie 8-bitową jednostkę centralną, 1 kB pamięci ROM oraz 64 bajty pamięci RAM i jak na owe czasy był nowatorskim rozwiązaniem. Był szeroko wykorzystywany w prostych układach sterowania i automatyki, jednak z uwagi na swoje ograniczone zasoby szybko wyparł go wyprodukowany w roku 1981 mikrokontroler 8051 zawierający rozbudowaną w stosunku do 8048 8-bitową jednostkę centralną, 128 bajtów pamięci RAM oraz 4 kB pamięci ROM. Mikrokontroler 8051 jest jednym z najbardziej popularnych mikrokontrolerów, wykorzystywanych w elektronice powszechnego użytku; i w różnych odmianach jest produkowany przez wiele firm aż do dziś. Na rynku istnieją oczywiście inne odmiany mikrokontrolerów, jak chociażby AVR czy PIC, jednak tak jak poczciwy i8048 są one nadal układami 8-bitowymi, pomimo tego że duże systemy mikroprocesorowe już od dawna posługują się mikroprocesorami 32-bitowymi. Dotychczas użycie 32-bitowych mikrokontrolerów pozostawało w sferze marzeń przeciętnego konstruktora ze względu na wysoką cenę,

6

Od autora

skomplikowane rozwiązania układowe wymagające prowadzenia na płytkach 32-bitowych magistral systemowych oraz konieczność stosowania dodatkowych układów zewnętrznych. Sytuacja uległa diametralnej zmianie w momencie pojawienia się na rynku mikrokontrolerów z rodziny LPC21xx produkowanych przez firmę PHILIPS (obecnie NXP Semiconductors). Mikrokontrolery te zawierają w sobie 32-bitowy system mikroprocesorowy z pamięcią Flash oraz RAM, zwalniający konstruktora z prowadzenia skomplikowanych połączeń magistralowych. Ceny mikrokontrolerów są bardzo zachęcające, np. mikrokontroler LPC2131 (m.in. 32 kB Flash, 8 kB RAM) kosztuje nieznacznie więcej niż ATmega32 o znacznie mniejszych możliwościach. Do dyspozycji mamy bardzo dużą moc obliczeniową, jaką daje 32-bitowy rdzeń taktowany sygnałem o częstotliwości do 60 MHz. Mikrokontrolery LPC21xx są wyposażone w jednostkę centralną ARM7TDMI-S opracowaną w firmie ARM. Rdzeń ARM7TDMI-S staje się standardem wśród mikrokontrolerów 32-bitowych, podobnie jak rdzeń 8051 był i jest standardem wśród mikrokontrolerów 8-bitowych. Poznając architekturę LPC21xx, możemy stosukowo łatwo przejść do programowania mikrokontrolerów innych producentów opartych na rdzeniu ARM7TDMI-S, np. układów z rodziny AT91SAM7S firmy Atmel albo STR7 firmy STM. W przypadku gdyby moc obliczeniowa okazała się niewystarczająca, stosunkowo łatwo można przejść na wydajniejszą architekturę ARM9 lub ARM11. Gdy do dyspozycji mamy trochę większy mikrokontroler oparty na rdzeniu ARM wyposażony w jednostkę MMU (zarządzania pamięcią), możemy uruchamiać systemy operacyjne, takie jak Linux czy Windows CE. Programowanie mikrokontrolerów LPC21xx nie jest dużo bardziej skomplikowane od programowania AVR-ów, a do dyspozycji mamy analogiczne narzędzia, np. darmowy kompilator gcc (arm-gcc) pozwalający na pisanie programów w języku C oraz C++. Programowanie pamięci Flash mikrokontrolera może odbywać się w docelowym systemie poprzez port RS232 i bezpłatne oprogramowanie na przykład: LPC2000 Flash Utility, Flash Magic czy lpc21isp. Autor niniejszej książki postawił sobie za cel pokazanie krok po kroku sposobu posługiwania się narzędziami oraz pisania programów przeznaczonych do mikrokontrolerów z rdzeniem ARM. Czytelnik potrafiący programować w języku C dowolną rodzinę mikrokontrolerów 8-bitowych, po zapoznaniu się z książką nie powinien mieć większych problemów podczas posługiwania się mikrokontrolerami z rdzeniem ARM. Książka ta nie jest przeznaczona dla zupełnie początkujących programistów, dlatego autor zakłada umiejętność programowania przez Czytelnika przynajmniej jednej z rodzin mikrokontrolerów 8-bitowych. W pierwszych rozdziałach książki przedstawiono opis architektury ARM oraz opis mikrokontrolerów rodziny LPC21xx produkowanych przez firmę NXP. W kolejnych rozdziałach zaprezentowano praktyczne przykłady programowania mikrokontrolera z wykorzystaniem zestawu uruchomieniowego z mikrokontrolerem LPC2142/8 firmy Kamami (płyta bazowa o oznaczeniu ZL9ARM oraz moduł z mikrokontrolerem o oznaczeniu ZL10ARM). Zawarte przykłady opisują poszczególne urządzenia peryferyjne mikrokontrolera wraz z praktycznymi przykładami, ponieważ nic tak nie uczy jak ćwiczenia praktyczne. Pomimo że przykłady zawarte w książce przygotowano dla mikrokontrolerów z rodziny LPC21xx firmy NXP, Czytelnik po zapoznaniu się ze specyficznymi układami peryferyjnymi dowolnego mikrokontrolera będzie w stanie wykorzystać informacje zawarte w książce. Na wszelkie uwagi i opinie czekam pod adresem e-mailowym: [email protected].