Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00233 005899 14494522 na godz. na dobę w sumie
Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji - książka
Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji - książka
Autor: Liczba stron: 568
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-3064-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> elektronika >> mikrokontrolery
Porównaj ceny (książka, ebook, audiobook).

Przedstawiamy przebojowy duet — język C i mikrokontroler AVR!

Mikrokontrolery AVR firmy Atmel stanowią dynamicznie rozwijającą się rodzinę układów. Dzięki niskiej cenie, dużym możliwościom i dostępności darmowych narzędzi od lat niezmiennie cieszą się dużą popularnością wśród hobbystów i osób profesjonalnie zajmujących się programowaniem mikrokontrolerów.

Pewnym utrudnieniem dla polskich użytkowników AVR jest brak literatury na temat wykorzystania do ich programowania języków wysokiego poziomu, takich jak C. Niniejsza książka jest próbą wypełnienia tej luki. W sposób syntetyczny pokazuje różnice pomiędzy programowaniem w języku C komputerów klasy PC i mikrokontrolerów. Omawia programowanie peryferii dostępnych w mikrokontrolerach AVR w języku C, bibliotekę standardową oraz jej rozszerzenia znane jako AVR-libc. Dzięki temu nawet osoby w niewielkim stopniu znające podstawy języka C będą mogły bez problemów 'przesiąść się' na programowanie mikrokontrolerów AVR. Z drugiej strony książka opisuje zaawansowane techniki programowania, związane z obsługą bootloadera, zabezpieczaniem i szyfrowaniem kodu aplikacji oraz realizacją najpowszechniej stosowanych protokołów wymiany danych pomiędzy urządzeniami opartymi na mikrokontrolerach i komputerami PC. Porusza także tematy związane ze specyfiką pisania aplikacji na mikrokontrolery oraz wyszukiwaniem i usuwaniem błędów.

Podstawy programowania mikrokontrolerów AVR

Programowanie mikrokontrolerów jeszcze nigdy nie było tak proste!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Autor: Tomasz Francuz ISBN: 978-83-246-3064-6 Format: 158×235, stron: 568 Przedstawiamy przebojowy duet – język C i mikrokontroler AVR! • Poznaj budowę i podstawy programowania mikrokontrolerów • Dowiedz się, jak do swoich celów wykorzystać język C • Naucz się rozwiązywać rzeczywiste problemy i tworzyć praktyczne rozwiązania Mikrokontrolery AVR firmy Atmel stanowią dynamicznie rozwijającą się rodzinę układów. Dzięki niskiej cenie, dużym możliwościom i dostępności darmowych narzędzi od lat niezmiennie cieszą się dużą popularnością wśród hobbystów i osób profesjonalnie zajmujących się programowaniem mikrokontrolerów. Pewnym utrudnieniem dla polskich użytkowników AVR jest brak literatury na temat wykorzystania do ich programowania języków wysokiego poziomu, takich jak C. Niniejsza książka jest próbą wypełnienia tej luki. W sposób syntetyczny pokazuje różnice pomiędzy programowaniem w języku C komputerów klasy PC i mikrokontrolerów. Omawia programowanie peryferii dostępnych w mikrokontrolerach AVR w języku C, bibliotekę standardową oraz jej rozszerzenia znane jako AVR-libc. Dzięki temu nawet osoby w niewielkim stopniu znające podstawy języka C będą mogły bez problemów „przesiąść się” na programowanie mikrokontrolerów AVR. Z drugiej strony książka opisuje zaawansowane techniki programowania, związane z obsługą bootloadera, zabezpieczaniem i szyfrowaniem kodu aplikacji oraz realizacją najpowszechniej stosowanych protokołów wymiany danych pomiędzy urządzeniami opartymi na mikrokontrolerach i komputerami PC. Porusza także tematy związane ze specyfiką pisania aplikacji na mikrokontrolery oraz wyszukiwaniem i usuwaniem błędów. Podstawy programowania mikrokontrolerów AVR • Warsztat pracy programisty AVR • Wprowadzenie do języka C na AVR • Budowa programu i jego części składowe • Korzystanie z zasobów sprzętowych mikrokontrolera • Używanie rejestrów i różnych rodzajów pamięci • Zastosowania przetwornika ADC • Obsługa wyświetlaczy LCD • Korzystanie z interfejsów • Zapewnianie bezpieczeństwa kodu Programowanie mikrokontrolerów jeszcze nigdy nie było tak proste! Idź do • Spis treści • Przykładowy rozdział • Skorowidz Katalog książek • Katalog online • Zamów drukowany katalog Twój koszyk • Dodaj do koszyka Cennik i informacje • Zamów informacje o nowościach • Zamów cennik Czytelnia • Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl © Helion 1991–2011 Spis treĈci Rozdziaä 1. Wstöp ............................................................................................ 11 Kody przykáadów ........................................................................................................... 12 Schematy ........................................................................................................................ 12 Wymagane czĊĞci ........................................................................................................... 12 Instalacja Ĉrodowiska i potrzebnych narzödzi ................................... 15 Instalacja WinAVR ........................................................................................................ 16 Instalacja AVR Studio .................................................................................................... 17 Systemy GNU/Linux ...................................................................................................... 18 AVR Studio .................................................................................................................... 19 Pierwsza aplikacja .................................................................................................... 21 Dodawanie plików do projektu ................................................................................ 25 Programy narzĊdziowe ................................................................................................... 27 Linker ....................................................................................................................... 27 Program avr-size ...................................................................................................... 31 Program avr-nm ........................................................................................................ 32 Program avr-objcopy ................................................................................................ 33 Program make .......................................................................................................... 36 Pliki wynikowe ......................................................................................................... 43 Biblioteki ........................................................................................................................ 46 Projekt biblioteki ...................................................................................................... 47 Tworzenie biblioteki ................................................................................................ 48 Doáączanie biblioteki do programu .......................................................................... 49 Funkcje „przestarzaáe” ............................................................................................. 50 Nadpisywanie funkcji bibliotecznych ....................................................................... 50 Usuwanie niepotrzebnych funkcji i danych .............................................................. 51 Rozdziaä 2. Programowanie mikrokontrolera ..................................................... 53 Podáączenie — uwagi ogólne ......................................................................................... 53 Problemy .................................................................................................................. 55 Programatory ISP ........................................................................................................... 55 Budowa programatora .............................................................................................. 56 Programator USBASP .............................................................................................. 59 Kilka procesorów w jednym ukáadzie ...................................................................... 59 Programatory JTAG ....................................................................................................... 60 Programator JTAGICE ............................................................................................. 61 Programator JTAGICE mkII .................................................................................... 62 4 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Kilka procesorów w jednym ukáadzie ...................................................................... 62 AVR Dragon ............................................................................................................ 63 Programatory HW i równolegáe ...................................................................................... 63 Tryb TPI ......................................................................................................................... 64 Programowanie procesora w AVR Studio ...................................................................... 64 Programowanie przy pomocy narzĊdzi dostarczonych przez firmĊ Atmel ..................... 65 Program AVRDUDE ...................................................................................................... 67 Program PonyProg .......................................................................................................... 70 Fusebity i lockbity w AVR-libc ...................................................................................... 70 Lockbity ................................................................................................................... 71 Fusebity .................................................................................................................... 71 Sygnatura ........................................................................................................................ 74 Lockbity w AVR-libc ..................................................................................................... 74 Fusebity w AVR-libc ...................................................................................................... 75 Rozdziaä 3. Podstawy jözyka C na AVR ............................................................. 77 Arytmetyka ..................................................................................................................... 77 Proste typy danych ................................................................................................... 77 Arytmetyka staáopozycyjna ...................................................................................... 81 Arytmetyka zmiennopozycyjna ................................................................................ 87 Operacje bitowe .............................................................................................................. 95 Reprezentacja binarna liczb ...................................................................................... 95 Operacja iloczynu bitowego ..................................................................................... 96 Operacja sumy bitowej ............................................................................................. 97 Operacja sumy wyáączającej .................................................................................... 98 Operacja negacji bitowej .......................................................................................... 99 Operacje przesuniĊü bitowych ................................................................................ 100 ZasiĊg zmiennych ......................................................................................................... 100 Zmienne globalne ................................................................................................... 101 Zmienne lokalne ..................................................................................................... 102 Modyfikator const .................................................................................................. 103 WskaĨniki ............................................................................................................... 104 Tablice .................................................................................................................... 109 Funkcje ......................................................................................................................... 112 Przekazywanie parametrów przez wartoĞü i referencjĊ .......................................... 114 Wywoáanie funkcji ................................................................................................. 114 Rekurencyjne wywoáania funkcji ........................................................................... 115 Sáowa kluczowe ............................................................................................................ 116 Operatory ............................................................................................................... 116 Instrukcje sterujące ................................................................................................. 120 Preprocesor ................................................................................................................... 123 Dyrektywa #include ............................................................................................... 124 Dyrektywy kompilacji warunkowej ....................................................................... 124 Dyrektywa #define ................................................................................................. 126 Pliki nagáówkowe i Ĩródáowe ....................................................................................... 127 Definicja a deklaracja ............................................................................................. 128 Sáowo kluczowe static ............................................................................................ 129 Sáowo kluczowe extern .......................................................................................... 130 Dyrektywa inline .................................................................................................... 132 Modyfikator register ............................................................................................... 136 Rozdziaä 4. Sekcje programu .......................................................................... 141 Sekcje danych ............................................................................................................... 142 Sekcja .text ............................................................................................................. 142 Sekcja .data ............................................................................................................ 142 Spis treĈci 5 Sekcja .bss .............................................................................................................. 143 Sekcja .eeprom ....................................................................................................... 143 Sekcje zawierające kod programu ................................................................................ 144 Podsekcje .init[0-9] ................................................................................................ 144 Podsekcje .fini[0-9] ................................................................................................ 145 Sekcje specjalne ............................................................................................................ 146 Sekcje tworzone przez programistĊ .............................................................................. 146 Umieszczanie sekcji pod wskazanym adresem ............................................................. 147 Rozdziaä 5. Kontrola rdzenia i zarzñdzanie poborem energii .............................. 149 ħródáa sygnaáu RESET ................................................................................................. 149 Power-on Reset ...................................................................................................... 150 ZewnĊtrzny sygnaá RESET .................................................................................... 151 Brown-out Detector ................................................................................................ 151 Ukáad Watchdog ..................................................................................................... 152 Zarządzanie poborem energii ....................................................................................... 156 Usypianie procesora ............................................................................................... 157 Wyáączanie ukáadu BOD ........................................................................................ 157 Wyáączanie podsystemów procesora ...................................................................... 158 Preskaler zegara ..................................................................................................... 159 Inne sposoby minimalizowania poboru energii ...................................................... 160 Rozdziaä 6. Dynamiczna alokacja pamiöci ....................................................... 163 Alokacja pamiĊci w bibliotece AVR-libc ..................................................................... 164 Funkcja malloc ....................................................................................................... 166 Funkcja calloc ........................................................................................................ 166 Funkcja realloc ....................................................................................................... 166 Funkcja free ............................................................................................................ 168 Wycieki pamiĊci i báĊdne uĪycie pamiĊci alokowanej dynamicznie ............................ 169 Jak dziaáa alokator ........................................................................................................ 171 Wykrywanie kolizji sterty i stosu ................................................................................. 172 Metoda I — wáasne funkcje alokujące pamiĊü ....................................................... 173 Metoda II — sprawdzanie iloĞci dostĊpnej pamiĊci ............................................... 173 Metoda III — marker ............................................................................................. 173 Metoda IV — wzór w pamiĊci ............................................................................... 173 Metoda V — wykorzystanie interfejsu JTAG ........................................................ 176 Rozdziaä 7. Wbudowana pamiöè EEPROM ....................................................... 177 Zapobieganie uszkodzeniu zawartoĞci pamiĊci EEPROM ........................................... 178 Kontrola odczytu i zapisu do pamiĊci EEPROM .......................................................... 179 Odczyt zawartoĞci komórki pamiĊci ...................................................................... 180 Zapis do komórki pamiĊci ...................................................................................... 180 DostĊp do EEPROM z poziomu AVR-libc ................................................................... 181 Deklaracje danych w pamiĊci EEPROM ................................................................ 182 Funkcje realizujące dostĊp do pamiĊci EEPROM .................................................. 183 Inne funkcje operujące na EEPROM ...................................................................... 185 Techniki wear leveling ................................................................................................. 186 Rozdziaä 8. Dostöp do pamiöci FLASH ............................................................ 189 Typy danych związane z pamiĊcią FLASH .................................................................. 190 Odczyt danych z pamiĊci FLASH ................................................................................ 191 DostĊp do pamiĊci FLASH 64 kB .............................................................................. 192 6 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Rozdziaä 9. Interfejs XMEM ............................................................................ 193 Wykorzystanie zewnĊtrznej pamiĊci SRAM w programie ........................................... 197 Konfiguracja I — w pamiĊci zewnĊtrznej jest tylko sekcja specjalna .................... 198 Konfiguracja II — wszystkie sekcje w pamiĊci zewnĊtrznej, stos w pamiĊci wewnĊtrznej ................................................................................ 199 Konfiguracja III — w pamiĊci zewnĊtrznej umieszczona jest tylko sterta ............. 201 Konfiguracja IV — w pamiĊci zewnĊtrznej sterta i segment zdefiniowany przez programistĊ ................................................................................................ 202 Konfiguracja V — w pamiĊci zewnĊtrznej znajduje siĊ stos .................................. 208 PamiĊü ROM jako pamiĊü zewnĊtrzna ................................................................... 208 Rozdziaä 10. Dostöp do 16-bitowych rejestrów IO ............................................. 211 DostĊp do 16-bitowego rejestru ADC ........................................................................... 211 DostĊp do 16-bitowych rejestrów timerów ................................................................... 213 Rozdziaä 11. OpóĒnienia ................................................................................... 217 Rozdziaä 12. Dostöp do portów IO procesora ..................................................... 221 Konfiguracja pinu IO .................................................................................................... 221 Manipulacje stanem pinów IO ...................................................................................... 225 Zmiana stanu portu na przeciwny ........................................................................... 225 Ustawianie linii IO ................................................................................................. 226 Zerowanie linii IO .................................................................................................. 226 Makrodefinicja _BV() ............................................................................................ 227 UĪycie pól bitowych ............................................................................................... 227 Synchronizator .............................................................................................................. 228 Przykáady praktyczne ................................................................................................... 230 Sterowanie wyĞwietlaczem 7-segmentowym ......................................................... 230 Podáączenie przycisków ......................................................................................... 232 Enkoder obrotowy .................................................................................................. 237 Klawiatura matrycowa ........................................................................................... 242 Rozdziaä 13. Rejestry IO ogólnego przeznaczenia .............................................. 245 Wykorzystanie innych rejestrów jako GPIOR .............................................................. 246 Rozdziaä 14. Przerwania ................................................................................... 249 Obsáuga przerwaĔ ......................................................................................................... 251 sei()/cli() ................................................................................................................. 254 Atrybut naked i obsáuga przerwaĔ w asemblerze ................................................... 254 Modyfikator volatile ............................................................................................... 257 AtomowoĞü dostĊpu do danych .............................................................................. 263 Funkcje reentrant .................................................................................................... 266 Przykáady praktyczne ................................................................................................... 268 WyĞwietlanie multipleksowane .............................................................................. 268 WyĞwietlanie multipleksowane z regulacją jasnoĞci wyĞwietlacza ........................ 272 Obsáuga przycisków ............................................................................................... 276 Obsáuga enkodera ................................................................................................... 279 Klawiatura matrycowa ........................................................................................... 280 Rozdziaä 15. Przetwornik analogowo-cyfrowy .................................................... 283 Wybór napiĊcia referencyjnego .................................................................................... 284 Multiplekser .................................................................................................................. 285 Przetwornik ADC ......................................................................................................... 285 Tryb pojedynczej konwersji ................................................................................... 286 Tryb ciągáej konwersji ............................................................................................ 287 WejĞcia pojedyncze i róĪnicowe ................................................................................... 287 Spis treĈci 7 Wynik ........................................................................................................................... 288 Wyzwalacze .................................................................................................................. 288 Blokowanie wejĞü cyfrowych ....................................................................................... 289 Przerwania ADC ........................................................................................................... 289 Precyzyjne pomiary przy pomocy ADC ....................................................................... 290 Nadpróbkowanie ........................................................................................................... 291 UĞrednianie ............................................................................................................ 292 Decymacja i interpolacja ........................................................................................ 292 Przykáady ...................................................................................................................... 292 Termometr analogowy LM35 ................................................................................. 293 Klawisze ................................................................................................................. 295 Rozdziaä 16. Komparator analogowy ................................................................. 301 Funkcje dodatkowe ....................................................................................................... 302 Blokowanie pinów .................................................................................................. 302 Wyzwalanie zdarzeĔ timera ................................................................................... 302 Wybór wejĞcia komparatora ................................................................................... 302 Wyzwalanie przetwornika ADC ............................................................................. 303 Rozdziaä 17. Timery ......................................................................................... 305 Sygnaá taktujący ........................................................................................................... 306 WewnĊtrzny sygnaá taktujący ................................................................................. 306 ZewnĊtrzny sygnaá taktujący .................................................................................. 308 Licznik .......................................................................................................................... 308 Ukáad porównywania danych ....................................................................................... 309 Wpáyw na piny IO .................................................................................................. 309 Moduá przechwytywania zdarzeĔ zewnĊtrznych .......................................................... 310 Eliminacja szumów ................................................................................................ 311 Komparator jako wyzwalacz zdarzenia ICP ........................................................... 311 Tryby pracy timera ....................................................................................................... 312 Tryb prosty ............................................................................................................. 312 Tryb CTC ............................................................................................................... 315 Tryby PWM ........................................................................................................... 316 Ukáad ochronny ...................................................................................................... 321 Modulator sygnaáu wyjĞciowego ............................................................................ 322 Miernik czĊstotliwoĞci i wypeánienia ........................................................................... 323 Realizacja RTC przy pomocy timera ............................................................................ 326 Realizacja sprzĊtowa .............................................................................................. 327 Realizacja programowa .......................................................................................... 328 Rozdziaä 18. Obsäuga wyĈwietlaczy LCD ........................................................... 331 Obsáuga wyĞwietlaczy alfanumerycznych .................................................................... 332 Funkcje biblioteczne .............................................................................................. 337 Definiowanie wáasnych znaków ............................................................................. 342 Przykáad — menu ................................................................................................... 345 Obsáuga wyĞwietlaczy graficznych .............................................................................. 354 Rozdziaä 19. Interfejs USART ........................................................................... 367 Interfejsy szeregowe ..................................................................................................... 367 Interfejs USART ........................................................................................................... 368 Interfejs USART mikrokontrolera AVR ................................................................ 371 Przykáady ...................................................................................................................... 375 Poáączenie mikrokontroler – komputer PC ............................................................. 375 RS485 ..................................................................................................................... 383 8 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Rozdziaä 20. Interfejs SPI ................................................................................. 391 Inicjalizacja interfejsu ................................................................................................... 394 Ustawienie pinów IO .............................................................................................. 395 Zegar taktujący ....................................................................................................... 396 Procesor w trybie Master SPI ................................................................................. 396 Procesor w trybie slave SPI .................................................................................... 397 Przykáady ...................................................................................................................... 397 Poáączenie AVR-AVR ........................................................................................... 397 Poáączenie AVR – rejestr szeregowy ..................................................................... 403 Interfejs USART w trybie SPI ...................................................................................... 408 Taktowanie magistrali SPI ..................................................................................... 409 Tryb pracy SPI ....................................................................................................... 409 Format ramki danych ............................................................................................. 409 Konfiguracja interfejsu ........................................................................................... 410 Rozdziaä 21. Interfejs TWI ................................................................................ 413 Tryb multimaster .......................................................................................................... 416 Inicjalizacja interfejsu ................................................................................................... 417 Procesor w trybie I2C master ....................................................................................... 417 Bity START i STOP .............................................................................................. 417 Podstawowe funkcje do wspóápracy z I2C ............................................................. 418 Wspóápraca z zewnĊtrzną pamiĊcią EEPROM ....................................................... 422 Wspóápraca z zewnĊtrzną pamiĊcią FRAM ............................................................ 427 Umieszczanie zmiennych w zewnĊtrznej pamiĊci EEPROM ................................. 427 Wspóápraca z zegarem RTC ................................................................................... 431 Obsáuga ekspandera IO PCF8574 ........................................................................... 436 Procesor w trybie I2C slave .......................................................................................... 437 Przykáad ................................................................................................................. 440 Rozdziaä 22. Interfejs USI ................................................................................. 447 4-bitowy licznik i zegar ................................................................................................ 447 Przerwania USI ............................................................................................................. 448 Zmiana pozycji pinów .................................................................................................. 449 Wykorzystanie interfejsu USI w trybie SPI .................................................................. 449 Tryb SPI master ...................................................................................................... 451 Tryb SPI slave ........................................................................................................ 452 Rozdziaä 23. Interfejs USB ............................................................................... 453 Zasilanie ....................................................................................................................... 454 Sygnaáy danych ............................................................................................................ 455 VID i PID ..................................................................................................................... 456 Interfejs USB realizowany przy pomocy konwertera ................................................... 458 Interfejs USB realizowany programowo ...................................................................... 459 Poáączenie elektryczne ........................................................................................... 460 DostĊp na PC .......................................................................................................... 460 Programowy interfejs USB na AVR ...................................................................... 461 SprzĊtowy interfejs USB .............................................................................................. 464 Rozdziaä 24. Interfejs 1-wire ............................................................................. 465 Realizacja master 1-wire na AVR ................................................................................ 469 Realizacja master 1-wire przy pomocy pinów IO ................................................... 469 Realizacja master 1-wire przy pomocy interfejsu USART ..................................... 472 Wysokopoziomowe funkcje obsáugi 1-wire ........................................................... 477 Termometr cyfrowy DS1820 ........................................................................................ 480 Spis treĈci 9 Rozdziaä 25. Bootloader ................................................................................... 483 PamiĊü NRWW i RWW ............................................................................................... 483 Bity konfiguracyjne bootloadera .................................................................................. 485 Konfiguracja lockbitów z poziomu aplikacji .......................................................... 486 Programowanie pamiĊci FLASH .................................................................................. 487 Wykorzystanie przerwaĔ w kodzie bootloadera ........................................................... 489 Usuwanie tablicy wektorów przerwaĔ .................................................................... 490 Skrócenie tablicy wektorów przerwaĔ .................................................................... 491 Start bootloadera ........................................................................................................... 496 Wykorzystanie dodatkowego przycisku/zworki ..................................................... 496 Wykorzystanie markerów w pamiĊci EEPROM .................................................... 497 Oczekiwanie na specjalny znak w wybranym kanale komunikacji ........................ 498 Start aplikacji ......................................................................................................... 499 Wspóádzielenie kodu aplikacji i bootloadera ................................................................ 499 Wywoáywanie funkcji bootloadera w procesorach ATMega256x .......................... 501 Wywoáywanie funkcji obsáugi przerwaĔ zawartych w kodzie bootloadera ............ 505 Wspóádzielenie zmiennych pomiĊdzy aplikacją a bootloaderem ........................... 505 Mikrokontrolery AVR z wbudowanym bootloaderem ................................................. 507 Rozdziaä 26. Kontrola integralnoĈci programu ................................................... 509 Suma kontrolna ............................................................................................................. 509 CRC .............................................................................................................................. 511 Automatyczne generowanie CRC ................................................................................. 514 Rozdziaä 27. Bezpieczeþstwo kodu ................................................................... 517 Metody áamania zabezpieczeĔ ...................................................................................... 517 Bezpieczne uaktualnianie aplikacji ............................................................................... 518 Nota AVR231 — AES Bootloader ............................................................................... 519 Ustawienie bitów konfiguracyjnych ....................................................................... 524 Przygotowanie aplikacji ......................................................................................... 526 Wczytywanie uaktualnienia .................................................................................... 527 Rozdziaä 28. ãñczenie kodu w C i asemblerze ................................................... 529 Sáowo kluczowe asm .................................................................................................... 530 Typy operandów ..................................................................................................... 531 DostĊp do portów IO .............................................................................................. 533 DostĊp do danych wielobajtowych ......................................................................... 533 DostĊp do wskaĨników ........................................................................................... 534 Lista modyfikowanych rejestrów ........................................................................... 535 Wielokrotne uĪycie wstawki asemblerowej ........................................................... 535 Pliki .S .......................................................................................................................... 536 Wykorzystanie rejestrów w asemblerze ................................................................. 537 Przykáady ............................................................................................................... 541 Rozdziaä 29. Optymalizacja i debugowanie programu ......................................... 543 Optymalizacja programu .............................................................................................. 543 Opcje kompilatora związane z optymalizacją ........................................................ 545 Atrybuty optymalizacji ........................................................................................... 548 Debugowanie programu ............................................................................................... 551 RozpoczĊcie sesji debugera .................................................................................... 553 Zaawansowane sterowanie przebiegiem wykonywanej aplikacji ........................... 556 Skorowidz .................................................................................... 559 Rozdziaä 2. Programowanie mikrokontrolera Po wygenerowaniu plików wynikowych naleĪy ich zawartoĞü umieĞciü w pamiĊci mikro- kontrolera. DziĊki temu po restarcie procesor bĊdzie mógá rozpocząü wykonywanie programu. Procesory AVR dysponują moĪliwoĞcią programowania „w ukáadzie” przy pomocy interfejsu ISP, czĊĞü moĪe byü programowana poprzez interfejsy JTAG, debugWire, PDI, TPI, a w przypadku procesorów posiadających interfejs USB moĪna takĪe programowaü procesor poprzez wbudowany bootloader. W tym ostatnim przy- padku nie da siĊ jednak zmieniaü konfiguracji fusebitów. KaĪda z metod programowania ma swoje zalety i wady. Podäñczenie — uwagi ogólne KaĪdy programator áączy siĊ z ukáadem docelowym przy pomocy dedykowanych wypro- wadzeĔ. Dla programatorów szeregowych jest to zwykle 4 – 5 wyprowadzeĔ, dla rów- nolegáych znacznie wiĊcej. Wykorzystanie wyprowadzeĔ mikrokontrolera do progra- mowania ogranicza moĪliwoĞü ich wykorzystania do innych celów. Najlepiej, jeĞli takie wyprowadzenia nie bĊdą wykorzystywane do niczego innego — w ukáadzie bĊdą one podáączone wyáącznie do gniazda áączącego z programatorem. Jednak w ukáadach posiadających niewielką liczbĊ wyprowadzeĔ nie zawsze jest to moĪliwe. Stąd teĪ powinniĞmy pamiĊtaü, aby podáączone do tych wyprowadzeĔ urządzenia nie obciąĪaáy ich zbytnio (w trybie programowania bĊdą one obciąĪaáy wyjĞcie programatora). Z tego powodu nie zaleca siĊ podáączaü do nich np. diod LED, nie naleĪy na tych liniach doda- waü takĪe kondensatorów, szczególnie o wiĊkszych pojemnoĞciach ( 1 nF). Dodatkowo jeĞli jakieĞ wyprowadzenie jest wejĞciem (czyli wyjĞciem ukáadu programującego), nie naleĪy áączyü do niego innych wyjĞü — w takiej sytuacji w trakcie programowania powstanie konflikt pomiĊdzy wyjĞciem programatora a wyjĞciem ukáadu korzystają- cego z tego pinu. 54 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Pamiötajmy, Ĕe dla programatora nie ma znaczenia, jak w programie skonfigurowane sñ piny wykorzystywane do programowania. Programator na czas programowania wprowadza procesor w stan RESET, co wiąĪe siĊ z wprowadzeniem wszystkich pinów IO w stan wysokiej impedancji. Szczególną uwagĊ naleĪy zwróciü na podáączenie sygnaáu RESET. Aby wejĞü w tryb programowania, programator musi mieü moĪliwoĞü wymuszenia na tej linii stanu niskiego (lub +12 V w przypadku programatorów wysokonapiĊciowych). W efekcie pro- blem moĪe wystąpiü, jeĞli w ukáadzie uĪywane są zewnĊtrzne ukáady generujące RESET lub monitorujące zasilanie. Przykáadowy schemat podáączenia procesora do progra- matora ISP pokazano na rysunku 2.1. Rysunek 2.1. Przykáad podáączenia programatora ISP do mikrokontrolera ATMega88 W dalszych rozdziaäach ksiñĔki pokazane schematy, dla uproszczenia i wiökszej przej- rzystoĈci, nie bödñ juĔ zawieraäy elementów pokazanych na schemacie z rysunku 2.1, czyli gniazda ISP, kondensatorów odsprzögajñcych oraz poäñczeþ z zasilaniem (Vcc i GND). Aby pokazane w dalszej czĊĞci ukáady dziaáaáy poprawnie, naleĪy zapewniü poprawne poáączenie elementów pokazanych na rysunku 2.1. Szczególnie istotne jest podáą- czenie w kaĪdym procesorze wszystkich wystĊpujących w nim wyprowadzeĔ zasilania (Vcc i GND). Przy braku podáączenia niektórych wyprowadzeĔ ukáad moĪe dziaáaü Rozdziaä 2. i Programowanie mikrokontrolera 55 niestabilnie i stwarzaü problemy. Drugim istotnym elementem są kondensatory odsprzĊ- gające C23 i C24. Są to elementy, których zadaniem jest odsprzĊganie zasilania, a ich znaczenie roĞnie wraz ze wzrostem stopnia skomplikowania ukáadu. Problemy NajczĊstsze problemy z zaprogramowaniem procesora: 1. W przypadku programowania w trybie ISP „zablokowanie” procesora, poprzez niewáaĞciwą konfiguracjĊ fusebitów. 2. Nieprawidáowa czĊstotliwoĞü sygnaáu SCK (w przypadku programatorów ISP). JeĞli podejrzewamy taki problem, naleĪy zmniejszyü szybkoĞü programowania. W Īadnym przypadku nie moĪe ona przekroczyü ¼ czĊstotliwoĞci taktowania procesora. 3. Zbyt dáugi kabel áączący programator z ukáadem. Im dáuĪszy kabel, tym wiĊksze ryzyko niepoprawnej pracy ukáadu. Zwykle problem ten objawia siĊ niestabilną pracą programatora. 4. BáĊdne podáączenie sygnaáów. Zawsze warto siĊ upewniü, Īe wszystkie sygnaáy zostaáy prawidáowo poáączone z odpowiednimi wyprowadzeniami procesora. 5. Pomyákowe podáączenie programatora nie do wyprowadzeĔ związanych z ISP, lecz do wyprowadzeĔ związanych z interfejsem SPI (oznaczenia linii sygnaáowych są podobne). Problem ten dotyczy gáównie procesorów ATMega128. 6. Wybór niewáaĞciwego programatora lub niewáaĞciwego trybu programowania. 7. Zablokowanie wykorzystywanego interfejsu (dotyczy gáównie próby programowania przy wyáączonym interfejsie JTAG lub próby programowania przy pomocy ISP, z wáączonym interfejsem debugWire). Programatory ISP Prawie kaĪdy procesor AVR dysponuje moĪliwoĞcią programowania przy pomocy inter- fejsu ISP (ang. In-system Programming Interface). Interfejs ten wykorzystuje do pro- gramowania piny RESET, MISO, MOSI oraz SCK. Zwykle piny te pokrywają siĊ z analo- gicznymi wyprowadzeniami interfejsu SPI, lecz nie zawsze tak jest. Jednym z takich wyjątków jest procesor ATMega128. Stąd teĪ zawsze naleĪy dokáadnie sprawdziü, jakie wyprowadzenia procesora wykorzystywane są do programowania przy pomocy inter- fejsu ISP. Informacje o wykorzystanych wyprowadzeniach znajdują siĊ w nocie katalo- gowej procesora, w sekcji Memory Programming/Serial Downloading. Programatory ISP mają znormalizowany ukáad sygnaáów wyprowadzonych na záącze programujące, poka- zany na rysunku 2.2. Istnieją dwa typy záącza ISP — jedno mniejsze, 6-pinowe, oraz wiĊksze 10-pinowe. OdstĊp pomiĊdzy pinami wynosi 2,54 mm, chociaĪ w nowszych konstrukcjach Atmela 56 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Rysunek 2.2. Rozkáad sygnaáów standardowych programatorów. Kwadratem oznaczono wyprowadzenie o numerze 1 spotyka siĊ rozstaw pinów 1,27 mm. UmoĪliwia to zmniejszenie rozmiarów záącza pro- gramującego na páytce. Pewnego omówienia wymaga przeznaczenie pinu oznaczonego jako +Vcc. Do tego pinu naleĪy podáączyü napiĊcie zasilające ukáad. NapiĊcie z tego pinu wykorzystywane jest przez programator do zasilania buforów wyjĞciowych, dziĊki czemu programator dostosowuje poziomy napiĊü na pozostaáych pinach programatora do napiĊü panujących w programowanym ukáadzie. CzĊĞü programatorów posiada takĪe specjalną zworkĊ przeáączającą napiĊcie. W takiej sytuacji jedna z pozycji powoduje zasilenie programatora z programowanego ukáadu, w drugiej pozycji to programator zasila pro- gramowany ukáad. Programator áączy siĊ z programowanym ukáadem tak, jak pokazano na rysunku 2.3. Komputer Programator UrzČdzenie programowane B S U B S U Rysunek 2.3. Poáączenie programowanego ukáadu z programatorem i komputerem PC. Masy wszystkich urządzeĔ muszą zostaü poáączone razem àącząc programator z komputerem i programowanym ukáadem, naleĪy zwracaü uwagĊ na potencjaá masy. W komputerach klasy PC, ze wzglĊdu na budowĊ zasilacza, masa (obudowa komputera) przy braku zerowania ma potencjaá ok. 115 V wzglĊdem ziemi (wynika to z istnienia w zasilaczu ukáadu filtrującego). W efekcie przy braku zerowania komputera lub niepoprawnym zerowaniu moĪe dojĞü do uszkodzenia programatora lub programowanego ukáadu. Aby uniknąü takich przykrych niespodzianek, moĪna zaopa- trzyü siĊ w programator z optoizolowanymi wyjĞciami, lecz jest to dodatkowy, spory wydatek. Budowa programatora Programatory ISP są jednymi z najprostszych w budowie, w związku z tym kaĪdy moĪe poskáadaü sobie taki programator, dosáownie z niczego. W szczególnie dobrej sytuacji są tu uĪytkownicy posiadający komputery z wyprowadzonym portem równolegáym. W takiej sytuacji programator moĪe byü zwykáą przejĞciówką pomiĊdzy portem kom- putera a gniazdem ISP. Ukáad taki jest niezwykle prosty, lecz niezalecany. Jakikolwiek báąd w poáączeniach moĪe bardzo áatwo doprowadziü do uszkodzenia portu równolegáego, Rozdziaä 2. i Programowanie mikrokontrolera 57 dodatkowo jego niewielka wydajnoĞü prądowa powoduje znaczne ograniczenie maksy- malnej dáugoĞci przewodu áączącego komputer z programowanym ukáadem (w praktyce do kilkunastu cm). Stąd znacznie lepszym rozwiązaniem jest to pokazane na rysunku 2.4. Rysunek 2.4. Schemat prostego programatora ISP podáączanego do portu równolegáego komputera Jak widaü, programator taki skáada siĊ z bufora 74XX244 (nie musi to byü ukáad serii HC). Jego wprowadzenie umoĪliwia znaczne wydáuĪenie przewodu áączącego komputer z pro- gramatorem, nawet do 1 m i wiĊcej (naleĪy mieü na uwadze, Īe zbyt dáugi przewód áączący nie jest zalecany i w pewnych okolicznoĞciach moĪe prowadziü do problemów z progra- mowaniem). Wprowadzenie tego ukáadu chroni takĪe port równolegáy. W przypadku báĊdnego podáączenia zasilania np. do pinów programatora uszkodzeniu ulegnie tylko tani ukáad buforujący, ochraniając port równolegáy. Wykonanie takiego programatora to koszt rzĊdu kilku záotych, lecz juĪ za kilkanaĞcie záotych moĪna kupiü programatory bardziej rozbudowane, których zaletami są:  bezpoĞrednia wspóápraca z AVR Studio;  moĪliwoĞü programowania ukáadów zasilanych innym napiĊciem niĪ 5 V;  wspóápraca z portem USB mikrokontrolera. Szczególnie ta ostania cecha jest poĪądana. Porty USB, w przeciwieĔstwie do równo- legáych, wystĊpują praktycznie w kaĪdym urządzeniu, lecz ich najwiĊkszą zaletą jest moĪliwoĞü czerpania energii z takiego portu. Stwarza to moĪliwoĞü nie tylko zasilania samego programatora, ale takĪe zasilania programowanego ukáadu (tu jednak trzeba mieü na uwadze ograniczoną do ok. 0,5 A wydajnoĞü prądową portu USB). 58 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji Programator AVRISP Jest to prosty programator z moĪliwoĞcią podáączenia poprzez port szeregowy RS232 lub USB. Na rynku dostĊpne są liczne klony tego ukáadu, w efekcie moĪna go kupiü juĪ za kilkanaĞcie záotych, co czyni go szczególnie interesującym dla amatora. W stosunku do prostych programatorów, posiadających tylko bufor, jego zaletą jest moĪliwoĞü pro- gramowania ukáadów zasilanych napiĊciem w granicach 2,7 – 5,5 V. Klasyczny progra- mator AVRISP zasilany jest z urządzenia programowanego, lecz jego wersje na USB czĊsto posiadają zworki, umoĪliwiające wybór Ĩródáa zasilania. Przy jego pomocy moĪna programowaü szeroką gamĊ modeli procesorów AVR. Wyjątkiem jest tu tylko rodzina AVR XMega oraz AVR32, wymagające programatora AVRISP mkII. Programator ten posiada wbudowany procesor, którego firmware kontroluje proces programowania. Wraz z uaktualnianiem AVR Studio firmware ten teĪ moĪe zostaü uaktualniony, w efekcie poszerza siĊ lista obsáugiwanych procesorów. Programator ten jest rozwiązaniem tanim, lecz warto mieü na uwadze, Īe obecnie nie jest on juĪ praktycznie rozwijany przez firmĊ Atmel. Stąd potencjalnie mogą byü pro- blemy z jego wykorzystaniem z najnowszymi modelami procesorów. Programator AVRISP mkII Rozwiązaniem dla bardziej zaawansowanych amatorów i osób, które póáprofesjonalnie chcą siĊ zajmowaü mikrokontrolerami AVR, jest programator AVRISP mkII. RównieĪ ten programator dostĊpny jest w postaci klonów, w efekcie moĪna go kupiü za cenĊ ok. 100 – 150 zá. Jest to programator aktywnie wspierany przez firmĊ Atmel, wspiera- jący wszystkie rodziny procesorów AVR (áącznie z procesorami XMega oraz AVR32). Wspiera takĪe procesory ATTiny, nieposiadające interfejsu ISP, dziĊki moĪliwoĞci wyko- rzystania interfejsu TPI. Programator ten moĪe programowaü ukáady zasilane napiĊciem od 1,8 do 5,5 V, dodat- kowo moĪna regulowaü czĊstotliwoĞü sygnaáu zegarowego taktującego transmisjĊ w zakresie 50 Hz – 8 MHz. Ma to istotną zaletĊ w przypadku programowania ukáa- dów niskonapiĊciowych, taktowanych z wolnych zegarów, np. kwarców zegarkowych o czĊstotliwoĞci 32 768 Hz. Maksymalna prödkoĈè programowania wynika z ograniczeþ interfejsów szerego- wych — czöstotliwoĈè linii SCK nie moĔe byè wiöksza niĔ czterokrotnoĈè czöstotli- woĈci taktujñcej rdzeþ procesora. Tak wiĊc wykorzystanie programatora AVRISP mkII umoĪliwia programowanie proce- sorów taktowanych zegarem od 200 Hz wzwyĪ. Programator ten wspóápracuje z interfejsem USB, posiada takĪe wyjĞcia zabezpieczone przez zwarciem. Rozdziaä 2. i Programowanie mikrokontrolera 59 Programator USBASP Programator ten jest niezwykle popularny ze wzglĊdu na jego prostotĊ oraz niską cenĊ. Dodatkową zaletą tego programatora jest wsparcie ze strony WinAVR oraz bardzo popu- larnego programu AVRDude. Schemat tego programatora pokazano na rysunku 2.5. Rysunek 2.5. Schemat programatora USBASP. Programator ten zawiera mikrokontroler sterujący procesem programowania ukáadu docelowego. DziĊki temu programator ten jest niezaleĪny od przebiegów czasowych generowanych przez komputer. àącznoĞü z komputerem nastĊpuje poprzez záącze USB, stąd teĪ programator czerpie zasilanie. Po zwarciu zworki JP1-2 moĪliwe jest takĪe zasilanie z portu USB ukáadu programowanego Programator ten umoĪliwia takĪe programowanie procesorów taktowanych zegarami o niskiej czĊstotliwoĞci. Przy pomocy zworki JP3 moĪna przeáączaü czĊstotliwoĞü linii SCK z 375 kHz na 8 kHz, co umoĪliwia programowanie ukáadów taktowanych kwarcem zegarkowym o czĊstotliwoĞci 32 768 Hz. Zwarcie zworki JP1-1 umoĪliwia zaprogra- mowanie lub uaktualnienie oprogramowania programatora poprzez jego záącze ISP. Kilka procesorów w jednym ukäadzie Sporadycznie zdarza siĊ, Īe na jednej páytce znajduje siĊ wiĊcej niĪ jeden procesor AVR i kaĪdy powinien mieü zapewnioną moĪliwoĞü programowania. NajchĊtniej w takiej sytuacji chcielibyĞmy móc korzystaü tylko z jednego gniazda programującego. Konfi- guracja taka jest moĪliwa, musimy tylko pamiĊtaü o speánieniu pewnych dodatkowych zaáoĪeĔ. W takiej sytuacji sygnaáy z programatora (RESET, MISO, MOSI) powinny byü rozprowadzone do wszystkich mikrokontrolerów. Natomiast sygnaá SCK musi pozostaü 60 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji rozdzielony. Przy takiej konfiguracji wyboru programowanego mikrokontrolera doko- nuje siĊ poprzez wybranie mikrokontrolera, do którego doprowadzony zostanie sygnaá SCK. Ukáad taki moĪe dziaáaü, poniewaĪ aby procesor wszedá w tryb programowania (a co za tym idzie, linie MOSI i MISO staáy siĊ aktywne), musi byü speánionych kilka zaáoĪeĔ. Po pierwsze, programator musi zapewniü aktywnoĞü sygnaáu RESET. DziĊki utrzymywaniu go w stanie aktywnym wyprowadzenia wszystkich mikrokontrolerów przechodzą w stan wysokiej impedancji. DziĊki temu nie zakáócają one transmisji. Uaktywnienie trybu programowania wymaga w takiej sytuacji doprowadzenia do wejĞcia SCK odpowied- niego przebiegu. PoniewaĪ przebieg taki zostanie doprowadzony wyáącznie do wybra- nego procesora, inne procesory pozostaną nieaktywne, z wyprowadzeniami w stanie wysokiej impedancji. W przypadku gdy na páytce znajduje siĊ jeden wiĊkszy procesor i jeden lub wiĊcej procesorów ze stosunkowo niewielką iloĞcią pamiĊci FLASH, moĪna rozwaĪyü jeszcze jedną moĪliwoĞü. FunkcjĊ programatora moĪe przejąü procesor „wiĊkszy”, odpowied- nio sterując wyprowadzeniami odpowiedzialnymi za programowanie innych procesorów. W takiej sytuacji ich przeprogramowanie wymaga wczytania do procesora kontrolują- cego pozostaáe odpowiedniego programu oraz zawartoĞci pamiĊci FLASH pozostaáych procesorów. Rozwiązanie takie jest stosunkowo proste, lecz wymaga takiego podáącze- nia wszystkich mikrokontrolerów, aby ich wyprowadzenia programujące byáy dostĊpne dla procesora nadrzĊdnego. Programatory JTAG Programatory wykorzystujące interfejs JTAG są o wiele droĪsze, ale oprócz moĪliwoĞci programowania przy ich pomocy procesora oferują takĪe moĪliwoĞü debugowania. Obecnie na rynku wystĊpują dwie wersje programatora JTAG dla mikrokontrolerów AVR — JTAGICE oraz JTAGICE II. Ten drugi cechuje siĊ bardzo wysoką ceną (ok. 700 – 1200 zá), ale oferuje moĪliwoĞü programowania wszystkich mikrokontrole- rów AVR wyposaĪonych w interfejs JTAG. Za jego pomocą moĪna takĪe programo- waü mikrokontrolery AVR32. MoĪliwoĞci programatora JTAGICE są skromniejsze, ale za to jego cena jest niewiele wyĪsza niĪ programatora ISP. Programator ten áączy siĊ z programowanym ukáadem przy pomocy gniazda o innym rozkáadzie sygnaáów niĪ w przypadku programatora ISP — rysunek 2.6. Rysunek 2.6. Rozkáad sygnaáów na záączu JTAG. Pin 1 oznaczono kwadratem Interfejs JTAG wykorzystuje piĊü sygnaáów: RESET, TCK, TMS, TDI oraz TDO. Do pinu 7 (VCC) naleĪy doprowadziü napiĊcie zasilające tylko w sytuacji, w której programator ma byü zasilany z ukáadu. JeĞli programator ma wáasne zasilanie, pin 7 moĪna pozostawiü Rozdziaä 2. i Programowanie mikrokontrolera 61 niepodáączony. Z kolei pin 4 dostarcza napiĊcia umoĪliwiającego programatorowi dosto- sowanie poziomu napiĊü na liniach RESET, TCK, TMS, TDI i TDO do napiĊü panujących w ukáadzie. Na podstawie napiĊcia na tej linii programator wykrywa takĪe podáączenie do ukáadu programowanego. Wyprowadzenia oznaczone jako NC naleĪy pozostawiü niepodáączone. Aby móc korzystaè z tego trybu, procesor musi obsäugiwaè interfejs JTAG, a fusebit JTAGEN musi byè zaprogramowany (mieè wartoĈè 0). Programowanie przy uĪyciu interfejsu JTAG ma liczne zalety:  Jest 3 – 4 razy szybsze w stosunku do programowania przy uĪyciu interfejsu ISP.  Podobnie, znacznie szybsze jest takĪe programowanie pamiĊci EEPROM.  UmoĪliwia zmianĊ fusebitów okreĞlających Ĩródáo sygnaáu zegarowego, niezaleĪnie od ich poprzednich wartoĞci. Interfejs JTAG sam generuje zegar dla ukáadu docelowego, stąd wybranie nawet báĊdnych wartoĞci nie blokuje moĪliwoĞci dalszego programowania (odmiennie niĪ w przypadku interfejsu ISP).  Istnieje moĪliwoĞü áączenia urządzeĔ w konfiguracjĊ daisy-chain, umoĪliwiającą programowanie wielu urządzeĔ przy pomocy jednego záącza JTAG.  Istnieje moĪliwoĞü programowania nie tylko mikrokontrolerów AVR, ale takĪe innych ukáadów kompatybilnych ze standardem JTAG (np. FPGA). Niezwykle istotnñ zaletñ interfejsu JTAG jest moĔliwoĈè debugowania przy jego pomocy programu w trakcie jego dziaäania w docelowym ukäadzie elektronicznym. MoĪliwoĞü taka jest wprost trudna do przecenienia, szerzej zostanie opisana w roz- dziale 29. Programator JTAGICE Cena tego ukáadu porównywalna jest z ceną dobrego programatora ISP. Jest to wiĊc propozycja dla hobbystów zdecydowanie powaĪniej myĞlących o zajĊciu siĊ budowaniem ukáadów w oparciu o mikrokontrolery AVR. Zastosowania tego programatora ogranicza stosunkowo niewielka liczba wspieranych ukáadów [ATmega16(L), ATmega162(L), ATmega169(L or V), ATmega32(L), ATmega323(L), ATmega64(L), ATmega128(L)]. Lecz nawet pomimo tej wady warto rozwaĪyü jego zakup, szczególnie jeĞli jesteĞmy w posiadaniu páytki rozwojowej zawierającej jeden z wyĪej wymienionych procesorów. Programowanie przy jego pomocy jest nie tylko szybsze, lecz przede wszystkim udo- stĊpnia szerokie moĪliwoĞci debugowania ukáadu w systemie. DziĊki temu nawet jeĞli pisany program bĊdzie docelowo dziaáaá na innym typie procesora, áatwiej jest napisaü aplikacjĊ na jednym ze wspieranych przez JTAGICE procesorów, a nastĊpnie ją tylko zmodyfikowaü dla potrzeb procesora docelowego. UĪycie interfejsu JTAG umoĪliwia nie tylko debugowanie samego programu, ale takĪe sprawdzenie stanu wszystkich bloków 62 Jözyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji procesora, a takĪe jego portów IO. Oprócz moĪliwoĞci sprawdzenia stanu moĪna ich stan takĪe modyfikowaü „w locie”. Uáatwia to testowanie poprawnoĞci poáączeĔ elek- trycznych na páytce i poprawnoĞci montaĪu. Programator JTAGICE mkII Programator JTAGICE mkII jest rozwiniĊciem ukáadu JTAGICE. UmoĪliwia on pro- gramowanie wszystkich procesorów AVR wyposaĪonych w interfejs JTAG, w tym takĪe procesorów z rodziny AVR32. Ze wzglĊdu na cenĊ tego programatora (przekraczająca 1000 zá) jest to raczej propozycja dla osób chcących bardziej profesjonalnie zająü siĊ programowaniem i budowaniem ukáadów w oparciu o mikrokontrolery. Funkcjonalnie programator ten nie róĪni siĊ od swojego poprzednika, udostĊpnia podobne moĪliwoĞci. Oprócz programowania przez interfejs JTAG udostĊpnia takĪe moĪliwoĞü programo- wania z wykorzystaniem interfejsów PDI, debugWire, SPI oraz aWire. W efekcie za jego pomocą moĪna zaprogramowaü praktycznie wszystkie procesory AVR. Kilka procesorów w jednym ukäadzie Podobnie jak w przypadku ISP, takĪe JTAG umoĪliwia wykorzystanie jednego záącza do programowania kilku ukáadów. Funkcja taka jest wpisana w specyfikacjĊ proto- koáu JTAG, wiĊc teoretycznie taka konfiguracja powinna byü nawet áatwiejsza w reali- zacji. Tu, niestety, jak to zwykle bywa, napotykamy na problemy natury programowej. WiĊkszoĞü dostĊpnego oprogramowania nie wspiera moĪliwoĞci wybierania procesora w konfiguracji áaĔcuchowej JTAG (ang. Daisy-chain JTAG mode). Sytuacja ta stop- niowo siĊ zmienia i czĊĞü oprogramowania dostarczonego przez firmĊ Atmel wspiera taką konfiguracjĊ dla programatora AVRICE mkII. Schemat podáączenia interfejsów JTAG w konfiguracji daisy-chain pokazano na rysunku 2.7. Linie TDI i TDO kolejnych proce- sorów są poáączone szeregowo. Rysunek 2.7. Poáączenie kilku ukáadów AVR, wykorzystujących jedno záącze JTAG Rozdziaä 2. i Programowanie mikrokontrolera 63 Inną moĪliwoĞcią jest rozwiązanie analogiczne do pokazanego przy okazji programo- wania ISP — poáączenie równolegáe odpowiednich linii JTAG, z wyjątkiem linii SCK. Wybór aktywnej linii SCK umoĪliwia wybór programowanego/debugowanego ukáadu. Korzystajñc z moĔliwoĈci konfiguracji daisy-chain, naleĔy mieè na uwadze jeszcze jeden problem — niektóre mikrokontrolery AVR majñ bäödnñ implementacjö obsäugi JTAG, uniemoĔliwiajñcñ zastosowanie konfiguracji daisy-chain. Stñd przed jej uĔyciem naleĔy zawsze sprawdziè erratö do noty katalogowej procesora, zgodnñ z jego modelem oraz wersjñ ukäadu. AVR Dragon Alternatywą dla wczeĞniej wymienionych programatorów, w tym dla drogiego JTA- GICE mkII, jest ukáad AVR Dragon. W przeciwieĔstwie do wczeĞniejszych ukáadów jest on sp
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: