Wbudowane układy peryferyjne cz. 1 Wykład 7
Wbudowane układy peryferyjne UWAGA Nazwy rejestrów i bitów, ich lokalizacja itd. odnoszą się do mikrokontrolera ATmega32 i mogą być inne w innych modelach! Ponadto jeśli nie jest napisane inaczej, włączenie funkcji za pomocą zmiany wartości bitu jest równoważne z ustawieniem jego wartości na 1. 2
Fusebity Fusebity 3
Fusebity Fusebity są specjalnymi bitami, definiującymi tryby pracy niskopoziomowych elementów mikrokontrolera Ich nazwy i funkcje są zależne od modelu mikrokontrolera Ich modyfikacja wymaga użycia programatora Mogą być zaprogramowane (wartość 0) lub niezaprogramowane (wartość 1) 4
Fusebity bajt H Nazwa Pozycja Funkcja Wartość domyślna OCDEN 7 OCD włączone 1 (OCD wyłączony) JTAGEN 6 JTAG włączony 0 (JTAG włączony) SPIEN 5 SPI włączone 0 (SPI włączone) CKOPT 4 Opcje oscylatora 1 EESAVE 3 Wyłączone kasowanie EEPROM 1 (EEPROM jest kasowany) BOOTSZ1 2 Rozmiar sekcji bootloadera 0 BOOTSZ0 1 Rozmiar sekcji bootloadera 0 BOOTRST 0 Wektor resetu 1 5
Fusebity bajt L Nazwa Pozycja Funkcja Wartość domyślna BODLEVEL 7 Poziom wyzwolenia BOD 1 BODEN 6 BOD włączony 1 (BOD wyłączony) SUT1 5 Czas startu 1 SUT0 4 Czas startu 0 CKSEL3 3 Źródło zegara 0 CKSEL2 2 Źródło zegara 0 CKSEL1 1 Źródło zegara 0 CKSEL0 0 Źródło zegara 1 6
Bootloader Bootloader 7
Bootloader Bootloader umożliwia modyfikację (np. aktualizację) zawartości pamięci FLASH Sekcja bootloadera położona jest na końcu pamięci FLASH Jej rozmiar definiują fusebity BOOTSZx 8
Bootloader - działanie Jeśli bootloader jest aktywny, w momencie resetu zaczyna się wykonywać kod z sekcji bootloadera Kod ten ma możliwość modyfikacji kodu znajdującego się pamięci FLASH pod adresami mniejszymi niż początek sekcji bootloadera Sekcja bootloadera nie może zostać zmodyfikowana z poziomu programu 9
BOOTRST Fusebit BOOTRST definiuje adres w pamięci FLASH, od którego rozpocznie się wykonywanie programu BOOTRST Adres 1 Sekcja apikacji (adres $0000) (RWW) 0 Sekcja bootloadera (NRWW) 10
BOOTSZ Rozmiar sekcji bootloadera określają fusebity BOOTSZx BOOTSZ1 BOOTSZ0 Rozmiar sekcji bootloadera Strony Sekcja aplikacji Sekcja bootloadera Koniec sekcji aplikacji Początek sekcji bootloadera 1 1 256 słów 4 $0000 - $3EFF $3F00 - $3FFF $3EFF $3F00 1 0 512 słów 8 $0000 - $3DFF $3E00 - $3FFF $3DFF $3E00 0 1 1024 słów 16 $0000 - $3BFF $3C00 - $3FFF $3BFF $3C00 0 0 2048 słów 32 $0000 - $37FF $3800 - $3FFF $37FF $ $3800 11
Lockbity Lockbity 12
Lockbity Lockbity pozwalają zabezpieczyć pamięć mikrokontrolera przed niepowołanym odczytem Od strony technicznej ich koncepcja i działanie jest podobne do fusebitów Próba modyfikacji stanu lockbitów mająca na celu zdjęcie zabezpieczeń prowadzi do wykasowania pamięci EEPROM i FLASH 13
Lockbity Nazwa Pozycja Funkcja Wartość domyślna - 7-1 - 6-1 BLB12 5 Boot Lock bit 1 BLB11 4 Boot Lock bit 1 BLB02 3 Boot Lock bit 1 BLB01 2 Boot Lock bit 1 LB2 1 Lock bit 1 LB1 0 Lock bit 1 14
Lockbity LB2 LB1 Rodzaj ochrony 1 1 Brak zabezpieczeń 1 0 Zapis FLASH i EEPROM jest zablokowany dla programatorów równoległych, SPI i JTAG. Modyfikacja fusebitów również nie jest możliwa. 0 0 Zapis i odczyt (weryfikacja)flash i EEPROM jest zablokowany dla programatorów równoległych, SPI i JTAG. Modyfikacja fusebitów również nie jest możliwa. 15
Lockbity BLB02 BLB01 Rodzaj ochrony 1 1 Instrukcje SPM (zapis) i LPM (odczyt) mają dostęp do sekcji aplikacji 1 0 Brak uprawnień dla SPM do zapisu w sekcji aplikacji 0 0 Brak uprawnień dla SPM do zapisu w sekcji aplikacji oraz LPM uruchomionego z sekcji bootloadera do odczytu danych z sekcji aplikacji. 0 1 SPM ma uprawnienia zapisu w sekcji aplikacji, LPM uruchomiony z sekcji bootloadera nie ma uprawnień do odczytu w sekcji aplikacji 16
Lockbity BLB12 BLB11 Rodzaj ochrony 1 1 Instrukcje SPM (zapis) i LPM (odczyt) mają dostęp do sekcji bootloadera 1 0 Brak uprawnień dla SPM do zapisu w sekcji bootloadera 0 0 Brak uprawnień dla SPM do zapisu w sekcji aplikacji oraz LPM uruchomionego z sekcji aplikacji do odczytu danych z sekcji bootloadera. 0 1 SPM ma uprawnienia zapisu w sekcji bootloadera, LPM uruchomiony z sekcji aplikacji nie ma uprawnień do odczytu danych z sekcji bootloadera 17
Układy zegarowe Układy zegarowe 18
Taktowanie mikrokontrolerów AVR Mikrokontrolery AVR mogą być taktowane zegarem od 0 do 20MHz (zależnie od modelu i zasilania) Sygnał taktujący może pochodzić z wbudowanego lub zewnętrznego generatora Różne wbudowane układy peryferyjne mogą być taktowane sygnałem pochodzącym z różnych źródeł 19
Schemat układu dystrybucji sygnału taktującego 20
Źródła sygnału taktującego Wbudowane Wbudowany kalibrowany generator RC Zewnętrzne Oscylator kwarcowy Generator kwarcowy Generator RC Sygnał prostokątny z osobnego układu 21
Konfiguracja źródła zegara Ustawienia fusebitów CKSEL odpowiedzialnych za źródło sygnału zegarowego Układ taktujący CKSEL3..0 Zewnętrzny rezonator kwarcowy/ceramiczny 1111-1010 Zewnętrzny rezonator niskiej częstotliwości 1001 Zewnętrzny oscylator RC 1000-0101 Kalibrowany wewnętrzny oscylator RC 0100-0001 Zegar zewnętrzny 0000 22
Oscylator kwarcowy/ceramiczny W zależności od częstotliwości oscylatora i jego typu wymagane jest ustawienie bity CKOPT i SUTx, zmieniający tryb pracy generatora CKOPT CKSEL3..1 Zakres częstotliwości (MHz) 1 101 0.4-0.9-1 110 0.9-3.0 12-22pF 1 111 3.0-8.0 12-22pF 0 101,110,11 1 1.0<= 12-22pF Zalecane kondensatory rezonatora kwarcowego (pf) 23
Oscylator kwarcowy/ceramiczny CKSEL0 SUT1..0 Czas startu ze stanu power-down i power-save Dodatkowe opóźnienie (zasilanie 5V) Zalecany przypadek użycia 0 00 258 CK 4.1ms Rezonator ceramiczny, szybkie narastanie napięcia 0 01 258 CK 65ms Rezonator ceramiczny, wolne narastanie napięcia 0 10 1K CK - Rezonator ceramiczny, BOD włączony 0 11 1K CK 4.1ms Rezonator ceramiczny, szybkie narastanie napięcia 24
Oscylator kwarcowy/ceramiczny CKSEL0 SUT1..0 Czas startu ze stanu power-down i power-save Dodatkowe opóźnienie (zasilanie 5V) Zalecany przypadek użycia 1 00 1K CK 65ms Rezonator ceramiczny, wolne narastanie napięcia 1 01 16K CK - Rezonator kwarcowy, BOD włączony 1 10 16K CK 4.1ms Rezonator kwarcowy, szybkie narastanie napięcia 1 11 16K CK 65ms Rezonator kwarcowy, wolne narastanie napięcia 25
Wbudowany generator RC Mikrokontrolery AVR oferują kilka predefiniowanych częstotliwości wbudowanego generatora RC CKSEL3..0 Częstotliwość nominalna (MHz) 0001 1.0 0010 2.0 0011 4.0 0100 8.0 26
Preskalery Niektóre mikrokontrolery AVR posiadają wbudowany preskaler częstotliwości głównego zegara przez 8, włączany fusebitem CKDIV8 Niezależnie od tego, większość wbudowanych układów peryferyjnych wymagających sygnału taktującego posiada własne dzielniki 27
Układy zarządzania energią Układy zarządzania energią 28
Informacje ogólne Mikrokontrolery AVR posiadają rozbudowane układy zarządzania energią, pozwalające ograniczyć zużycie energii i zmniejszyć emitowane zakłócenia Poszczególne tryby różnią się liczbą usypianych bloków mikrokontrolera i sposobem wybudzania 29
Układ BOD Zadaniem układu BOD (Brown-out Detection) jest reset mikrokontrolera w przypadku spadku napięcia poniżej określonego progu BODLEVEL min Typ. max 1 2.5V 2.7V 2.9V 0 3.6V 4.0V 4.2V 30
Przejście w tryb oszczędzania energii Bity konfiguracyjne trybu oszczędzania energii konfigurowane są przez bity w rejestrze MCUCR SE: 1-włączenie trybu oszczędzania energii SM2..0: wybór trybu 31
Tryby oszczędzania energii SM2 SM1 SM0 Tryb oszczędzania energii 0 0 0 Idle 0 0 1 ADC noise reduction 0 1 0 Power-down 0 1 1 Power-save 1 0 0 Zarezerwowany 1 0 1 Zarezerwowany 1 1 0 Standby 1 1 1 Extended standby 32
Tryb Idle Aktywne: SPI, USART, komparator analogowy, ADC, TWI, timery, watchdog, przerwania Wyłączone: CPU Pozostałe peryferia Wybudzanie przez: Reset, dowolne przerwania 33
Tryb ADC noise reduction Aktywne: ADC, TWI, przerwania zewnętrzne, watchdog, asynchroniczny timer2 Wyłączone: CPU Pozostałe peryferia Wybudzanie przez: Reset, przerwanie od aktywnych peryferiów 34
Tryb power-down Aktywne: Przerwania zewnętrzne, TWI, watchdog Wyłączone: CPU Pozostałe peryferia Wybudzanie przez: Reset, przerwanie od aktywnych peryferiów 35
Tryb power-save Aktywne: Jak w trybie power-down + asynchroniczny timer2 Wyłączone: CPU Pozostałe peryferia Wybudzanie przez Reset, przerwanie od aktywnych peryferiów 36
Tryb standby Tryb możliwy do wybrania podczas korzystania z zewnętrznego oscylatora Identyczny jak power-down, za wyjątkiem aktywnego w czasie uśpienia oscylatora 37
Tryb extended standby Tryb możliwy do wybrania podczas korzystania z zewnętrznego oscylatora Identyczny jak power-save, za wyjątkiem aktywnego w czasie uśpienia oscylatora 38
Tryby oszczędzania energii - podsumowanie 39
Watchdog Watchdog 40
Watchdog Mikrokontrolery AVR wyposażone są w układ automatycznego restartu, pozwalający zrestartować mikrokontroler w przypadku nieprawidłowego działania programu Układ ten działa na zasadzie licznika, którego przepełnienie powoduje reset. Zadaniem poprawnie działającego programu jest jego okresowe zerowanie Taktowany jest z autonomicznego generatora 41
Watchdog 42
Watchdog - rejestry WDTCR: WDTOE: 1 - pozwolenie na wyłączenie watchdoga WDE: 1 - włączenie watchdoga WDP2, WDP1 i WDP0: preskaler watchdoga 43
Watchdog - preskaler WDP2 WDP1 WDP0 Liczba taktów oscylatora watchdog Typowy timeout przy napięciu 5V 0 0 0 16K (16,384) 16.3ms 0 0 1 32K (32,768) 32.5ms 0 1 0 64K (65,536) 65ms 0 1 1 128K (131,072) 0.13 s 1 0 0 256K (262,144) 0.26s 1 0 1 512K (524,288) 0.52s 1 1 0 1,024K (1,048,576) 1.0s 1 1 1 2,048K (2,097,152) 2.1s 44
Przerwania Przerwania 45
Przerwania informacje ogólne Mikrokontrolery AVR posiadają możliwość wykonywania fragmentów programu asynchronicznie w stosunku do głównej pętli programu dzięki obsłudze przerwań Liczba i rodzaje przerwań są zależne od modelu mikrokontrolera 46
Lista przerwań mikrokontrolera Atmega32 47
Globalna obsługa przerwań Globalna obsługa przerwań może być aktywowana poprzez ustawienie bitu IVCE w rejestrze GICR. W rejestrze GICR znajduje się również bit IVSEL definiujący lokalizację wektorów przerwań (początek pamięci programu domyślnie, lub początek sekcji bootloadera) 48
Porty I/O Porty I/O 49
Porty I/O informacje ogólne Porty I/O umożliwiają dwukierunkową komunikację mikrokontrolera z układami zewnętrznymi Każda linia portu może być wejściem (domyślnie) lub wyjściem, posiada ponadto włączane programowo rezystory podciągające 50
Porty I/O Linie I/O są grupowane po 8 (w niektórych modelach mikrokontrolerów grupy nie są pełne) i nazwane kolejnymi literami A, B, C, D, Każda grupa jest obsługiwana własnym zestawem rejestrów 51
Porty I/O - nazewnictwo W odniesieniu do linii I/O wykorzystywana jest nazwa port i pin Port Pin Grupa linii I/O, np. PORTA (lub PA), PORTB (lub PB) Pojedyncza linia I/O, np. PORTA0 (lub PA0), PORTB1 (lub PB1) Fizyczne wyprowadzenie linii I/O (nóżka układu) 52
Porty I/O rejestry Każdy port A, B, itd. jest kontrolowany przez 3 rejestry: DDR, PORT i PIN, np. dla portu A są to DDRA, PORTA, PINA Każdy z rejestrów posiada bity sterujące poszczególnymi liniami I/O, np. dla portu A są do odpowiednio bity: DDA0 7, PORTA0 7, PINA0 7 53
Porty I/O - rejestry DDR: kierunek portu Bity DDRxn: 0 - wejście, 1 wyjście PORT: stan wyjściowy portu (wyjście) Bity PORTxn: 0 stan niski, 1 stan wysoki PORT: stan rezystorów podciągających (wejście) Bity PORTxn: 0 rezystor wyłączony, 1 rezystor włączony 54
Porty I/O - rejestry PIN: stan wejściowy portu Bity PINxn: 0 stan niski, 1 stan wysoki 55
Porty I/O funkcje alternatywne Większość linii I/O może pełnić alternatywną funkcję, zależną od konfiguracji innych układów peryferyjnych Pierwszeństwo w takiej sytuacji posiada układ peryferyjny, manualne sterowanie stanem takich linii jest ograniczone lub niemożliwe 56
Przerwania zewnętrzne INTx Przerwania zewnętrzne INTx 57
Przerwania zewnętrzne - informacje ogólne Mikrokontroler ATmega32 posiada 3 przerwania zewnętrzne: INT0 (na PD2), INT1 (na PD3) i INT2 (na PB2) Przerwania zewnętrzne mogą reagować na określone zmiany stanu na wejściu, dostępne tryby nie muszą być identyczne dla wszystkich przerwań 58
Przerwania zewnętrzne - rejestry MCUCR: ISC10 i ISC11: tryb pracy INT1 ISC01 i ISC00: tryb pracy INT0 MCUCSR: ISC2: tryb pracy INT2 GICR: INT0, INT1, INT2: 1 - włączenie obsługi przerwań GIFR: INTF0, INTF1, INTF2: flagi wystąpienia przerwań 59
Przerwania zewnętrzne tryby pracy Tryb (reakcja) ISC01 ISC00 ISC11 ISC10 ISC2 Stan niski 0 0 0 0 - Dowolna zmiana stanu 0 1 0 1 - Zbocze opadające 1 0 1 0 0 Zbocze narastające 1 1 1 1 1 60