Spis treści
Rozdział 1. Wstęp, czyli nowi członkowie rodziny AVR (11)
- Przykłady do książki (12)
- Mikrokontrolery XMEGA (12)
- XMEGA a inne AVR-y (15)
- Kompilator (15)
- Nowe peryferia (16)
Rozdział 2. Jak zacząć, czyli instalacja środowiska (21)
- Xplained jako płyta rozwojowa (22)
- Instalacja Xplained w systemie (22)
- Instalacja XMEGA z bootloaderem klasy DFU (25)
- Programowanie układów XMEGA (25)
- Wczytywanie firmware za pomocą FLIP (26)
- Bootloader firmy Atmel (28)
- Podstawowe opcje programu batchisp (28)
- Interfejs JTAG (32)
- Programowanie z wykorzystaniem interfejsu PDI (34)
- Programatory (34)
- AVRISP mkII (35)
- JTAGICE mkII (35)
- JTAGICEIII (36)
- AVROne! (36)
- AVR Dragon (36)
- Programowanie i debugowanie procesorów XMEGA (43)
- Odsprzęganie zasilania (44)
- Instalacja potrzebnego oprogramowania (44)
- Atmel Studio 6 - podstawy (45)
- Programowanie z poziomu AS6 - dlaczego warto korzystać z plików w formacie elf (53)
Rozdział 3. Organizacja i zarządzanie projektem (55)
- Komentarze (55)
- Nazewnictwo (57)
- Podział kodu na pliki (61)
- Widoczność funkcji (66)
- Widoczność zmiennych (66)
- Podkatalogi (67)
- Podział funkcji (69)
- Zmienne globalne (70)
- Systemy wersjonowania (74)
- Serwer SVN na własnym komputerze (75)
- Jak korzystać z SVN (78)
- Praca z SVN (81)
- Uwagi końcowe (84)
- Inne ułatwienia (85)
- Jak pisać lepsze programy? (86)
Rozdział 4. Jak tworzyć lepszy i efektywniejszy kod (89)
- Włączenie optymalizacji (90)
- Długość typów (91)
- Zmienne globalne i zmienne lokalne (93)
- Modyfikator register (94)
- Użycie globalnych rejestrów ogólnego przeznaczenia (97)
- Wykorzystanie innych rejestrów jako GPIOR (99)
- Inicjalizacja zmiennych globalnych (99)
- Położenie zmiennych w pamięci (99)
- Optymalizacja pętli (100)
- Optymalizacja funkcji (101)
- Optymalizacja funkcji main (101)
- Optymalizacja prologów i epilogów funkcji (101)
- Optymalizacja przekazywania parametrów funkcji (102)
- Optymalizacja zwracania wyników funkcji (105)
- Dodatkowe atrybuty funkcji (106)
- Inne (110)
- Eliminacja martwego kodu (111)
- Konstruktory i destruktory (114)
Rozdział 5. Jak uporządkować chaos, czyli złożone typy danych i listy (117)
- Tablice (118)
- Struktury (119)
- Deep copy i shallow copy (123)
- Wskaźniki i struktury (126)
- Struktury anonimowe (127)
- Inicjalizacja pól struktury (128)
- Unie (129)
- Pola bitowe (130)
- Struktury a optymalizacja programu (131)
- Listy (135)
- Listy jednokierunkowe (136)
- Listy dwukierunkowe (140)
- Listy XOR (142)
- Bufory (148)
- Bufor pierścieniowy (149)
- Kolejki FIFO/LIFO (152)
- Stos (152)
Rozdział 6. Koniec bałaganu, czyli o nazwach rejestrów i układów peryferyjnych (155)
- Struktury opisujące mikrokontrolery XMEGA (159)
- Nazwy rejestrów (162)
- Nazwy bitów (162)
Rozdział 7. Lepiej i prościej, czyli porty IO procesora na sterydach (167)
- Piny wejściowe i wyjściowe (168)
- Konwersja poziomów logicznych pomiędzy układami pracującymi z różnymi napięciami zasilającymi (171)
- Łączenie wyjścia procesora z układem pracującym z napięciem 5 V (171)
- Zastosowanie aktywnego konwertera (174)
- Konwersja z napięcia wyższego na niższe (174)
- Dzielnik rezystorowy (176)
- Użycie do konwersji napięć buforów scalonych (177)
- Bufor dwukierunkowy stosowany w magistralach typu open drain (178)
- Kontrola nad portami procesora (181)
- Piny wejściowe i wyjściowe (182)
- Synchronizator (184)
- Konfiguracja sterownika pinu (186)
- Konfiguracja totem-pole (186)
- Konfiguracja Pull up/down (187)
- Konfiguracja bus keeper (188)
- Konfiguracja wired-AND (189)
- Konfiguracja wired-OR (191)
- Odwracanie wyjść IO (192)
- Kontrola szybkości opadania i narastania zboczy (193)
- Kontrola zdarzeń związanych z pinem (193)
- Rejestr kontrolny portu (194)
- Atomowa modyfikacja stanu pinów i wsparcie dla RMW (196)
- Alternatywne funkcje pinu (199)
- Porty wirtualne (200)
- Przekazywanie rejestru jako parametru funkcji (202)
- Remapowanie wyjść IO (203)
Rozdział 8. Kontroler NVM - jak prosto i przyjemnie dobrać się do pamięci (205)
- Pamięć EEPROM i związane z nią operacje (206)
- Dostęp do EEPROM z poziomu AVR-libc (208)
- Dostęp do EEPROM za pomocą bezpośredniego dostępu do kontrolera NVM (213)
- Techniki wear leveling (219)
- Rozdzielenie kasowania i zapisu pamięci (221)
- Dostęp do EEPROM z wykorzystaniem tokenów (224)
- EEPROM i awaria zasilania (232)
- Problem atomowości przy dostępie do EEPROM (244)
- Zapis do EEPROM z użyciem przerwań (244)
- Zapobieganie uszkodzeniu zawartości pamięci EEPROM (246)
- Dostęp do pamięci FLASH (246)
- Typy danych związane z pamięcią FLASH (248)
- Odczyt danych z pamięci FLASH (250)
- Dostęp do FLASH w kompilatorze avr-gcc 4.7 i wyższych - named address spaces (252)
- Wskaźniki wykorzystujące przestrzenie adresowe (254)
- Typy 24-bitowe (258)
Rozdział 9. Potrzebuję więcej mocy - słów kilka o konfiguracji zegara (259)
- Rejestry kontrolne zegarów (260)
- Konfiguracja zegara (262)
- Źródła zegara (263)
- Odblokowywanie źródła zegara (270)
- Układ PLL (270)
- DFLL (272)
- Układ monitorowania zegara zewnętrznego (275)
- Zmiana źródła zegara i jego częstotliwości (277)
- Blokowanie ustawień zegara (277)
- Preskalery zegara (278)
- Uwagi (281)
- Kondensatory odsprzęgające (282)
Rozdział 10. Przerwania i kontroler przerwań (285)
- Przerwania (285)
- Czym są przerwania? (285)
- Przerwania maskowalne (286)
- Przerwania niemaskowalne (287)
- Źródła przerwań (287)
- Konfiguracja i obsługa przerwań (288)
- Czas odpowiedzi na żądanie przerwania (288)
- Funkcja obsługi przerwania (289)
- Wektory przerwań (290)
- Puste wektory przerwań (292)
- Puste przerwania (293)
- Współdzielenie kodu przez przerwania (294)
- Atrybut naked i obsługa przerwań w asemblerze (295)
- Poziomy przerwań (297)
- Przerywanie przerwań (300)
- Priorytety przerwań (302)
- Priorytet dynamiczny (302)
- Globalna flaga zezwolenia na przerwanie (303)
- Przerwanie niemaskowalne (304)
- Rejestr stanu kontrolera przerwań (304)
- Modyfikator volatile (305)
- Zmiana kolejności instrukcji (307)
- Atomowość dostępu do danych (308)
- Instrukcje atomowej modyfikacji pamięci (311)
- Dostęp do wielobajtowych rejestrów IO (314)
- Funkcje reentrant (314)
- Rejestry IO ogólnego przeznaczenia (316)
Rozdział 11. System zdarzeń (319)
- Rejestr multipleksera kanału zdarzeń (320)
- Zaawansowane funkcje kanału zdarzeń (322)
- Filtr cyfrowy (322)
- Dekoder kwadraturowy (322)
- Enkoder kwadraturowy z indeksem (331)
- Programowe sterowanie zdarzeniami (332)
- Zdarzenia jako sygnały sterujące układami zewnętrznymi (333)
- Inne funkcje rejestru (334)
Rozdział 12. Timery i liczniki (337)
- Co to jest licznik? (337)
- Źródła zegara i preskaler (338)
- Typy i funkcje liczników (340)
- Piny wyjściowe licznika (350)
- Licznik typu 2 (351)
- Timery typu 4/5 (353)
- Buforowanie (354)
- Kontrola nad licznikiem (357)
- Kaskadowe łączenie liczników (358)
- Rejestr tymczasowy TEMP (359)
- Wykorzystanie PWM do generowania sygnałów analogowych (361)
- Przykład - generowanie napięcia o zmiennej amplitudzie (363)
- Przykład - generowanie dowolnego przebiegu (364)
- PWM i przerwania (369)
- A może DMA? (371)
- Rozszerzenie zwiększające rozdzielczość (374)
- Tryb HiRes dla licznika typu 2 (377)
Rozdział 13. Kontroler DMA (379)
- Przesyłanie pamięć-pamięć (383)
- Odwracanie danych (384)
- Przesyłanie nakładających się bloków pamięci (385)
- Wypełnianie pamięci wzorcem (388)
- Przesyłanie pamięć-rejestr IO (389)
- Wyzwalacze (392)
- Praca buforowa (395)
- Priorytety kanałów DMA (396)
- Przerwania DMA (397)
- Błąd transmisji DMA (397)
- Przerwanie końca transakcji (398)
Rozdział 14. LED-y - co z nich można wycisnąć? (399)
- Taśmy LED-owe (399)
- Trochę o właściwościach oka, czyli RGB w praktyce (403)
- Program sterujący (404)
- Wyświetlacze LED 7-segmentowe (407)
- Matryce LED (416)
- Projekt PCB i zasilanie (421)
- Dobór napięcia zasilającego matrycę (422)
- Regulacja prądu diod (423)
- Układ z matrycą dwukolorową (423)
- Sterowanie matrycą (425)
- PWM inaczej, czyli jak uzyskać odcienie kolorów (433)
Rozdział 15. Układy zegarowe w praktyce (437)
- RTC czy... RTC? (438)
- 16-bitowy układ RTC (438)
- Synchronizacja dostępu do rejestrów RTC (441)
- Rejestry PER i COMP (442)
- RTC w trybie uśpienia (445)
- 32-bitowy układ RTC (445)
- Generator sygnału zegarowego (445)
- Rejestry PER i COMP (445)
- Rejestr CNT (446)
- Przykładowy program kalendarzowy (446)
- Linuksowy marker czasowy (447)
- Konwersja czasu (447)
- Czas drogą radiową, czyli DCF77 (451)
- Trochę więcej o DCF77 (452)
- Dekodowanie danych (454)
- Moduł odbiornika DCF77 (454)
- Przykład (455)
- Układ podtrzymywania zasilania (462)
- Dobór źródła zasilania awaryjnego (463)
- Wykorzystanie baterii (463)
- Superkondensatory (463)
- Akumulatory (464)
- Podtrzymanie zasilania dla całego procesora (465)
- Układ zapasowego zasilania bateryjnego (465)
Rozdział 16. Budujemy zegar z budzikiem, czyli skończona maszyna stanów w praktyce (469)
- FSM oparta na switch/case (471)
- FSM oparta na tablicach (474)
- Zegar z alarmem (477)
- Jeszcze o maszynach stanu (489)
Rozdział 17. Komunikacja na różne sposoby, czyli USART w praktyce (491)
- Elektryczna realizacja interfejsu USART (492)
- Format transmisji danych (494)
- Szybkość transmisji (496)
- Terminal (496)
- Podgląd transmisji danych (497)
- Wirtualny port szeregowy (499)
- Konfiguracja interfejsu (500)
- Konfiguracja pinów IO (501)
- Konfiguracja formatu ramki danych (502)
- Funkcje dodatkowe interfejsu (502)
- Ustawienie szybkości interfejsu (503)
- Kontrola poprawności danych (508)
- Transmisja danych (509)
- Realizacja transmisji przez pooling (509)
- Wykorzystanie przerwań (512)
- Wykorzystanie DMA (517)
- Równoczesny dostęp do USART z wielu "wątków" (525)
- Dostęp do USART z wykorzystaniem strumieni (527)
- Metoda get (528)
- Metoda put (528)
- Otwieranie strumienia (529)
- Tryb MPCM (530)
Rozdział 18. Wizualizacja danych (535)
- Atmel Data Visualizer (535)
- Format danych (537)
- Struktury wykorzystywane przez ADV (540)
- Ultradźwiękowy pomiar odległości (543)
- Moduły cyfrowe (544)
- Własny moduł (548)
- Budujemy analizator stanów logicznych (550)
- Sprzęt (551)
- Protokół komunikacji (553)
- Implementacja protokołu (555)
- Jak szybko próbkować? (560)
- Klient (564)
- Uwagi praktyczne (566)
Rozdział 19. Wykorzystanie podczerwieni do transmisji danych (569)
- Modulacja IR (570)
- Porozmawiajmy z pilotem TV (572)
- Część sprzętowa, czyli odbiornik IR (572)
- Część programowa, czyli standardy kodowania (574)
- Standard NEC i pokrewne (575)
- RC5 i Motorola (581)
- Kod RC5 (587)
- Inne standardy kodowania (592)
- Nadajnik IR (592)
- Inżynieria odwrotna - dekodujemy sygnał pilota aparatu Canon (595)
- Transmisja danych (597)
- Budujemy pakiet danych (600)
- Sprzętowy generator CRC (602)
- CRC liczone programowo (604)
- Transmisja pakietowa (605)
- Uniwersalny pilot (608)
- Interfejs IrDA i IRCOM (613)
Skorowidz (615)
|