Mikroprocesory i kontrolery

advertisement
Mikroprocesory i kontrolery
1
Mikroprocesory i kontrolery
Materiały do wykładu
Tom
II
MIKROKONTROLERY
Mikroprocesory i kontrolery
dr hab. inż. Zbigniew Czaja
Gdańsk 2015
2
Mikroprocesory i kontrolery
3
Definicja, budowa i zastosowania mikrokontrolerów
Definicja mikrokontrolera:
Mikrokontroler to:
• układ cyfrowy z wyspecjalizowanym mikroprocesorem i niezbędnymi do jego samodzielnej pracy
urządzeniami zawartymi w jednym układzie scalonym (dzięki którym nie wymaga urządzeń
zewnętrznych, takich jak np. kontrolery magistral, przerwań, generatory sygnałów taktujących
mikroprocesor, itp.),
• jest zdolny do autonomicznej pracy, tzn. w najprostszych zastosowaniach nie wymaga przyłączenia
zewnętrznych układów pomocniczych (peryferyjnych),
• został zaprojektowany do pracy w systemach kontrolno-pomiarowych oraz komunikacyjnych, stąd
posiada rozbudowany system komunikacji z otoczeniem,
• z reguły pracuje w czasie rzeczywistym.
Mikroprocesory i kontrolery
Zdjęcie mikrokontrolerów w obudowach PDIP
4
Rys. 1. Uproszczona budowa mikrokontrolera
Cechy techniczne jednostki centralnej (CPU) mikrokontrolera (w skrócie mk):
•
szerokość szyny danych. Może być ona 8-bitowa, 16-bitowa lub 32-bitowa. Na podstawie tej szerokości określa się
typ mk, np. mk 8-bitowy,
•
częstotliwość sygnału taktującego (zegarowego), Mk ukierunkowane są na zastosowania w układach kontrolno
pomiarowych i komunikacyjnych. W wielu tego typu zastosowaniach daje się określić wymaganą minimalną prędkość
przetwarzania danych przez jednostkę centralną. Nie obowiązuje przy tym zasada wzięta z mikroprocesorów, że im
większa prędkość przetwarzania danych tym lepiej.
•
rozbudowane układy przerwań.
Mikroprocesory i kontrolery
5
Rys. 2. Uszczegółowiona budowa mk
Mikroprocesory i kontrolery
6
Funkcje bloków mk:
•
Jednostka centralna (dokładniej zawarty w niej mikroprocesor) realizuje program zawarty w
pamięci programu (typu FLASH)..
•
Pamięć programu typu FLASH służy do przechowywania kodu programu oraz stałych.
•
Zmienne programu przechowywane są w pamięci danych RAM.
•
Jednostka centralna jak i pozostałe wewnętrzne bloki mk są taktowane sygnałem zegarowym
(clock), generowanym i rozprowadzanym przez system zegarowy. Częstotliwość sygnału
zegarowego może być stabilizowana np. zewnętrznym oscylatorem kwarcowym.
•
W stan początkowy mk wprowadzany jest sygnałem RESET generowanym przez układ
resetu.
•
Układy peryferyjne umożliwiają odczyt sygnałów wejściowych cyfrowych, jak i również
analogowych (przetworniki A/C) oraz generację sygnałów wyjściowych stosowanych do
sterowania układami mse. Komunikacja z otoczeniem mk odbywa się za pośrednictwem linii
portów we/wy.
Mikroprocesory i kontrolery
7
Mk posiada następujące cechy (11 cech mikrokontrolera):
1. zamknięcie magistrali danych i adresowej wewnątrz układu scalonego,
2. stała struktura pamięci ROM/RAM,
3. stałość programu sterującego,
4. dostęp do rejestrów procesora i układów we-wy poprzez mechanizm
adresowania pamięci RAM (memory mapped registers and I/O),
5. rejestrowa struktura jednostki centralnej,
6. procesory boolowskie wykonujące operacje na pojedynczych bitach
w pamięci, rejestrach i układach we-wy,
7. bogaty zestaw urządzeń we-wy,
8. rozbudowane i szybkie układy przerwań we-wy,
9. różnorodne tryby i środki redukcji mocy pobieranej,
10. rozbudowane mechanizmy kontroli i detekcji nieprawidłowych
stanów mk,
11. zawarcie w jednej strukturze układów cyfrowych (sterujących)
i analogowych (pomiarowych).
Trzy pierwsze cechy dotyczą mk zamkniętych, które będą omówione w dalszej części wykładu.
Mikroprocesory i kontrolery
Rys. 3. Przykładowe obszary zastosowań mikroprocesorów i mikrokontrolerów
8
Mikroprocesory i kontrolery
9
Rys. 4. Przykładowe zastosowania mikrokontrolerów w technice samochodowej
Mikroprocesory i kontrolery
10
Przykładowe, wybrane zastosowania komputerów (mikrokontrolerów) w medycynie:
•
zaawansowane systemy komputerowe: tomograf, ultrasonograf, itd.,
•
miniaturowe urządzenia diagnostyczne umożliwiające wszechstronną kontrolę medyczną, np.:
•
elektroniczne urządzenie pomiaru ciśnienia krwi umożliwia bezpieczne wykonanie badania, dostępne również dla
osób cierpiących na arytmię serca,
•
komputerowa przystawka BCTS (Bronchical Control Treatment System) po podłączeniu do komputera osobistego
pozwala na dokładne dozowanie leków przeciw astmie,
•
niewielkie urządzenie mikroprocesorowe generujące bodźce elektryczne łagodzące ból,
•
temperaturę ciała najdokładniej zmierzy mikroprocesorowy termometr douszny (precyzyjny pomiar temperatury
błony bębenkowej, najbardziej miarodajnego wskaźnika ciepłoty ciała),
•
chorzy na cukrzycę mogą za pomocą komputerowego miernika dokładnie oceniać poziom cukru we krwi,
•
w użyciu są miniaturowe, przenośne aparaty EKG,
•
osoby mające problemy ortopedyczne są wspomagane przez inteligentne protezy reagujące na bieżąco na dziesiątki
bodźców związanych z dynamiką chodu.
•
...
Obecnie systemy mikroprocesorowe, w tym systemy czasu rzeczywistego znajdują liczne zastosowania w diagnostyce i
pielęgnowaniu pacjentów.
Mikroprocesory i kontrolery
11
Jednostka centralna (CPU) mikrokontrolera
Najważniejszą częścią mk jest jednostka centralna (w skrócie jc). Często określa się ją jako procesor
rdzeniowy lub w skrócie procesor.
Właściwości jc (czyli właściwości mikroprocesora):
•
należy do grupy układów cyfrowych, określanych jako układy synchroniczne i sekwencyjne,
•
synchroniczność oznacza, że wszystkie operacje wykonywane przez jc odbywają się w rytm sygnału zegarowego,
•
sekwencyjność oznacza, że stan wyjść jc zależy nie tylko od stanu jej wejść, ale i od poprzednich stanów tego układu,
•
posiada własną pamięć (rejestry) potrzebną np. do przechowywania argumentów rozkazów niezbędnych do
wykonania na nich określonej operacji.
Mikroprocesory i kontrolery
12
Architektury procesorów rdzeniowych można sklasyfikować:
•
według typu mapy pamięci
•
według typu listy instrukcji.
Mapa pamięci (memory map) w sposób graficzny przedstawia rozmieszczenie poszczególnych pamięci w przestrzeni
adresowej jc. Oprócz adresów obszarów RAM, ROM i innych rodzajów pamięci, mapa ta podaje usytuowanie rejestrów
uniwersalnych, adresów procedur obsługi przerwań, rejestrów układów we/wy (dostępne przez adresowanie pamięci
RAM).
W zależności od typu struktury mapy pamięci, procesory rdzeniowe mogą mieć następującą architekturę:
•
architekturę harwardzką,
•
architekturę Von-Neumanna.
Podział architektur procesorów mk korzystając z kryterium typu listy instrukcji:
•
architekturze RISC (reduced instruction set computer),
•
architekturze CISC (complex instruction set computer).
Mikroprocesory i kontrolery
13
Rys. 5. Schemat blokowy mk rodziny Xmega firmy
Atmel (typu Harward, RISC)
Mikroprocesory i kontrolery
Rys. 6. Mapa pamięci dla architektury harwardzkiej (mk rodziny Xmega)
14
Mikroprocesory i kontrolery
15
Rys. 7a. Organizacja wewnętrznej i zewnętrznych pamięci
mk 80C51/52
Rys. 7b. Schemat blokowy mk 8051 o architekturze CISC
Mikroprocesory i kontrolery
16
Wewnętrzne pamięci mikrokontrolerów
W mk ze względu na pełniące funkcje można wyróżnić następujące typy pamięci:
• pamięć programu (zawierająca kod programu, tablice stałych, wektor resetu i przerwań),
• pamięć danych (przechowująca zmienne),
• stos sprzętowy (obsługi przerwań i wywołań funkcji odkładają na niego bieżącą wartość licznika
rozkazów i po zakończeniu działania „zdejmują” ją),
• pamięć EEPROM (przechowuje zmienne lub tablice stałych, które po wyłączeniu zasilania nie mogą
ulec skasowaniu).
Pamięć programu jest wykonana w technologii FLASH (była w technologiach ROM, EPROM).
Natomiast pamięć danych najczęściej jest typu SRAM.
Mikroprocesory i kontrolery
17
Tabela 1. Przegląd podstawowych układów pamięci względem technologii wykonania
Własności pamięci
Zawartość pamięci nie zanika
wraz z wyłączeniem napięcia
zasilania.
Stosowane typy pamięci
ROM (Read Only Memory)
– programowanie zawartości pamięci następuje w procesie produkcyjnym i nie może
być przeprowadzone przez użytkownika.
EPROM (Erasable Programmable ROM)
– pamięci z możliwością kasowanie dotychczasowej zawartości promieniami
Z pamięci można czytać, lecz ultrafioletowymi i prowadzania nowej zawartości za pomocą zewnętrznego
nie można do niej wpisywać
programatora. Umieszczane są w obudowach z okienkiem kwarcowym w celu
danych. Umieszczanie danych umożliwienia kasowania.
w pamięci wymaga specjalnego OTP (One Time Programmable) – pamięci typu EPROM umieszczane w obudowach
procesu, zwanego
bez okienka kwarcowego. Dlatego możliwe jest tylko jednokrotne zaprogramowanie
programowaniem.
pamięci bez możliwości skasowanie jej zawartości.
FLASH (Bulk Erasable Non-Volatile Memory) – pamięci z możliwością kasowanie
zawartości i programowania bezpośrednio w systemie mikroprocesorowym.
Zawartość pamięci zanika wraz SRAM (Static Random Access Memory)
z wyłączeniem napięcia
– pamięci RAM statyczne. Są to pamięci o krótkich czasach dostępu, prostsze w
zasilania.
obsłudze przez jednostkę centralną, ale droższe.
DRAM (Dynamic Random Access Memory)
– pamięci RAM dynamiczne. Są to pamięci tańsze, ale ich obsługa przez jednostkę
centralną jest bardziej skomplikowana. Polega to na konieczności wykonywania w
Z pamięci można zarówno
czytać, jak i wpisywać do niej krótkich odstępach czasu określonych operacji na pamięci (tzw. odświeżaniu). W
przeciwnym razie dane zawarte w pamięci dynamicznej zanikają.
dane.
Mikroprocesory i kontrolery
18
Struktury systemów mikrokontrolerowych
Ze względu na sposób korzystania przez mk z zewnętrznych pamięci możemy wyróżnić:
• mk udostępniające szyny systemowe (szyna danych, adresowa i sterująca) poprzez wyprowadzenia
portów,
• mk udostępniające bezpośrednio szyny systemowe,
• mk zamknięte (embedded).
Mikroprocesory i kontrolery
19
Rys. 8. Budowa mse z mk udostępniającym szyny systemowe jako alternatywne wyprowadzenia portów,
na przykładzie mk 80C51
Mk udostępniające szyny systemowe poprzez wyprowadzenia portów – w tej strukturze systemu:
•
Szyny systemowe są dostępne dla użytkownika jako alternatywne funkcje wyprowadzeń portów. Mk daje zatem
możliwość podłączenia układów pamięci zewnętrznej, którą podłącza się do odpowiednich portów mk.
•
Wadą tego rozwiązania jest rezygnacja z części portów. Np. na rys. 8 widać, iż należy skorzystać z portów P0 i P2
oraz części wyprowadzeń portu P3. Zatem nie można korzystać z linii tych portów jako we/wy sygnałów sterujących.
Mikroprocesory i kontrolery
Rys. 9. Budowa mse z mk udostępniającym szyny systemowe jako alternatywne wyprowadzenia portów – interfejs EBI (External Bus
Interface) dla mikrokontrolerów rodziny XMEGA A – niemultipleksowane połączenie pamięci SRAM
20
Mikroprocesory i kontrolery
21
Rys. 9a. Budowa mse z mk udostępniającym szyny systemowe jako alternatywne wyprowadzenia portów – interfejs EBI (External Bus
Interface) dla mikrokontrolerów rodziny XMEGA A –multipleksowane połączenie pamięci SRAM z użyciem sygnału ALE1
Mikroprocesory i kontrolery
•
•
•
•
22
Mk udostępniające bezpośrednio szyny systemowe – w tej strukturze:
Szyny systemowe mk są dostępne dla użytkownika bezpośrednio jako wyprowadzenia układu scalonego bez funkcji
alternatywnych przypisanych tym wyprowadzeniom.
Mk daje zatem możliwość przyłączenia układów pamięci zewnętrznych, bez potrzeby rezygnacji z niektórych portów
mk.
Najczęściej mk te nie posiadają wewnętrznych pamięci programu lub danych. Np. mk AT91X40 (rys. 10).
Podejście takie umożliwia korzystanie ze znacznie większych pamięci. Stąd tego typu struktura jest stosowana
przeważnie dla mk 16 i 32-bitowych.
Rys. 10. Sterowanie czterema pamięciami (każda do 16 MB) przez mk AT91X40
Mikroprocesory i kontrolery
23
Mk zamknięte – w tej strukturze systemu:
•
szyny systemowe nie są dostępne dla użytkownika.
•
Mk korzysta wyłącznie z wewnętrznej pamięci.
•
Oczywiście można do niego podłączać zewnętrzne urządzenia peryferyjne poprzez jego porty.
•
Tego typu struktura jest stosowana najczęściej w przypadku prostych mk 8-bitowych (które są głównym tematem tej
części wykładu).
Rys 11. Budowa mse z mk nie udostępniającym szyn systemowych – zamkniętym, na przykładzie mk XMEGA A
Mikroprocesory i kontrolery
24
Zalety mk zamkniętych:
Zwiększenie niezawodności mikrosterownika.
•
•
Magistrala jest jednym z najczulszych na zakłócenia systemem interfejsowym. Zamknięcie magistrali wewnątrz układu scalonego,
odseparowanie jej od zacisków we-wy powoduje znaczący wzrost niezawodności systemu.
•
Jądro systemu w postaci procesora rdzeniowego uzyskało w ten sposób bardzo dobrą izolację od pozostałej części systemu.
•
Nastąpiło zmniejszenie i ograniczenie długości magistrali co ma znaczenie ze względu na rosnące wymagania na kompatybilność
elektromagnetyczną układu
Zmniejszenie poboru mocy.
•
•
Magistrala uniwersalna jest jednym z najbardziej energochłonnych systemów komunikacyjnych. Bez względu na ilość aktualnie
odbierających informację odbiorników (zwykle 1) nadajnik musi ją nadać w takiej formie fizycznej, aby mogły ją odbierać wszystkie
możliwe do podłączenia odbiorniki.
•
Ograniczenie dostępu do magistrali do znanej liczby urządzeń o określonych parametrach pozwala na przeprowadzenie optymalizacji
energo-czasowej, czego efektem jest znaczący spadek poboru mocy przez mk zamknięte przy zachowaniu bardzo dobrych parametrów
czasowych.
Zwiększenie szybkości pracy.
•
•
Precyzyjnie zdefiniowana i niezmienna magistrala wewnętrzna mk pozwala na optymalizację jego parametrów czasowych. mk
wyposażone są w rozległe i programowalne układy dystrybucji sygnałów zegarowych wewnątrz układu scalonego, pozwalające na
osiągnięcie dużych szybkości wykonania programu bez znaczącego wzrostu poboru mocy.
Zmniejszenie liczby zacisków zewnętrznych i zwiększenie ich elastyczności.
•
•
Zadaniem zacisków zewnętrznych jest zapewnienie przepływu sygnałów pomiędzy otoczeniem a układem we-wy wbudowanymi w
mk. Ponieważ układy te w większości zastosowań wykorzystywane są w sposób sekwencyjny, możliwe jest dołączenie do jednego
zacisku fizycznego kilku wewnętrznych układów we-wy.
•
Pozwala to na dynamiczną rekonfigurację funkcji zacisków w takich mk.
Mikroprocesory i kontrolery
25
Model warstwowy mikrokontrolera
Rys. 12. Warstwowy logiczny model mk zamkniętego
Mikroprocesory i kontrolery
W mk, w skład procesora rdzeniowego, poza samym procesorem przetwarzającym instrukcje i pamięciami, znajdują się
również inne urządzenia niezbędne do funkcjonowania mk. Są to między innymi:
•
oscylator i układ dystrybucji sygnałów zegarowych,
•
układ resetu (często bardzo rozbudowany),
•
układy nadzorujące (często traktuje je się jako układy peryferyjne mk),
•
system przerwań.
Rys. 13. Fragment schematu blokowego mk ATmega16
26
Mikroprocesory i kontrolery
27
Układ oscylatora i układy dystrybucji sygnałów zegarowych
W mk można wyróżnić dwa źródła sygnału zegarowego:
•
sygnał zegarowy generowany „wewnątrz” mk (wewnętrzny układ RC),
•
sygnał zegarowy generowany z wykorzystaniem zewnętrznych elementów.
Każdy mk posiada dedykowane dwie końcówki służące wyłącznie do podłączenia zewnętrznych elementów
wykorzystywanych do generacji (stabilizacji) sygnału zegarowego:
•
Jedna z nich jest wejściem (najczęściej oznaczana OSC1 lub XTAL1),
•
druga wyjściem (OSC2 lub XTAL2) wewnętrznego układu generatora.
Mikroprocesory i kontrolery
28
a) z rezonatorem kwarcowym/ceramicznym
b) z rezonatorem RC (najtańszy ale najgorsze
parametry generowanego przebiegu)
c) z podaniem zewnętrznego sygnału prostokątnego
na wejście OSC1
d) z wewnętrznym rezonatorem RC
Rys. 14. Sposoby generowania sygnału zegarowego
Mikroprocesory i kontrolery
29
e) z wykorzystaniem pośredniej syntezy częstotliwości PLL (Phase Locked Loop)
Rys. 14 - cd. Sposoby generowania sygnału zegarowego
Mikroprocesory i kontrolery
Wyróżnia się następujące tryby pracy oscylatorów kwarcowych/ceramicznych:
•
LP – generowanie niskich częstotliwości dla zapewnienia minimalnego poboru mocy (Low Power Crystal),
•
XT – generowanie średnich częstotliwości (Crystal/Resonator),
•
HS – generowanie wysokich częstotliwości (Hight Speed Crystal/Resonator).
Tabela 2. Wartości kondensatorów w zależności od trybu
pracy oscylatora kwarcowego dla mk PIC18F452
30
Mikroprocesory i kontrolery
31
Metodę generacji sygnału zegarowego jak i tryb pracy oscylatora wybiera się na etapie programowania mk, czyli
wprowadzania kodu programu do jego pamięci FLASH. Służą do tego bity zawarte w rejestrze konfiguracyjnym mk.
Rys. 15. Fragment rejestru konfiguracyjnego mk PIC18F452
Mikroprocesory i kontrolery
Układy generacji i dystrybucji sygnałów zegarowych.
Rys. 16. Układ dystrybucji sygnałów zegarowych w mk ATXmaga32A4
32
Mikroprocesory i kontrolery
33
Rys. 17. Układ generacji i dystrybucji sygnałów zegarowych mk ST72215G
Mikroprocesory i kontrolery
Rys. 18. Funkcje spełniane przez CSS i SO (Save OSC)
Rys. 18. Funkcje spełniane przez CSS i SO
34
Mikroprocesory i kontrolery
35
Techniki redukcji mocy i tryby specjalne mk.
Wyróżnia się następujące techniki redukcji mocy w mk:
•
Elastyczne sterowanie szybkością pracy w zależności od aktualnych potrzeb, gdyż zależność poboru mocy układów
CMOS zależy od częstotliwości pracy. Służy do tego sieć dystrybucji sygnałów zegarowych w mk (dokładniej
preskalery).
•
Korzystanie z kilku oscylatorów. Jeden z nich pracuje z maksymalną częstotliwością – główny oscylator – (np.
32 MHz), a drugi z częstotliwością niską np. 32,768 kHz. Wybór danego oscylatora jako generatora sygnału
zegarowego dla mk, np. przejście z oscylatora 32 MHz do oscylatora 32,768 kHz powoduje spadek pobieranej mocy o
około trzy rzędy.
Rys.19. Układ wyboru sygnału zegarowego i preskalery mk ATXmaga32A4
Mikroprocesory i kontrolery
Rys. 20. Układ wyboru sygnału zegarowego mk PIC18F6585
36
Mikroprocesory i kontrolery
37
Specjalne tryby pracy mk:
•
tryb pełnej aktywności (RUN),
•
tryb, w którym nie pracuje procesor, a pracują wszystkie urządzenia peryferyjne (WAIT lub SLEEP) – inaczej tryb
uśpienia,
•
tryb, w którym nie pracuje procesor, a pracują niektóre urządzenia peryferyjne (układ przerwań, porty równoległe,
przetworniki A/C zasilane zewnętrznym sygnałem zegarowym),
•
tryb pełnego wstrzymania (zamrożenia) pracy mk – zatrzymany układ oscylatora, zatem żadne urządzenie nie
pracuje, stan rejestrów i pamięci RAM jest „zamrożony” (STOP lub HALT).
Przy wchodzeniu w tryby specjalne mk istotne jest aby przez zaciski we/wy nie płynął prąd, gdyż wartość tego prądu
może być np. o kilka rzędów większa niż jego pobór przez sam mk w stanie STOP.
Wejście w specjalny tryb pracy mk można uzyskać w następujący sposób:
•
wykonując odpowiednią, przeznaczoną do tego celu instrukcję (np. SLEEP w Atmega16 i PIC18F452, WFI, HALT
w ST72215G),
•
ustawiając odpowiednie bity w rejestrze sterującym trybami uśpienia (np. w CTRL- Sleep Control Register dla mk
XMEGA A).
Mikroprocesory i kontrolery
38
Tabela 3. Źródła sygnału zegarowego oraz wybudzania mk XMEGA A w trybach obniżonego poboru mocy
75 µA (32 kHz).
Tryb aktywności (Vcc = 3 V):
13 mA (32 MHz),
Tryb idle (Vcc = 3 V):
4,8 mA (32 MHz), 4,8 µA (32 kHz).
Tryb power-down (Vcc = 3 V):
0,1 µA.
Mikroprocesory i kontrolery
39
Rys. 21. Specjalne tryby pracy dla mk ST72215G
Mikroprocesory i kontrolery
40
Są następujące sposoby wyjścia z trybu uśpienia:
•
pojawienie się przerwania zewnętrznego lub przerwania od urządzeń peryferyjnych (przerwania te muszą być
wcześniej odblokowane),
•
reset zewnętrzny mk,
•
reset wywołany przez niezablokowany, aktualnie pracujący układ watchdog.
Często jest tak, że mk „obudzony” przez przerwanie dokonuje jego obsługi, a następnie ponownie przechodzi w tryb
uśpienia.
Ze stanu zatrzymania mk można wyjść wyłącznie na dwa sposoby:
•
reset zewnętrzny mk,
•
reset wywołany przez niezablokowany, aktualnie pracujący układ watchdog.
W tym przypadku układ watchdog musi być taktowany własnym generatorem (najczęściej jest to generator RC
wbudowany w strukturę mk).
Mikroprocesory i kontrolery
41
Układ resetu mikrokontrolera
Sygnał RESET służy do:
•
Generalnie do inicjalizacji pracy mk, czyli wprowadzenia go w stan początkowy.
•
Inicjalizacja polega najczęściej na ustawieniu licznika rozkazów na początek kodu programu (do licznika rozkazów
wpisywany jest wektor resetu).
•
Urządzenia peryferyjne mk i rejestry sterujące są ustawiane w tryb standardowy (spoczynku).
•
Uniwersalne końcówki we/wy są ustawione jako wejścia o wysokiej impedancji, aby minimalnie wpływać na
otoczenie mk (w dokumentacji każdego mk znajduje się informacja o stanie wszystkich rejestrów i portów po resecie
mk).
•
Ponadto, służy on do wprowadzenia mk w tryb programowania lub testowania.
Możemy wyróżnić następujące źródła resetu:
•
reset po włączeniu zasilania,
•
reset wywołany zewnętrznym sygnałem RESET,
•
reset programowy wywołany przez ustawienie odpowiedniego bitu,
•
reset wywołany przez układ watchdog,
•
reset wywołany przez układy nadzorujące poprawność pracy mk (np. od układu wykrywającego spadek napięcia
zasilania LVD (Low Voltage Detector) w ST72215G, BOR (Brown-out Reset) w PIC16F873)
Mikroprocesory i kontrolery
42
Każdy mk posiada dedykowaną końcówkę (pin) do której przypisany jest zewnętrzny sygnał resetu. Sygnał ten
umożliwia asynchroniczny reset mk. Najczęściej jest on aktywny poziomem niskim (z wyjątkiem mk 80C51).
Rys. 22. Prosty układ resetu
Mikroprocesory i kontrolery
43
Rys. 23. Układ resetu mk XMEGA A
Mikroprocesory i kontrolery
Rys. 24. Układ resetu mk PIC18F4550
44
Mikroprocesory i kontrolery
45
Rys. 25. Przebiegi sygnałów w układzie resetu mk PIC18F4550
Mikroprocesory i kontrolery
Rys. 26. Rejestr kontrolny układu reset mk PIC18F4550
46
Mikroprocesory i kontrolery
47
Rys. 27. Przebiegi sygnałów VDD i RESET dla układu LVD mk ST72215G
Układ LVD generuje sygnał resetu dopóki VDD podczas narastania nie osiągnie założonego napięcia VIT+ oraz gdy to
napięcie spadnie poniżej VIT- podczas opadania.
Mikroprocesory i kontrolery
Układy nadzorujące – układ watchdog
Do układów nadzorujących poprawność pracy mk można zaliczyć:
•
autonomiczne liczniki watchdog (licznik nadzorcy),
•
monitory sygnału zegarowego,
•
układy detekcji zaniku i powrotu napięć zasilających,
•
układy detekcji przyczyn awarii systemowych.
Rys. 28. Struktura programu użytkownika w mk
48
Mikroprocesory i kontrolery
49
Zasada pracy układu watchdog jest następująca:
Poprawnie pracujący mk charakteryzuje się pewną sygnaturą częstotliwościową lub czasową zawierającą się w ściśle
określonych granicach. Wynika to z zasady pisania oprogramowania na mk:
•
•
Program użytkownika, po części inicjalizacyjnej, jest wykonywany w niekończącej się pętli od czasu do czasu
przerywanej przez obsługę przerwań. Program ten jest jedynym programem jaki znajduje się w mk
•
Zatem mk wykonuje tylko to co napiszemy. Stąd aby mk działał prawidłowo nasz program musi pracować w
nieskończonej pętli. Pętla ta jest wykonywana z określoną częstotliwością możliwą do obliczenia przez programistę
(znamy częstotliwość oscylatora, z dokumentacji wiemy ile cykli zegarowych potrzebuje każda instrukcja i
oczywiście wiemy ile jest tych instrukcji w pętli).
•
Czyli jak program pracuje prawidłowo to rozkaz zerujący watchdog umieszczony w odpowiednim miejscu pętli
głównej programu jest wykonywany cyklicznie z założoną częstotliwością, tym samym watchdog jest zerowany i nie
zresetuje mk.
•
Jeżeli w jakimś momencie pętla ta zawiesi się (np. błąd w programie) lub będzie wykonywana zdecydowanie wolniej
niż powinna (np. nieprawidłowa praca urządzeń peryferyjnych) jest to równoważne z wykryciem sytuacji alarmowej.
•
Gdy autonomiczny licznik watchdog wykryje tę sytuację (czyli nastąpi jego przepełnienie, bo instrukcja jego
zerowania nie zostanie wykonana na czas) wysyła sygnał reset zerujący mk oraz ustawia odpowiednie bity w rejestrze
przechowującym informację o przyczynach wyzerowania procesora.
Mikroprocesory i kontrolery
50
Rys. 29a. Układ watchdog mk PIC18F4550
Rys. 29b. Układ watchdog mk ATmega16
Mikroprocesory i kontrolery
51
System przerwań w mikrokontrolerze
Współpraca jc z urządzeniami peryferyjnymi i zewnętrznymi jest realizowana na dwa sposoby:
•
przez programowe testowanie (odpytywanie, przeglądanie) stanu urządzeń (polling),
•
w systemie przerwań.
System (układ) przerwań umożliwia natychmiastowe, czasowe wstrzymanie aktualnie wykonywanej sekwencji
programu użytkownika i przejście do innej sekwencji programu związanej z obsługą określonego zdarzenia (przerwania),
zaistniałego w urządzeniach peryferyjnych.
Możemy wyróżnić następujące źródła przerwań:
•
przerwanie zewnętrzne (wywołane sygnałem o odpowiednim zboczu: narastającym lub opadającym lub poziomie
(najczęściej niskim) na dedykowanym pinie),
•
przerwanie od urządzeń wewnętrznych (np. portów, liczników, komparatorów, przetworników A/C),
•
przerwanie programowe (ustawienie odpowiedniego bitu, wykonanie rozkazu np. TRAP w mk ST72215G lub INTR
w mk COP880).
Mikroprocesory i kontrolery
Przerwania mogą być:
•
maskowalne, tzn. można je zablokować zerując przypisane im bity maskujące,
•
niemaskowalne (najczęściej jest nim przerwanie programowe).
Można wyróżnić następujące systemy przerwań:
•
system przerwań z programowym przeglądaniem urządzeń,
•
system przerwań z automatyczną detekcją źródła przerwania – system przerwań wektoryzowany.
Do obsługi przerwań przeważnie używane są trzy rejestry:
•
rejestr z flagami przerwań,
•
z maskami poszczególnych przerwań i maską globalną,
•
rejestr poziomu priorytetów.
52
Mikroprocesory i kontrolery
53
Rys. 30. Fragment schematu układu przerwań mk PIC18F4550
- system przerwań z programowym przeglądaniem urządzeń
Mikroprocesory i kontrolery
Rys. 31. Schemat układu przerwań mk PIC18F4550
54
Mikroprocesory i kontrolery
55
Cechy systemu przerwań z programowym przeglądaniem urządzeń:
•
Jc nie zna źródła (przyczyny) przerwania. Zatem jc musi programowo przejrzeć (przepytać) flagi przerwań
wszystkich urządzeń tak, jak przy programowym testowaniu stanu urządzeń, z tą różnicą, iż wykonuje ona tę
czynność tylko w trakcie obsługi przerwania.
•
Flagi poszczególnych przerwań nie są kasowane sprzętowo przy wejściu w obsługę przerwania, zatem należy je
kasować programowo w trakcie jego obsługi.
•
Najczęściej obsługa wszystkich przerwań jest pod jednym wspólnym adresem, zwanym wektorem przerwań (np.
0008h).
•
Kolejność priorytetu przerwań zależy od przyjętej kolejności odpytywania flag przerwań poszczególnych urządzeń.
Zaletą tego systemu przerwań jest prostota struktury sprzętowej potrzebnej do jego realizacji.
Jego główną wadą jest długi czas potrzebny na identyfikację źródła przerwania.
Mikroprocesory i kontrolery
org 00008h
goto IntVector
...
; Interrupt vector
;**********************************************************************
; Interrupt Service Routine
IntVector
; save context (WREG and STATUS registers) if needed.
btfss
INTCON,INT0IF
goto OtherInt1
; Did INT0 cause interrupt?
; No, some other interrupt
bcf INTCON,INT0IF
...
goto ISREnd
; Clear INT0 Interrupt Flag
OtherInt1
btfss
PIR1,ADIF
goto OtherInt2
bcf PIR1,ADIF
...
goto ISREnd
; go to end of ISR, restore context, return
; Did A/D cause interrupt?
; No, check other sources
; Reset A/D int flag
; return from ISR
OtherInt2
btfss
PIR1,RCIF
goto OtherInt3
...
movf RCREG,W
goto ISREnd
...
; Did USART cause interrupt?
; No, some other interrupt
; Get input data
; go to end of ISR, restore context, return
56
Mikroprocesory i kontrolery
OtherInt3
...
goto $
ISREnd
...
retfie
57
; Find cause of interrupt and service it before returning from
; interrupt. If not, the same interrupt will re-occur as soon
; as execution returns to interrupted program.
; Restore context if needed.
Listing.1. Przykładowy kod obsługi przerwań dla mk PIC18F4550
Mikroprocesory i kontrolery
#include <p18f4550.h>
...
// Deklaracje
rejestrow ukladu PIC18F4550
void interrupt InterruptServices (void)
{
if(INTCONbits.INT0IF)
// Czy przerwanie od INT0?
{
// obsluga przerwania od INT0
INTCONbits.INT0IF = 0;
// zeruj flage aby nie wywolac ponownie tego przerwania
...
}
if(INTCON3bits.INT1F)
// Czy przerwanie od INT1?
{
// obsluga przerwania od INT1
INTCON3bits.INT1F = 0;
// zeruj flage aby nie wywolac ponownie tego przerwania
...
}
// Czy przerwanie od INT2?
if(INTCON3bits.INT2F)
{
// obsluga przerwania od INT2
INTCON3bits.INT2F = 0;
// zeruj flage aby nie wywolac ponownie tego przerwania
...
}
// miejsce na obsługę innych źródeł przerwań
}
Listing 2. Przykładowy kod obsługi przerwań dla mk PIC18F4550 w języku C
58
Mikroprocesory i kontrolery
59
Najbardziej zaawansowanym i często stosowanym w mk jest system przerwań wektoryzowanych.
W systemie tym :
•
Na sygnał potwierdzenia przyjęcia przerwania przez jc urządzenie, które zgłosiło przerwanie, podaje na szynę danych
kod identyfikacyjny, który jest traktowany jako numer elementu w wektorze przerwań. Wektor przerwań reprezentuje
listę adresów obsługi przerwań.
•
Zatem każde źródło przerwania ma przypisany adres obsługi przerwania w pamięci programu, zwany wektorem
przerwania.
•
Każdemu przerwaniu jest przypisany na stałe priorytet.
o Jeżeli pojawi się w tym samym czasie kilka przerwań to najpierw obsługiwane jest to o najwyższym
priorytecie, a następnie według ważności priorytetów kolejne przerwania.
o Często przerwanie o wyższym priorytecie może przerwać obsługę przerwania o niższym (nigdy nie
odwrotnie).
o Istnieje również możliwość zmiany kolejności priorytetów. Służy do tego celu rejestr poziomu priorytetów, np.
rejestr IP dla mk AT89C51.
•
Wejście w obsługę danego przerwania zeruje sprzętowo jego flagę przerwania.
Mikroprocesory i kontrolery
Tabela 4. Wektory przerwań i resetu mk ATmega16
Wektor, nr
Adres pamięci
programu
Źródło
1
$000
RESET
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$002
$004
$006
$008
$00A
$00C
$00E
$010
$012
$014
$016
$018
$01A
$01C
$01E
$020
$022
$024
$026
$028
INT0
INT1
TIMER2 COMP
TIMER2 OVF
TIMER1 CAPT
TIMER1 COMPA
TIMER1 COMPB
TIMER1 OVF
TIMER0 OVF
SPI, STC
USART, RXC
USART, UDRE
USART, TXC
ADC
EE_RDY
ANA_COMP
TWI
INT2
TIMER0 COMP
SPM_RDY
Opis przerwania
Pin zewnętrzny, Power-on reset, Brown-out reset, Watchdog reset,
JTAG reset
Zewnętrzne przerwanie INT0
Zewnętrzne przerwanie INT1
Timer / Licznik 2 dopasowanie porównania
Timer / Licznik 2 przepełnienie
Timer / Licznik 1 zdarzenie przechwycenia
Timer / Licznik 1 dopasowanie porównania A
Timer / Licznik 1 dopasowanie porównania B
Timer / Licznik 1 przepełnienie
Timer /Licznik 0 przepełnienie
Zakończona transmisja szeregowa
USART, Rx
USART, pusty rejestr danych
USART, Rx
Zakończona konwersja ADC
EEPROM gotowy
Komparator analogowy
Interfejs szeregowy TWI (I2C)
Zewnętrzne przerwanie INT2
Timer / Licznik 0 dopasowanie porównania
Store Program Memory Ready
60
Mikroprocesory i kontrolery
;Address Labels
$000
jmp
$002
jmp
$004
jmp
$006
jmp
$008
jmp
$00A
jmp
$00C
jmp
$00E
jmp
$010
jmp
$012
jmp
$014
jmp
$016
jmp
$018
jmp
$01A
jmp
$01C
jmp
$01E
jmp
$020
jmp
$022
jmp
$024
jmp
$026
jmp
$028
jmp
;
$02A RESET: ldi
$02B
$02C
$02D
$02E
$02F
Code
RESET
EXT_INT0
EXT_INT1
TIM2_COMP
TIM2_OVF
TIM1_CAPT
TIM1_COMPA
TIM1_COMPB
TIM1_OVF
TIM0_OVF
SPI_STC
USART_RXC
USART_UDRE
USART_TXC
ADC
EE_RDY
ANA_COMP
TWSI
EXT_INT2
TIM0_COMP
SPM_RDY
61
Comments
; Reset Handler
; IRQ0 Handler
; IRQ1 Handler
; Timer2 Compare Handler
; Timer2 Overflow Handler
; Timer1 Capture Handler
; Timer1 CompareA Handler
; Timer1 CompareB Handler
; Timer1 Overflow Handler
; Timer0 Overflow Handler
; SPI Transfer Complete Handler
; USART RX Complete Handler
; UDR Empty Handler
; USART TX Complete Handler
; ADC Conversion Complete Handler
; EEPROM Ready Handler
; Analog Comparator Handler
; Two-wire Serial Interface Handler
; IRQ2 Handler
; Timer0 Compare Handler
; Store Program Memory Ready Handler
r16,high(RAMEND) ; Main program start
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
sei
<instr> xxx
; Set Stack Pointer to top of RAM
; Enable interrupts
Listing. 3. Typowa konfiguracja resetu i systemu przerwań w mk ATmega16
Mikroprocesory i kontrolery
#include <avr/io.h>
#include <avr/interrupt.h>
...
// external interrupt 0
ISR(PORTD_INT0_vect)
{
loop_until_bit_is_set(PORTD_IN,0);
...
}
// czekaj na puszczenie klawisza SW0
// kod obsługi przerwania
// ADC A CH0 interrupt - odczytanie wyniku i ...
ISR(ADCA_CH0_vect)
{
v_res = ADCA_CH0RES;
// odczyt wyniku pomiaru napięcia na kanale CH0
// kod obsługi przerwania
...
}
// UART receive interrupt
ISR(USARTE0_RXC_vect)
{
usart_data = USARTE0_DATA;
...
}
// odczyt odebranej danej
// kod obsługi przerwania
// UART transmit interrupt
ISR(USARTE0_TXC_vect)
{
// kod obsługi przerwania
...
}
Listing 4. Przykładowy kod obsługi przerwań dla mk ATxmega32A4 w języku C
62
Mikroprocesory i kontrolery
63
Porty równoległe mk – warstwa multiplekserów i zacisków we/wy
•
Do równoległej transmisji danych cyfrowych służą w mk zespoły linii we/wy zwane portami równoległymi (parallel
ports lub I/O ports).
•
W przeważającej liczbie przypadków porty składają się z 8 linii dla mk 8-bitowych, mogą zatem transmitować dane
bajtami.
•
Liczba portów i ich wyprowadzeń (pinów) jest ograniczona przez liczbę wyprowadzeń obudowy mk.
•
Za transport informacji wewnątrz mk odpowiedzialna jest wewnętrzna szyna danych.
Rys. 32. Schematyczna budowa pojedynczej linii portu równoległego
Mikroprocesory i kontrolery
64
Operacje wykonywane przez port mk:
•
Czytanie danych (pobieranie) podawanych z zewnątrz na wyprowadzenia portu (jego piny) przez port
polega na doprowadzeniu chwilowych stanów napięć na tych wyprowadzeniach (tzn. istniejących w
momencie operacji czytania) do wewnętrznej szyny danych układu. Jest to realizowane przez
uaktywnienie trójstanowego bufora sygnałem „czytanie”, jak pokazano na rys. 34.
•
Wpisywanie danych (wprowadzenia) danej do portu powoduje, że chwilowy stan wewnętrznej szyny
danych zostaje zapamiętany w elementach zapamiętujących poszczególnych linii (najczęściej są nimi
przerzutniki typu D) i wystawiany na wyprowadzeniach portu za pośrednictwem aktywnego bufora
trójstanowego. Stan wyprowadzeń portu pozostaje niezmienny, dopóki nie nastąpi kolejna operacja
wpisania do portu.
•
Linia portu równoległego jest linią wejściową, gdy bufor trójstanowy jest w stanie wysokiej impedancji.
Uaktywnienie bufora trójstanowego sygnałem „kierunek”, ustawia linię jako wyjściową. Wówczas „1” na
wyjściu przerzutnika odpowiada stan wysoki (około Vcc – napięcie zasilania mk) na wyprowadzeniu
portu, a „0” stan niski (około 0 V).
Wyróżnia się trzy rodzaje linii portów (zacisków we/wy):
• dwukierunkowe (quasi-bidirectional),
• z otwartym obwodem drenu tranzystora (open dren),
• o zwiększonej obciążalności (push-pull output).
Mikroprocesory i kontrolery
65
Rys. 33. Pełny schemat blokowy pojedynczej linii portu we/wy mk ATxmega32A4
Mikroprocesory i kontrolery
Do obsługi dwukierunkowego portu równoległego służy kilka rejestrów:
Np. dla mk ATmega16
•
rejestr danych wyjściowych (PORTx),
•
rejestr kierunku przepływu danych (DDRx),
•
rejestr danych wejściowych (PINx).
Np. dla mk ATxmega32A4
•
rejestr kierunku przepływu danych (PORTx_DIR),
•
rejestr kierunku przepływu danych (PORTx_DIRSET) – indywidualne ustawianie linii jako wyjściowych,
•
rejestr kierunku przepływu danych (PORTx_DIRCLR) – indywidualne ustawianie linii jako wejściowych,
•
rejestr kierunku przepływu danych (PORTx_DIRTGL) – zmiana kierunku linii na przeciwny,
•
rejestr danych wyjściowych (PORTx_OUT),
•
rejestr danych wyjściowych (PORTx_OUTSET) – indywidualne ustawienie stanu wysokiego na linii,
•
rejestr danych wyjściowych (PORTx_OUTCLR) – indywidualne ustawienie stanu niskiego na linii,
•
rejestr danych wyjściowych (PORTx_OUTTGL) – zmiana stanu linii na przeciwny,
•
rejestr danych wejściowych (PORTx_IN),
•
rejestry: INTCTRL, INT0MASK, INT1mASK, INTFLASG, PINnCTRL.
66
Mikroprocesory i kontrolery
67
Przykładowe parametry elektryczne linii portów równoległych:
•
dla ATmega16 pojedynczy pin portu może przejąć w stanie niskim prąd 20 mA, ale suma prądów wpływająca przez
wszystkie piny mk nie może przekroczyć 200 mA.
•
dla PIC18F4550 pojedynczy pin portu może przejąć w stanie niskim i wysokim prąd 25 mA, ale suma prądów
wpływająca przez wszystkie piny mk nie może przekroczyć 200 mA.
•
dla ATxmega32A4 pojedynczy pin portu może przejąć w stanie niskim i wysokim prąd 20 mA, ale suma prądów
wpływająca przez wszystkie piny mk nie może przekroczyć 200 mA.
Ważna uwaga: każda linia układu cyfrowego będąca wyjściem, zatem i mk, jest w stanie przejąć znacznie większy prąd
w stanie niskim niż wysokim. Wynika to z technologii układów CMOS.
Mikroprocesory i kontrolery
Rys. 34. Schemat blokowy portu A linii RA3:0 i RA5 mk PIC18F4550 wraz z kodem inicjującym pracę portu A
68
Mikroprocesory i kontrolery
69
Wewnętrzne urządzenia peryferyjne mk
Podstawową cechą mk jest zawarcie w ich strukturze dodatkowych urządzeń, zwanych urządzeniami peryferyjnymi.
Stanowią one warstwę programowalnych urządzeń we/wy w modelu warstwowym mk zamkniętego.
W mk urządzenia peryferyjne są zintegrowane z układami we/wy (czyli składają się z układów we/wy i właściwych
urządzeń peryferyjnych w przeciwieństwie do systemów mikroprocesorowych, w których te dwa bloki były oddzielne).
Wszystkie układy peryferyjne mk mają właściwości:
•
Są programowalne - zadania przekazywane są im do wykonania odpowiednimi rozkazami, dokładniej mówiąc przez
ustawienie odpowiednich bitów w rejestrach konfiguracyjnych (sterujących), przez wpisanie danych do rejestrów
danych.
•
Charakteryzują się dużym stopniem autonomii w stosunku do procesora rdzeniowego. Przekazane im zadania
wykonywane są samodzielnie, bez zaangażowania czasu procesora.
•
Od strony procesora układy peryferyjne, czyli układy we/wy programowane są za pośrednictwem magistrali
wewnętrznej. Układom tym zazwyczaj przypisane są:
•
•
rejestry robocze (czyli rejestry danych zawierające wyniki ich działania),
•
rejestry konfiguracyjne/sterujące służące do konfiguracji i sterowania urządzeniem peryferyjnym,
•
rejestry statusu zawierające aktualny stan urządzenia: flagi przerwań, komunikaty o błędach, itp.
O zakończeniu wykonywania zadań procesor informowany jest ustawieniem odpowiedniego bitu w rejestrze stanu
urządzenia (najczęściej flagi przerwania) lub wysłaniem sygnału żądania przerwania o ile jest ono odblokowane.
Mikroprocesory i kontrolery
Rys. 35. Obszar rejestrów urządzeń peryferyjnych SFR umieszczony w górnej
połówce banku 15 mapy pamięci danych mk PIC18F4550, adresy: F60h – FFFh
70
Mikroprocesory i kontrolery
71
Rys. 36. Obszar rejestrów urządzeń peryferyjnych mk ATxmega32A4
Mikroprocesory i kontrolery
typedef unsigned char uint8_t;
72
// plik stdint.h
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
#define _SFR_MEM8(mem_addr) _MMIO_BYTE(mem_addr)
// plik sfr_defs.h
/* PORTA - Port A */
#define PORTA_DIR
_SFR_MEM8(0x0600)
#define PORTA_DIRSET _SFR_MEM8(0x0601)
#define PORTA_DIRCLR _SFR_MEM8(0x0602)
#define PORTA_DIRTGL _SFR_MEM8(0x0603)
#define PORTA_OUT
_SFR_MEM8(0x0604)
#define PORTA_OUTSET _SFR_MEM8(0x0605)
#define PORTA_OUTCLR _SFR_MEM8(0x0606)
#define PORTA_OUTTGL _SFR_MEM8(0x0607)
#define PORTA_IN
_SFR_MEM8(0x0608)
#define PORTA_INTCTRL _SFR_MEM8(0x0609)
#define PORTA_INT0MASK _SFR_MEM8(0x060A)
#define PORTA_INT1MASK _SFR_MEM8(0x060B)
#define PORTA_INTFLAGS _SFR_MEM8(0x060C)
#define PORTA_PIN0CTRL _SFR_MEM8(0x0610)
#define PORTA_PIN1CTRL _SFR_MEM8(0x0611)
#define PORTA_PIN2CTRL _SFR_MEM8(0x0612)
#define PORTA_PIN3CTRL _SFR_MEM8(0x0613)
#define PORTA_PIN4CTRL _SFR_MEM8(0x0614)
#define PORTA_PIN5CTRL _SFR_MEM8(0x0615)
#define PORTA_PIN6CTRL _SFR_MEM8(0x0616)
#define PORTA_PIN7CTRL _SFR_MEM8(0x0617)
Listing 5. Przykład deklaracji rejestrów urządzeń peryferyjnych dla mk ATxmega32A4 w języku C – fragment pliku iox32a4.h
Mikroprocesory i kontrolery
73
// Register: PORTB
extern volatile unsigned char
PORTB
@ 0xF81;
#ifndef _LIB_BUILD
asm("PORTB equ 0F81h");
#endif
// bitfield definitions
typedef union {
struct {
unsigned RB0
:1;
unsigned RB1
:1;
unsigned RB2
:1;
unsigned RB3
:1;
unsigned RB4
:1;
unsigned RB5
:1;
unsigned RB6
:1;
unsigned RB7
:1;
};
struct {
unsigned INT0 :1;
unsigned INT1 :1;
unsigned INT2 :1;
unsigned
:2;
unsigned PGM
:1;
unsigned PGC
:1;
unsigned PGD
:1;
};
struct {
unsigned
:3;
unsigned CCP2_PA2
:1;
};
} PORTBbits_t;
extern volatile PORTBbits_t PORTBbits @ 0xF81;
Listing 6. Przykład deklaracji rejestrów urządzeń peryferyjnych dla mk PIC18F4550 w języku C – fragment pliku pic18f4550.h
Mikroprocesory i kontrolery
74
Układy peryferyjne można podzielić na następujące grupy funkcyjne (zachowano oryginalne nazwy angielskie):
1. Układy nadzorujące CPU (właściwie przypisane jc,
ale wymienione tutaj):
•
Watchdog Timer (WDT),
•
Power-on Reset (POR),
•
Brown-out Reset (BOR),
•
Fail-Safe Clock Monitor,
•
Clock security system (CSS).
2. Układy czasowe:
•
Timer/Counter (PWM, Capture/Compare, AWeX),
•
Real Time Clock (RTC).
3. Sterowniki komunikacji szeregowej:
•
USART (IRCOM),
•
Serial Peripheral Interface (SPI), (I2S),
•
1-Wire,
•
I2C, Two Wire Interface (TWI),
•
Controller Area Network (CAN),
•
Univelsal Serial Bus (USB),
•
MII & Ethernet PHY,
•
2.4 GHz Radio Transceiver.
4. Łącza równoległe:
•
Ports,
•
Streaming Parallel Port (SPP),
•
External Bus Interface (EBI),
•
Touch sensing controller (TSC).
5. Układy pomiarowe:
•
Analog-to-Digital Converter (ADC),
•
Digital-to-Analog Converter (DAC),
•
Analog Comparator (AC).
6. Układy specjalizowane:
•
Direct Memory Access Controller (DMA),
•
Event System,
•
Interrupt Controller,
•
Battery Backup Module,
•
Crypto Engine,
•
EEPROM.
Mikroprocesory i kontrolery
75
Układy licznikowe/czasowe
Współpraca mk z otoczeniem w czasie rzeczywistym wymaga odliczania czasu lub generowania złożonych sekwencji
binarnych. Jest to realizowane przez specjalizowane bloki nazywane licznikami (counters) lub układami czasowymi
(timers) z dokładnością oscylatora kwarcowego mk.
Liczba liczników stosowanych w mk i ich długość wyrażona w bitach, różnią się dla konkretnych typów mk. Większość
mk ma przynajmniej dwa liczniki 16-bitowe, każdy mk posiada choćby jeden licznik 8-bitowy.
Rys. 37. Schematyczna budowa układu czasowego
Mikroprocesory i kontrolery
76
Najprostsze układy czasowe mogą pracować w dwóch podstawowych konfiguracjach:
• jako właściwe układy czasowe (timers) – Są wtedy taktowane wewnętrznym sygnałem zegarowym
rozprowadzanym przez układ dystrybucji sygnałów zegarowych. Timery wykorzystywane są w
programie użytkownika jako wzorce czasu. W celu generowania wzorców czasu o różnej długości
wewnętrzny sygnał zegarowy, przed doprowadzeniem do układu czasowego, przechodzi przez
programowalny dzielnik częstotliwości.
• jako liczniki (counters) – Są one wtedy taktowane zewnętrznymi sygnałami doprowadzanymi poprzez
linie wejściowe portów (czyli zliczają impulsy zewnętrzne) i wykorzystywane w programie
użytkownika np. jako liczniki zmian poziomów sygnałów zewnętrznych.
Kolejna właściwość liczników to sposób zliczania impulsów. Liczniki mogą zliczać impulsy:
•
w górę, tzn. inkrementować,
•
w dół czyli dekrementować.
Mikroprocesory i kontrolery
77
Liczniki wyposażone w bardziej rozbudowane układy są używane zazwyczaj do realizacji następujących funkcji:
•
określenia (mierzenia) odstępów czasu między zdarzeniami zachodzącymi na zewnątrz mk, sygnalizowanymi przez
impulsy elektryczne doprowadzone do mk. Funkcja ta bywa nazywana rejestracją zdarzeń (input event capture),
•
generowania impulsów (sekwencji impulsów) w odstępach czasu o zaprogramowanej wartości (output compare) lub
przebiegu okresowego o zadanej częstotliwości,
•
generowania sygnałów impulsowych o określonym czasie trwania lub sygnałów okresowych o zadanym
współczynniku wypełnienia (PWM – pulse width modulation),
•
sterowania szybkością transmisji w portach szeregowych, zarówno w trybie synchronicznym, jak i asynchronicznym
(baut rate generator),
•
realizacji zadań licznika nadzorcy – watchdoga, omówionych w poprzednim podrozdziale.
Mikroprocesory i kontrolery
Rys. 38. Schematyczna budowa układu generatora sygnału zegarowego „zegara”
78
Mikroprocesory i kontrolery
79
Rys. 39. Licznik w konfiguracji rejestratora zdarzeń
Zadaniem licznika w konfiguracji rejestratora zdarzeń jest określenie czasu wystąpienia zdarzenia zewnętrznego
sygnalizowanego przez impuls elektryczny podany na wejście.
Czas ten jest mierzony w sposób względny, tzn. w stosunku do chwili zezwolenia na rozpoczęcie zliczenia w n-bitowym
liczniku sterowanym impulsami zegara wewnętrznego.
Mikroprocesory i kontrolery
80
Zasada działania rejestratora zdarzeń:
•
Przed uruchomieniem zliczania program zeruje licznik i określa zbocze sygnału zewnętrznego, które
ma spowodować rejestrację zdarzenia.
•
Natępnie następuje uruchomienie licznika. Od tego momentu licznik zlicza kolejne impulsy
przychodzące od zegara – czyli, dokładniej mówiąc, po każdym zliczonym impulsie następuje
inkrementacja zawartości n-bitowego rejestru roboczego licznika.
•
Po wystąpieniu aktywnego zbocza sygnału zewnętrznego aktualna zawartość licznika jest przepisywana
do rejestru zatrzaskowego rejestratora zdarzeń.
•
Układ może równocześnie wygenerować przerwanie informujące jc o zarejestrowaniu zdarzenia, jeśli
wcześniej ustawiono zezwolenie przerwania.
•
W tym układzie odczyt rejestru zatrzaskowego musi nastąpić przed wystąpieniem kolejnego
zdarzenia, ponieważ pracujący cały czas licznik przy następnym sygnale zewnętrznym zmieni zawartość
rejestru zatrzaskowego.
Rejestrując czas wystąpienia kolejnych zboczy można łatwo określić częstotliwość sygnału okresowego lub szerokość
impulsów. W pierwszym przypadku rejestruje się dwa następujące po sobie zbocza o tej samej polaryzacji, natomiast w
drugim – dwa zbocza o różnej polaryzacji.
Mikroprocesory i kontrolery
81
Rys. 40. Licznik w układzie programowalnego generatora impulsów
Szczególne zastosowanie tej konfiguracji polega na generowaniu impulsów o programowalnym czasie opóźnienia w
stosunku do zewnętrznych impulsów odniesienia.
W tym przypadku układ pracuje w mieszanym trybie rejestrator – generator. Po zarejestrowaniu zdarzenia licznik
odmierza zaprogramowaną liczbę impulsów i generuje sygnał wyjściowy.
Mikroprocesory i kontrolery
82
W konfiguracji programowanego generatora impulsów licznik pracuje zgodnie z poniższą zasadą:
•
Jc wpisuje do rejestru komparatora liczbę k określającą chwilę wygenerowania impulsu (liczbę impulsów
zegara, po których nastąpi wygenerowanie impulsu), po czym zeruje i uruchamia licznik.
•
Po upływie zaprogramowanej liczby k cykli zegara o okresie tc, komparator wykrywa zrównanie się
zawartości licznika i z zawartością rejestru komparatora.
•
Gdy to wykryje generuje sygnał wyjściowy o zaprogramowanej wartości.
•
Jednocześnie licznik może wysyłać do jc przerwanie, o ile zostało odblokowane.
Mikroprocesory i kontrolery
Rys. 41. Licznik w trybie PWM
83
(k < m)
W konfiguracji PWM licznik pracuje jako generator fali prostokątnej o programowanym współczynniku wypełnienia.
Mikroprocesory i kontrolery
84
Zasada pracy generatora PWM jest następująca.
•
•
•
•
•
Jc wpisuje do rejestru szerokości impulsu liczbę k określającą czas trwania impulsu (τ = k·tc), a do
rejestru okresu liczbę m definiującą długość okresu (T = m·tc), przy czym powinno być: k < m.
Następnie program zeruje licznik i ustawia poziom wysoki na wyjściu rejerstru zatrzaskowego –
początek trwania impulsu na wyjściu PWM, po czym uruchamia licznik.
W czasie zliczania kolejnych impulsów zegara zawartość licznika jest porównywana z zawartością
rejestru szerokości impulsów i rejestru okresu sygnału.
Jeśli zawartość licznika osiągnie zaprogramowaną liczbę k określającą czas trwania impulsu, to
pierwszy komparator zeruje przerzutnik wyjściowy – koniec trwania impulsu na wyjściu PWM.
Następnie po osiągnięciu przez licznik zaprogramowanej liczby m drugi komparator ustawia
przerzutnik wyjściowy (początek trwania następnego impulsu na wyjściu PWM) i zeruje licznik – od
tego momentu rozpoczyna się generacja kolejnego impulsu. Zatem sygnał od tego komparatora określa
początek kolejnego impulsu, a zarazem okres generowanego przebiegu.
Rozdzielczość wyjściowa układu PWM jest określona przez częstotliwość sygnału zegara i długość słowa licznika.
Rejestr sterujący PWM zawiera dodatkowo wydzielone bity, które pozwalają na wyjściu uzyskać sygnał stały na
poziomie „0” lub „1”.
Mikroprocesory i kontrolery
85
Rys. 42. Schemat blokowy licznika TIMER0 w trybie 8-bitowym mk PIC18F452
Należy pamiętać, iż maksymalna częstotliwość sygnału zewnętrznego podawanego na wejście licznika nie może być
większa niż FOSC/4.
Wynika to z faktu, iż licznik próbkuje poziom napięcia na wejściu z częstotliwością FOSC.
Jeżeli stwierdzi zmianę poziomu np. po próbkach ‘0’ i ‘0’ pojawią się próbki ‘1’ i ‘1’, to traktuje to jako zbocze
narastające sygnału wejściowego, zatem zliczy pojedynczy impuls.
Mikroprocesory i kontrolery
Rys. 43. Schemat blokowy preskalera dla układów Timer/Counter0 i Timer/Counter1 mk ATmega16
86
Mikroprocesory i kontrolery
87
Rys. 44. Schemat blokowy układu Timer/Counter1 mk ATmega16
Mikroprocesory i kontrolery
88
W skład licznika Timer/Counter1 wchodzą następujące bloki:
•
Programowalny preskaler, który zapewnia podział wewnętrznego sygnału zegarowego przez 8, 64, 256 lub 1024 oraz
synchronizuje zewnętrzny sygnał podawany na wejście T1 z wewnętrznym sygnałem zegarowym jc (rys. 2.45).
•
Blok licznika składający się z bloku sterującego, 16-bitowego rejestru TCNT1 oraz stowarzyszonej z nim flagi
przepełnienia TOV1 umożliwiającej generację przerwania.
•
Blok rejestratora zdarzeń (Input Capture Unit) składający się z toru zbudowanego z pinu ICP1, multipleksera
wybierającego źródło sygnału przechwytywanego, układu redukcji szumów (Noise Canceler), układu wyboru
aktywnego zbocza (Edge Detect), które spowoduje zapisanie bieżącej wartości licznika TCNT1 do 16-bitowego
rejestru ICR1 i ustawienie flagi przerwania ICF1.
•
Blok Output Compare składający się z dwóch torów A i B. W skład każdego toru wchodzi 16-bitowy rejestr OCR1A/B
wraz z komparatorem porównującym zawartość tego rejestru z zawartością licznika, układ generacji sygnału
wyjściowego (Waveform Generation) i flaga przerwania OC1A/B oraz pin wyjściowy OC1A/B.
•
Dwa rejestry konfiguracyjne TCCR1A i TCCR1B, rejestr masek czterech przerwań licznika TIMSK oraz rejestr
przerwań TIFR.
Mikroprocesory i kontrolery
89
Tryby pracy licznika Timer/Counter1 mk ATmega16:
16-bitowy counter/timer
•
•
•
•
sterowany bitami CS10-CS12 rejestru TCCR1B. Przy pomocy tych bitów wybiera się tryb czasomierza (timer) z
odpowiednio ustawionym preskalerem lub licznika (counter) z możliwością wyboru aktywnego zbocza.
Do zliczania służy para rejestrów TCNT1H i TCNT1L stanowiąca 16-bitowy licznik TCNT1.
W zależności od wybranego trybu pracy zawartość licznika może być zerowana, inkrementowana lub
dekrementowana przez impuls zegarowy.
Flaga przepełnienia TOV1 może być ustawiona, gdy licznik osiągnie maksymalną lub minimalną wartość (zero).
Rys. 45. Schemat bloku licznika
Mikroprocesory i kontrolery
90
Tryb rejestratora zdarzeń (Input Capture).
Rys. 46. Schemat bloku rejestratora zdarzeń
•
•
W tym trybie zmiana poziomu napięcia (zdarzenie) na pinie wejściowym ICP1 lub na wyjściu ACO komparatora
analogowego, jeżeli jest zgodna ze zmianą wykrywaną (ustawioną jako aktywna) przez Edge Detector, powoduje
przepisanie aktualnej wartości licznika TCNT1 do 16-bitowego rejestru ICR1 i ustawienie flagi ICF1, i jeśli maska
przerwania TICIE1 jest ustawiona generację przerwania.
Układ Noise Canceler służy do redukcji zakłóceń pojawiających się na jego wejściu. Gdy jest aktywowany sygnał
wejściowy jest opóźniony o cztery impulsy zegarowe zegara systemowego.
Mikroprocesory i kontrolery
•
91
Tryb Output Compare.
Rys. 47. Schemat bloku Output Compare
Mikroprocesory i kontrolery
•
16-bitowy komparator cały czas porównuje zawartość pracującego licznika TCNT1 z wpisaną wartością do16bitowego rejestru OCR1A/B.
•
Jeżeli wartości w TCNT1 i w OCR1A/B zrównają się to 16-bitowy komparator sygnalizuje warunek zrównania się
(generuje sygnał „match”).
•
Flaga przerwania OCF1A/B ustawiana jest w następnym cyklu zegarowym licznika, i jeśli ustawiona jest maska
OCIE1A/B, jest generowane przerwanie.
•
Układ Waveform Generator korzysta z sygnału “match” do generacji przebiegów na wyjściu OC1A/B.
•
Tryb generacji przebiegów na wyjściu OC1A/B zależy od ustawienia bitów WGM13:0 i COM1A/B1:0.
Za pomocą bitów WGM13:0 i COM1A/B1:0 można wybrać następujące tryby pracy licznika
Timer/Counter1 mk ATmega16 (zachowano oryginalne nazewnictwo):
•
Compare Output Mode and Waveform Generation.
•
Normal Mode.
•
Clear Timer on Compare Match (CTC) Mode.
•
Fast PWM Mode.
•
Phase Correct PWM Mode.
•
Phase and Frequency Correct PWM Mode.
92
Mikroprocesory i kontrolery
93
Wbudowane przetworniki analogowo-cyfrowe (A/C)
Przetworniki A/C stosowane w mk wykorzystują najczęściej metodę sukcesywnej aproksymacji SAR (successive
approximation) (stosuje się również przetworniki A/C z przetwarzaniem potokowym – np. rodzina AVR XMEGA)
przetwarzania napięcia na odpowiadającą mu miarę liczbową.
Zaletą metody SAR jest krótki czas konwersji, wynoszący minimalnie 13 do 16 cykli zegara dla przetwornika 10bitwowego.
W praktyce tego typu przetworniki A/C stosowane w mk nie przekraczają rozdzielczości 12 bitów (obecnie typowe mk
posiadają przetworniki 10-bitowe).
Wynika to z faktu, iż umieszczone w jednej strukturze z rozbudowanym układem cyfrowym mk nie zapewniałyby
należytej dokładności przetwarzania. Gdy wymagana jest większa precyzja pomiaru napięć, używa się zewnętrznych
przetworników A/C.
Przetworniki A/C konstruowane są jako bloki w pełni autonomiczne, mogące pracować niezależnie od procesora
rdzeniowego.
Posiadają własne układy sterowania, generatory (lub niezależne dzielniki) sygnałów zegarowych.
Z reguły współpracują z 8 – 16-kanałowymi multiplekserami i układami próbkująco-pamiętającymi S&H (sample-andhold).
Mikroprocesory i kontrolery
Przetwornik A/C oparty na metodzie SAR składa się z:
• z układu próbkująco-pamiętającego,
• komparatora,
• rejestru aproksymacyjnego (zawierającego wynik konwersji),
• układu sterowania realizującego algorytm metody SAR (zawiera on rejestry sterujące),
• przetwornika C/A (najczęściej drabinka R-2R),
• multiplekserów analogowych,
• źródła napięcia odniesienia,
• niekiedy oddzielnego układu zasilania części analogowej (w celu wyeliminowania zakłóceń).
94
Mikroprocesory i kontrolery
95
Rys. 48. Uproszczony schemat blokowy przetwornika A/C pracującego na zasadzie SAR
Mikroprocesory i kontrolery
96
Cykl konwersji A/C dla metody SAR:
•
Zaczyna się od pobrania próbki mierzonego napięcia wejściowego i zapamiętania jej w pojemności C.
•
Rejestr aproksymacyjny jest zazwyczaj inicjowany w taki sposób, że ma ustawiony najbardziej znaczący bit MSB, a
pozostałe bity wyzerowane. Zawartość rejestru reprezentuje zatem napięcie równe połowie maksymalnego napięcia
(zakresu pomiarowego).
•
Wartość ta jest zmieniana przez przetwornik C/A na napięcie i porównywana z napięciem mierzonym.
•
W zależności od wyniku porównania układ sterowania pozostawia najbardziej znaczący bit rejestru niezmieniony albo
go neguje. Pierwszy przypadek ma miejsce, gdy napięcie mierzone jest większe od połowy napięcia zakresowego,
drugi gdy jest mniejsze.
•
Po określeniu wartości najbardziej znaczącego bitu rejestru aproksymacyjnego przetwornik ustawia w rejestrze kolejny
bit i powtarza opisaną wyżej procedurę, aż do ostatniego najmniej znaczącego bitu LSB.
Mikroprocesory i kontrolery
97
Ze względu na problemy natury technologicznej wewnętrzne przetworniki A/C nie osiągają zwykle rozdzielczości
większej niż 10 - 12 bitów.
W takim przypadku wystarcza, by charakterystyka przetwornika spełniała wymagania:
•
monotoniczności (monotonicity)
•
niewystępowanie efektów brakujących kodów– wraz ze wzrostem napięcia wejściowego od zera do napięcia
maksymalnego przetwornik musi dawać na wyjściu wszystkie kolejne liczby od 0 do 2n-1, gdzie n – rozdzielczość
przetwornika. Przy zmniejszaniu napięcia przetwornik generuje natomiast liczby malejące o jedność od wartości 2n-1 do
zera.
W praktyce parametry przetwornika A/C określone są przez:
• długość słowa (najczęściej 8 lub 10 bitów),
•
•
•
czas konwersji (typowo od kilku do kilkunastu µs),
rozdzielczość (zwykle 1 LSB ~ 20 mV lub 1 LSB ~ 5 mV przy napięciu referencyjnym 5V),
błąd całkowity (zwykle 1,5 – 2 LSB).
Mikroprocesory i kontrolery
Natomiast w skład błędu całkowitego wchodzą następujące składniki:
•
błąd kwantyzacji (quantization error),
•
błąd przesunięcia zera (zero-offset error),
•
błąd skalowania przetwornika (full-scale error),
•
błąd nieliniowości całkowitej (integral nonlinearity error),
•
błąd nieliniowości różniczkowej (differential nonlinearity error).
Rys. 49. Charakterystyka przejściowa idealnego, 10-bitowego przetwornika A/C
98
Mikroprocesory i kontrolery
99
Rys. 50. Schemat blokowy przetwornika A/C mk ST72215G
Mikroprocesory i kontrolery
100
Aby dokonać pomiaru napięcia przetwornikiem A/C mk ST72215G należy wykonać następujące kroki:
•
wybrać kanał konwersji bity CH[3:0] w rej. ADCCSR,
•
pin, z którego będzie brany sygnał analogowy musi być ustawiony jako wejście bez pull-up i bez przerwania,
•
ustawić bit ADON w rej ADCCSR aby rozpocząć konwersję,
•
konwersja kończy się ustawieniem bitu COCO w rej. ADCCSR, wyik konwersji znajduje się w rej. ADCDR, nie jest
generowane przerwanie.
Zapis do rej. ADCCSR (z ustawionym bitem ADON) przerywa bieżącą konwersję, resetuje bit COCO i rozpoczyna nową
konwersję.
Mikroprocesory i kontrolery
101
Aby dokonać pomiaru napięcia należy wykonać
następujące kroki:
•
•
•
•
•
•
•
•
wybrać źródło referencyjne bity REFS1:REFS0
w rej. ADMUX
ustalić sposób justowania wyniku konwersji w
lewo lub w prawo bit ADLAR w rej. ADMUX,
wybrać
kanał
konwersji,
ewentualnie
wzmocnienie kanału dla trybu różnicowego bity
MUX4:0 w rej. ADMUX,
ustawić podział sygnału zegarowego taktującego
konwersją bity ADSP2:0 w rej. ADCSRA,
włączyć przetwornik bit ADEN i odblokować
przerwanie bit ADIE od końca konwersji w rej.
ADCSRA,
ustawić bit ADON w rej. ADCCSR aby włączyć
przetwornik A/C,
jeżeli bit ADATE (ADC Auto Triger Enable) w
rej. ADCCSR jest wyzerowany, to konwersję
rozpoczyna się ustawiając bit ADSC w rej.
ADCCSR,
konwersja kończy się ustawieniem flagi ADIF w
rej. ADCCSR, co generuje przerwanie, wynik
konwersji znajduje się w parze rej.
ADCH/ADCL.
Rys. 51. Schemat blokowy przetwornika A/C mk ATmega16
Mikroprocesory i kontrolery
Rys. 52. Przebieg czasowy procedury pojedynczej konwersji A/C dla mk ATmega16
102
Mikroprocesory i kontrolery
103
Wewnętrzne komparatory analogowe mk
Komparator analogowy (komparator napięcia) służy do porównywania analogowego sygnału u(t) z napięciem
progowym (referencyjnym) U:
•
w przypadku idealnym wyjście komparatora przyjmuje tylko dwie wartości napięcia, wysoką H (high) dla u(t)<U i
niską L (low) dla u(t)>U.
•
Przejście od jednego stanu do drugiego zachodzi dla u(t) = U, to jest dla punktu, w którym charakterystyka wyjściowa
wykazuje nieciągłość (rys. 53).
Rys. 53. Schemat komparatora analogowego i jego zasada działania,
gdzie: „+” - końcówka nieodwracająca, „-” - końcówka odwracająca
Czyli zadaniem analogowego komparatora napięcia jest wytworzenie sygnału logicznego 0 lub 1 na wyjściu w zależności
od znaku różnicy napięć wejściowych.
Mikroprocesory i kontrolery
104
Zatem (jeszcze raz wyjaśnienie pracy komparatora):
•
Jeżeli napięcie wejściowe u(t) podane na końcówkę nieodwracającą komparatora jest mniejsze od napięcia odniesienia
U podawanego na końcówkę odwracającą, to napięcie wyjściowe przyjmuje poziom niski.
•
Natomiast, gdy napięcie wejściowe u(t) ma wartość większą niż wartość napięcia odniesienia U, wówczas napięcie
wyjściowe przyjmuje poziom wysoki.
Czyli komparatory analogowe są szczególnym przypadkiem przetworników A/C. Są one najprostszym blokiem
pozwalającym na dokonanie 1-bitowej konwersji sygnału z postaci analogowej na cyfrową, czyli sprawdzenia czy
napięcie na wejściu komparatora jest powyżej, czy poniżej progu komparacji.
W komparatorach analogowych wbudowanych w mk można ustawić parametry:
•
Próg komparacji (poziom komparacji), czyli zewnętrzne napięcie podawane na jedno z wejść
komparatora traktowane jako napięcie odniesienia (napięcie progowe).
•
Warunek komparacji, tzn. co się stanie w przypadku, gdy napięcie wejściowe wzrośnie powyżej progu
komparacji (gdy ustawiliśmy taki warunek) lub zmaleje poniżej jego. Spełnienie warunku komparacji
powoduje ustawienie odpowiedniej flagi i generację przerwania, o ile nie zostało zablokowane.
Mikroprocesory i kontrolery
105
Rys. 54. Schemat blokowy komparatora analogowego mk ATmega16
Mikroprocesory i kontrolery
Rejestr ACSR
Bit
Dostęp
ACD -
7
6
5
4
3
2
1
0
ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
R/W R/W
R
R/W R/W R/W R/W
R/W
Odłączenie komparatora analogowego.
Wpisanie 1 do tego bitu odłącza zasilanie od komparatora analogowego.
ACBG -
Wybranie źródła referencyjnego (Bandgap).
ACO -
Wyjście komparatora analogowego.
ACI -
Flaga przerwania komparatora analogowego.
ACIE -
Odblokowanie przerwania komparatora analogowego.
ACIC -
Funkcja Input Capture z komparatora analogowego.
Wpisanie do tego bitu 1, pozwala aby aktualizacja rejestru ICR1 (Input Capture licznika 1).
ACIS1:0 - Wybór sposobu wywołania przerwania komparatora analogowego.
ACI
S1
0
0
1
1
ACI
Tryb przerwania komparatora
S0
0 Przerwanie od przełączenia wyjścia
1 Zarezerwowane
Przerwanie od zbocza opadającego na
0
wyjściu
Przerwanie od zbocza narastającego na
1
wyjściu
106
Mikroprocesory i kontrolery
107
Rys. 55. Komparatory analogowe w trybie okna – mk ATXmega32A4
Mikroprocesory i kontrolery
108
Wewnętrzne pamięci EEPROM
W nieulotnej pamięci danych typu EEPROM zaimplementowanej w mk można trzymać np. dane pomiarowe, zmienne
konfiguracyjne, które nie mogą ulec skasowaniu po wyłączeniu zasilania lub w trakcie resetu mk.
Zaletą tej pamięci jest możliwość kasowania jej zawartości i wpisu nowych danych przez program użytkownika zawarty
w mk.
Najczęściej pamięć ta ma wymiar 256, 512 bajtów lub 1, 2 kB.
Zapis, jak i odczyt z pamięci EEPROM odbywa się za pośrednictwem rejestrów:
•
rejestru sterującego, w którym uruchamia się procedurę odczytu lub zapisu do pamięci,
•
rejestru danych przechowującego daną, która ma być wpisana pod adres wskazywany przez rejestry adresu lub
zawiera daną odczytaną spod wybranego adresu,
•
jednego lub dwóch rejestrów adresu zawierających adres komórki pamięci EEPROM, na której będzie wykonana
operacja zapisu lub odczytu.
Stąd pamięć EEPROM posiada własny obszar adresowania niezależny (oddzielny) od obszarów adresowania pamięci
danych i programu. Czyli zapis i odczyt do/z tej pamięci odbywa się w identyczny sposób jak zapis i odczyt do/z
rejestrów urządzeń peryferyjnych.
Mikroprocesory i kontrolery
109
Ogólnie odczyt z pamięci EEPROM przebiega według następującej procedury:
• do rejestrów adresu wpisuje się adres bajtu w pamięci EEPROM, spod którego chcemy pobrać daną,
• ustawiamy bit uruchamiający proces odczytu w rejestrze sterującym,
• czekamy, aż ustawi się flaga informująca o zakończeniu odczytu (najczęściej sprzętowe wyzerowanie
bita uruchamiającego proces odczytu),
• w rejestrze danych znajduje się już nasza dana.
Ogólnie zapis danej do pamięci EEPROM najczęściej przebiega według następującej procedury:
• czekamy aż zakończy się poprzedni cykl zapisu (zapis trwa około od 2ms do 4ms), testując flagę
informującą o zakończeniu zapisu (najczęściej czekając na wyzerowanie bita uruchamiającego proces
zapisu).
• do rejestrów adresu wpisuje się adres bajtu w pamięci EEPROM, do którego chcemy wpisać daną,
• do rejestru danych wprowadzamy naszą daną,
• odblokowujemy zapis do pamięci EEPROM ustawiając odpowiedni bit lub wykonując odpowiednią
sekwencję wpisów do rejestrów sterujących (warto przedtem zablokować wszystkie przerwania),
• ustawiamy bit uruchamiający proces zapisu do EEPROM,
Mikroprocesory i kontrolery
110
Przykład obsługi pamięci EEPROM (mk ATmega16):
•
Mk posiada pamięć EEPROM o rozmiarze 512 bajtów (producent gwarantuje 100 000 cykli poprawnego zapisu /
kasowania).
•
Rejestry dostępu do EEPROM’u znajdują się w przestrzeni adresowej we/wy.
•
Czas dostępu przy zapisie zależy od napięcia zasilania i wynosi 2,5 – 4 ms.
•
Kiedy następuje dostęp do pamięci EEPROM, jc jest zatrzymywana przez dwa takty zegara, a następnie kontynuuje
wykonywanie programu.
Operacje dotyczące dostępu do pamięci EEPROM wykonuje się korzystając z rejestrów:
•
adresowych – EEARH, EEARL,
•
danych – EEDR,
•
sterującego – EECR.
Mikroprocesory i kontrolery
111
Rejestr sterujący EECR
Bit 7
-
6
-
5
-
4
-
3
2
1
0
EERIE EEMWE EEWE EERE
3 : EERIE – Maska przerwania informującego o gotowości pamięci EEPROM do wykonania kolejnej operacji.
2 : EEMWE – Ogólny dostęp do zapisu, jedynka oznacza, że wpisanie jedynki do EEWE spowoduje zapis do pamięci
EEPROM. Bit EEMWE zeruje się automatycznie po upływie 4 cykli od ustawienia.
1 : EEWE – Wpis do pamięci EEPROM. Wpisanie jedynki przy ustawionym EEMWE dokonuje wpisu zawartości
rejestru EEDR pod adres EEAR. Bit EEWE zeruje się po czasie około 8,5 ms od ustawienia. Przez 4 cykle od
ustawienia CPU jest zatrzymany. Procedura wpisu danej do pamięci EEPROM:
1. Czekaj aż bit EEWE = 0 w rej. EECR.
2. Czekaj aż bit SPMEN = 0 w rej. SPMCR (w przypadku gdy dokonujemy zapisów do pamięci Flash mk).
3. Wpisz nowy adres do rej. EEARL i EEARH.
4. Wpisz daną do rej. EEDR.
5. Wpisz „1” do bita EEMWE w rej. EECR.
6. W ciągu 4 cykli wpisz „1” do bita EEWE w rej. EECR.
Zwraca się uwagę na konieczność wyłączenia przerwań na czas wykonywania wpisu, gdyż obsłużenie przerwania może
zakłócić powyższą procedurę.
0 : EERE – Odczyt z EEPROM’u. Wpisanie „1” powoduje zatrzymanie CPU na cztery cykle zegarowe i przesłanie danej
spod adresu (EEARH, EEADRL) do rejestru EEDR. Zakończenie odczytu jest sygnalizowane sprzętowym
wyczyszczeniem bitu EERE. Przed odczytem należy testować ten bit czy na pewno zawiera „0”.
Mikroprocesory i kontrolery
EEPROM_write:
sbic EECR,EEWE
; Wait for completion of previous write
rjmp EEPROM_write
out
out
out
sbi
sbi
EEARH, r18
EEARL, r17
EEDR,r16
EECR,EEMWE
EECR,EEWE
; Set up address (r18:r17) in address register
; Write data (r16) to data register
; Write logical one to EEMWE
; Start eeprom write by setting EEWE
ret
Listing. 7. Procedura zapisu do pamięci EEPROM mk ATmega16
EEPROM_read:
sbic EECR,EEWE
rjmp EEPROM_read
; Wait for completion of previous write
out EEARH, r18
out EEARL, r17
sbi EECR,EERE
in r16,EEDR
; Set up address (r18:r17) in address register
; Start eeprom read by writing EERE
; Read data from data register
ret
Listing. 8. Procedura odczytu z pamięci EEPROM mk ATmega16
112
Mikroprocesory i kontrolery
113
Kontrolery (sterowniki) interfejsów szeregowych
Sterowniki komunikacji szeregowej służą do wymiany informacji pomiędzy mk, a jego otoczeniem. Przesyłanie danych
odbywa się w sposób szeregowy.
Rys. 56. Schematyczna budowa sterownika komunikacji szeregowej
Mikroprocesory i kontrolery
114
Sterownik komunikacji szeregowej realizuje dwie funkcje:
•
Funkcję nadajnika (transmiter ) – wysyłanie zawartości określonego rejestru, tzw. bufora nadajnika, w postaci
szeregowej poprzez określone wyprowadzenia portu. Oznacza to, że na wyjściu linii portu pojawia się ciąg binarny
odpowiadający zawartości wysyłanego rejestru.
•
W funkcji odbiornika (receiver) sterownik komunikacji szeregowej potrafi przetworzyć ciąg binarny doprowadzony
do wejścia określonej linii portu na zawartość rejestru, zwanego buforem odbiornika.
Sterownik komunikacji szeregowej (potocznie: port szeregowy lub interfejs szeregowy) nazywa się
dwukierunkowym (fullduplex), jeśli może równocześnie odbierać i nadawać dane. Jest to możliwe, gdy jest
wyposażony w dwie oddzielne linie do nadawania i do odbioru.
Gdy dane są przesyłane na jednej linii, wówczas interfejs szeregowy nazywa się jednokierunkowym
(halfduplex), gdyż w danej chwili może transmitować dane tylko w jednym kierunku.
Wyróżnia się dwa rodzaje transmisji szeregowej:
•
asynchroniczną,
•
synchroniczną.
Mikroprocesory i kontrolery
115
Dane przesyłane asynchronicznie
•
nie są związane z żadnym sygnałem synchronizującym, w szczególności nie towarzyszy im sygnał zegara.
•
Transmisja przebiega zwykle bajtami przesyłanymi szeregowo w postaci ciągów bitów.
•
Np. oprócz ośmiu bitów danych przesyła się dodatkowo bit startu oraz opcjonalnie bit parzystości do detekcji błędów i
bit stopu.
•
Pomiędzy nadajnikiem, a odbiornikami musi być ustalona częstotliwość przesyłania danych.
•
Odbiornik z ustaloną częstotliwością próbkuje swoją linię wejściową danych. Po wykryciu bitu startu (najczęściej
stan niski) odczytuje ustaloną liczbę bitów.
•
Transmisja kończy się bitem stopu ustawiającym linię danych w stan nieaktywny (pasywny).
Rys. 57. Przebiegi czasowe transmisji asynchronicznej na linii danych
Mikroprocesory i kontrolery
116
Przy transmisji synchronicznej
•
Równolegle z ciągiem bitów danych przesyła się sygnał synchronizujący (zegarowy), który określa chwile, w których
stan linii danych odpowiada ważnym wartościom kolejnych bitów.
•
Moment ważności danej bitowej może być ustalony dla określonego stanu linii zegarowej np. stanu wysokiego (np.
interfejs I2C) lub dla wybranego (tzw. aktywnego) zbocza sygnału zegarowego (np. interfejs SPI).
•
Po każdym bajcie może być dodatkowo przesłany bit parzystości.
Rys. 58. Przebiegi czasowe transmisji synchronicznej na linii danych i sygnału synchronizującego (zegarowej)
Mikroprocesory i kontrolery
117
Można wyróżnić między innymi następujące interfejsy szeregowe stosowane w mk:
•
•
•
•
•
•
•
•
UART (Universal Asynchronous Receiver/Transmitter),
SPI (Serial Peripherial Interface),
1-Wire,
I2C (Inter-Integrated Circuit),
CAN (Controller Area Network),
USB (Universal Serial Bus),
MII (Media Independent Interface) i Ethernet,
2,4 GHz Radio Transceiver.
Mikroprocesory i kontrolery
Interfejs szeregowy standardu UART
Interfejs UART przewidziany jest zazwyczaj do zapewnienia łączności mk z komputerem PC lub innym mk.
Mk zawierają często rozbudowane układy UART posiadające:
•
własne generatory sygnałów odniesienia,
•
bufory na dane wysyłane i odbierane,
•
dekodery kodów sterujących,
•
pozwalające na pracę w trybie dwukierunkowym z protokołem potwierdzeń sprzętowych (Xon/Xoff).
Port szeregowy UART kontaktuje się ze światem zewnętrznym za pomocą dwóch wyprowadzeń:
•
wejścia odbiornika (oznaczanego najczęściej RxD)
•
wyjścia odbiornika (TxD).
Interfejs UART jest interfejsem asynchronicznym, najczęściej posiada swój własny generator taktujący.
118
Mikroprocesory i kontrolery
119
Rys. 59. Format danych dla standardu UART
Transmisja danych w standardzie UART:
•
zaczyna się od bitu startu,
•
po którym następuje osiem bitów danej (czasami dziewięć, gdzie dziewiąty bit jest najczęściej bitem parzystości),
przesyłanych od najmłodszego D0 do najstarszego D7 bita,
•
jednego bitu stopu (w skrócie: 8N1).
Przedstawiony na rys. 59 format danych interfejsu UART oznacza się w skrócie: 8N1 – czyli 8 bitów danej, bez bita
parzystości, 1 bit stopu.
Mikroprocesory i kontrolery
Rys. 60. Schematyczna budowa interfejsu UART w mk
120
Mikroprocesory i kontrolery
121
Ogólna obsługa interfejsu UART jest następująca:
•
Należy najpierw ustalić prędkość transmisji wpisując odpowiednią wartość do rej. generatora prędkości transmisji.
•
Wybrać 8 lub 9 bitowy format danych w rej. konfiguracyjnym.
•
Odblokować przerwania od nadajnika (koniec wysyłania danej) i od odbiornika (zakończony odbiór danej).
•
Włączyć nadajnik i odbiornik (lub jeden z tych układów).
•
Jeśli chcemy wysłać daną, to w celu uruchomienia transmisji wprowadzamy ją do rejestru danych interfejsu UART
(bufor równoległy zapisu). Gdy dana ma być 9 bitowa, to przed tą operacją należy ustawić 9 bit danej znajdujący się w
rejestrze konfiguracyjnym. Przed wysłaniem danej należy sprawdzić czy poprzednia operacja wysyłania danej przez
UART została zakończona (testowanie flagi koniec wysyłania danej).
•
Gdy interfejs odebrał daną, ustawiona jest flaga zakończony odbiór danej i generowane jest przerwanie. Odebrana
dana znajduje się w rejestrze danych (bufor równoległy odczytu).
W układzie nadajnika układu UART transmisja jest inicjowana przez wpis danej do rejestru danych
(bufora zapisu)
Mikroprocesory i kontrolery
Rys. 61. Schemat blokowy układu UART w mk ATmega16
122
Mikroprocesory i kontrolery
123
Rys. 62. Schemat blokowy układu nadajnika UART w mk AT90S8515
Mikroprocesory i kontrolery
Rys. 63. Schemat blokowy układu odbiornika UART w mk AT90S8515
124
Mikroprocesory i kontrolery
125
Rys. 64. Sposób próbkowania odbieranych bitów przez interfejs UART mk ATxmega32A4
Mikroprocesory i kontrolery
Tabela 6. Wybór prędkości transmisji dla interfejsu UART mk ATmega16
126
Mikroprocesory i kontrolery
127
Obsługa interfejsu UART składa się z trzech etapów:
•
inicjalizacji interfejsu UART (ustawiamy prędkość transmisji, liczbę bitów danej i bitów stopu, kontrolę parzystości,
aktywowanie przerwań, itd.),
•
odczytu danej odebranej z rej. UDR (najczęściej w obsłudze przerwania),
•
zapisu danej do rej. UDR i uruchomieniu transmisji – Listing. 7.
// konfiguracja interfejsu szeregowego UART na porcie E
USARTE0_BAUDCTRLA = 0x67;
USARTE0_BAUDCTRLB = 0x00;
// 103 - daje 9600 b/s przy 16 MHz sygnału taktującego CPU
USARTE0_CTRLA = 0x14;
USARTE0_CTRLC = 0x03;
USARTE0_CTRLB = 0x18;
// Low level interrupt Rx i TX odblokowane
// Tryb asynchroniczny, 8-bit dana
// Włączenie układów odbiornika RX i nadajnika TX
Listing 9. Fragment w języku C z procedurą inicjalizacyjną interfejsu UART dla mk ATxmega32A4
volatile unsigned char usart_data;
...
// UART receive interrupt - odczyt odebranei danej
ISR(USARTE0_RXC_vect)
{
usart_data = USARTE0_DATA; // ? – na wykładzie
...
// kod obsługi przerwania
}
Listing 10. Fragment w języku C z procedury odczytu danej z interfejsu UART dla mk ATxmega32A4
Mikroprocesory i kontrolery
volatile unsigned char end_transmit;
...
// UART transmit interrupt - ustawienie flagi końca wysyłania bajta
ISR(USARTE0_TXC_vect)
{
end_transmit = 0;
}
...
void sendbyte(unsigned char usart_data)
/* funkcja wysyła bajt przez interfejs USART E */
{
while(end_transmit == 1){};
// czekaj na zakończenie transmisji
USARTE0_DATA = usart_data;
end_transmit = 1;
// uruchmienie transmisji
return;
}
Listing 11. Fragment w języku C procedury zapisu i wysłania danej przez interfejs UART dla mk ATxmega32A4
128
Mikroprocesory i kontrolery
129
Rys. 65. Realizacja sprzętowa standardu RS232C
Mikroprocesory i kontrolery
Rys. 66. Aplikacja układów typu 232
130
Mikroprocesory i kontrolery
131
Szeregowy synchroniczny interfejs SPI
Interfejs SPI (Serial Peripherial Interface),służy do dwukierunkowej (full-duplex), synchronicznej, szeregowej
transmisji danych pomiędzy mk, a zewnętrznymi układami peryferyjnymi.
Jest interfejsem trójżyłowym, składa się z:
•
dwóch linii synchronicznie przesyłających dane w przeciwnych kierunkach MISO (Master Input – Slave Output) i
MOSI (Master Output– Slave Input),
•
linii z sygnałem zegarowym SCK synchronizującym ten transfer,
•
dodatkowo mk wyposażone są w czwartą linię SS służącą do wyboru trybu pracy interfejsu SS = 1 – układ master,
SS = 0 – układ slave.
Rys. 67. Przykład połączenia interfejsu ISP pomiędzy układem master i slave
Mikroprocesory i kontrolery
132
Rys. 68. Idea transmisji danych w interfejsie SPI
Z rysunku widać, że protokół transmisji (w najprostszej postaci) wymaga dwóch rejestrów przesuwnych (shift register)
połączonych w licznik pierścieniowy (wejście jest połączone z wyjściem).
W tym interfejsie dane są wpisywane (odbierane) do rejestru szeregowego jednym zboczem zegarowym, a przesuwane
(wyprowadzane na zewnątrz – nadawane) drugim.
Mikroprocesory i kontrolery
133
Opis interfejsu SPI:
•
Układ generujący sygnał zegara jest określony jako nadrzędny (master), bez względu na to czy dane są przez niego
nadawane czy odbierane.
•
Wszystkie pozostałe układy na magistrali są określone jako podrzędne (slave).
•
Sygnał zegara nie jest ciągły, nadawany jest jedynie w czasie trwania transmisji. Umożliwia to odbiór
poszczególnych bitów danych bez konieczności testowania bitów startu i stopu, charakterystycznego dla transmisji
asynchronicznej.
•
Kiedy układ nadrzędny nadaje dane na linii MOSI do układu podrzędnego, to układ podrzędny odpowiada, wysyłając
do układu nadrzędnego dane na linii MISO. Implikuje to dwukierunkową transmisję z jednoczesnym wysyłaniem i
odbieraniem danych przez oba układy, synchronizowanym tym samym sygnałem zegarowym.
•
Zatem bajt transmitowany jest od razu zastępowany bajtem odbieranym. Dzięki temu nie ma „pustych” transmisji: raz
aby wysłać bajt, drugi aby go odebrać.
•
Do wysłania bajta i jego odebrania wystarczy osiem impulsów zegarowych na linii SCK
•
Najczęściej szybkość transmisji dla mk nie przekracza 1-4 Mbit/s.
•
Dane są wpisywane (odbierane) do rejestru szeregowego jednym zboczem zegarowym, a przesuwane (wyprowadzane
na zewnątrz – nadawane) drugim. Zwiększa to czas podtrzymania danych odbiornika do ½TCLK - td, gdzie TCLK - okres
zegara, td - opóźnienie magistrali.
Mikroprocesory i kontrolery
134
Właściwości układu SPI z punktu widzenia interfejsu mogą być opisane przy pomocy 3 funkcji interfejsowych:
•
Talker (nadajnik) – wprowadzenie danej (bajta) z wewnętrznej magistrali równoległej do rejestru szeregowego,
przesuwanie i wysyłanie bit po bicie danej z rejestru szeregowego.
•
Listener (odbiornik) – odczyt bit po bicie danej odbieranej i kompletowanie jej w rejestrze szeregowym, następnie po
zebraniu całego bajta równoległy jego odczyt przez wewnętrzną magistralę mk.
•
Repeater (pośredniczenie w transmisji) - dane wejściowe są bit po bicie wpisywane do rejestru szeregowego z linii
wejściowej, przesuwane i od razu bit po bicie wysyłane na linię wyjściową.
Rys. 69. Schemat funkcjonalny układu z interfejsem SPI
Mikroprocesory i kontrolery
135
Aby transmisja pomiędzy mk, a urządzeniem peryferyjnym przebiegała prawidłowo muszą być spełnione następujące
warunki:
• zachowanie jednakowej długość danej (najczęściej 8 bitów lub wielokrotność tej liczby),
•
taka sama kolejność wysyłania bitów (najczęściej od MSB do LSB, niektóre mk mają możliwość programowej
zmiany tej kolejności),
•
zgodna polaryzacja i faza sygnału zegarowego.
Polaryzacja sygnału zegarowego jest określona przez wartość logiczną sygnału zegara w stanie spoczynkowym (poza
czasem transmisji):
•
CPOL=0 – sygnał zegara w stanie spoczynku jest w stanie niskim „Lo”,
•
CPOL=1 – sygnał zegara w stanie spoczynku jest w stanie wysokim „Hi”.
Faza sygnału zegarowego definiuje zależność pomiędzy zboczami sygnału zegarowego, a momentami próbkowania
danych wejściowych; przesuwania zawartości rejestru (wysłania danych wyjściowych):
•
CPHA=0 – pierwsze zbocze sygnału zegarowego próbkuje dane wejściowe, drugie zbocze przesuwa dane w
rejestrze – wyprowadza je z rejestru (dane są próbkowane, a następnie przesuwane i wysyłane),
•
CPHA=1 – pierwsze zbocze sygnału zegarowego przesuwa dane w rejestrze – wyprowadza je z rejestru, drugie
zbocze próbkuje dane wejściowe (dane są przesuwane i wysyłane, a następnie próbkowane i wpisywane do rejestru).
Mikroprocesory i kontrolery
Stąd można wyróżnić cztery warianty pracy interfejsu SPI (strobowania/przesuwania informacji):
•
(1): CPHA=0 i CPOL=0,
•
(2): CPHA=0 i CPOL=1,
•
(3): CPHA=1 i CPOL=0,
•
(4): CPHA=1 i CPOL=1.
Rys. 70. Przebiegi czasowe interfejsu SPI dla sygnału zegarowego o CPHA=0
136
Mikroprocesory i kontrolery
137
Rys. 71. Przebiegi czasowe interfejsu SPI dla sygnału zegarowego o CPHA=1
Mikroprocesory i kontrolery
Rys. 73. Schemat blokowy układu interfejsu SPI mk
138
Mikroprocesory i kontrolery
139
Interfejs SPI w mk składa się (rys. 73) z:
•
bloku z 8-bitowym rejestrem przesuwnym danych,
•
rejestru kontrolnego,
•
rejestru statusowego
•
współpracującego z układem sterującym interfejsem SPI,
•
generatora sygnału zegarowego uruchamianego w trybie master,
•
prostego układu generacji żądania przerwania korzystającego z maski przerwania zawartej w rejestrze kontrolnym i
flag przerwań z rejestru statusu.
Mikroprocesory i kontrolery
Generalnie za pomocą interfejsu SPI można utworzyć dwie konfiguracje magistralowe:
•
system z pojedynczym układem master (single master system),
•
system z wieloma układami master (multimaster system).
Rys. 74. System z pojedynczym układem master oparty na interfejsie SPI
140
Mikroprocesory i kontrolery
141
Wymiana danych za pomocą interfejsu SPI mk pracującego w trybie master pomiędzy mk, a zewnętrznym urządzeniem
peryferyjnym generalnie przebiega według następującej procedury:
•
najpierw należy odpowiednio skonfigurować interfejs SPI mk: tryb master, poprawnie skonfigurowane piny
interfejsu (pin SCK ma być wyjściem), ustawić częstotliwość sygnału zegarowego,
SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
Listing 12. Funkcja inicjalizacji interfejsu SPI w mk ATmega16 w trybie master
Mikroprocesory i kontrolery
142
•
urządzenie peryferyjne musi być uaktywnione (przygotowane na odbiór danych) – najczęściej służy do tego
dodatkowa linia mk podłączona do wejścia CS (Chip Select ) urządzenia peryferyjnego,
•
aby rozpocząć transmisję wpisuje się daną do rejestru przesuwnego,
•
po czym czeka się na zakończenie transmisji, testując flagę informującą o zakończeniu transmisji lub czeka się na
przerwanie od układu SPI, o ile jest odblokowane,
•
na zakończenie z rejestru przesuwnego można odczytać daną odebraną.
SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,r16
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
Listing 13. Funkcja obsługi transmisji interfejsu SPI w mk ATmega16 w trybie master
Mikroprocesory i kontrolery
143
W trybie slave procedura postępowania jest następująca:
•
najpierw należy odpowiednio skonfigurować interfejs SPI mk: tryb slave, poprawnie skonfigurowane piny interfejsu
(pin SCK ma być wejściem),
SPI_SlaveInit:
; Set MISO output, all others input
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
; Enable SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
Listing 14. Funkcja inicjalizacji interfejsu SPI w mk ATmega16 w trybie slave
Mikroprocesory i kontrolery
•
następnie wpisuje się daną, którą chcemy wysłać do rejestru przesuwnego,
•
jeśli jest to wymagane, ustawia się odpowiedni bit w rejestrze sterującym SPI włączający interfejs,
•
urządzenie peryferyjne musi być aktywne i pracować w trybie master,
•
po czym czeka się na zakończenie transmisji, które wywołuje przerwanie, o ile jest odblokowane,
•
na zakończenie z rejestru przesuwnego można odczytać daną odebraną.
SPI_SlaveReceive:
; Wait for reception complete
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Read received data and return
in r16,SPDR
ret
Listing 15. Funkcja obsługi transmisji interfejsu SPI w mk ATmega16 w trybie slave
144
Mikroprocesory i kontrolery
145
Interfejs SPI (jak i I2C) służy do komunikacji między mk a zewnętrznym urządzeniem peryferyjnym będącym
elementem składowym elektronicznych systemów wbudowanych i pełniącym zadaną funkcję zgodną z jego aplikacją.
Podział układów peryferyjnych z interfejsem SPI ze względu na ich zastosowanie (zachowano oryginalne angielskie
nazewnictwo):
•
Memories:
EEPROM (AT25512 – 512 kbit, M95M01 – 1 Mbit, 25AA1024 – 1 Mbit),
• FLASH (AT25DF641 – 64 Mbit),
• SRAM (23A256 – 256 Kbit),
• F-RAM (FM25H20 – 2 Mbit).
•
•
•
Interfaces:
• Ethernet (ENC28J60),
• CAN (MCP2510),
• USB (MAX3420E – USB peripheral controller, MAX3421E – USB peripheral / host controller),
• Wireless (AT86RF230 – transceiver for IEEE 802.15.4, ZigBee),
• I/O expanders (MAX7317, MAX7301, MCP23S17 – 16 bit I/O Expander).
Analog to Digital Converters:
A/D Converters (AD7920, AD7495, MCP3201, MCP3550-50),
• Capacitance to Digital Converters (AD7142 – programmable controller for capacitance touch sensor),
• Temperature to Digital Converters (AD7814 – 10-bit, ADT310 – 16-bit),
• Touch-Screen Controllers (AD7879, MAX11800 – for resistive touch-screen panels),
•
Mikroprocesory i kontrolery
•
146
Digital to Analog Converters:
Audio D/A Converters (AD1934 – 8-channel DAC with PLL and single-ended outputs, 192 kHz, 24 bits),
• D/A Converters (AD5060 – 16-bit, 1 voltage output, AD5390 – 14-bit, 16 voltage outputs, AD5680 – 18-bit, 1 voltage
output, DAC1220 – 20-bit, 1 voltage output),
• Digital Potentiometers (AD5260 – 256 pos., 1 channel, AD5174 – 1024 pos., digital rheostat),
•
Digital Capacitors (PE64102 – 5-bit 32-state Digitally Tunable Capacitor, 100-3000 MHz).
•
•
Amplifiers:
Instrumentation Amplifiers (AD8231 – I2C, AD8250 – I2C),
• Gain Programmable Line Drivers (AD8321),
• Variable Gain Amplifiers (ADL5592, MCP6S21/2/6/8, MAX9939),
• Switches/Multiplexers (MAX395 – 8-channel SPST switch, ADN4604 16 x 16 digital crosspoint switch, ADG738 –
analog CMOS multiplexer).
•
•
MEMS:
Low g Sensor Accelerometers (ADIS16003 – dual axis accelerometer, ADIS19001 - dual axis
accelerometer/inclinometer),
• High g Sensor Accelerometers (ADIS16204 – dual axis accelerometer),
• Gyroscopes (ADIS16130, ADIS16251 – angular rate sensors),
• Internal Measurement Units (ADIS16400 – high precision tri-axis gyroscope, accelerometer, magnetometer),
•
•
Clock and Timing:
Clock Generation and Distribution (AD9520 – multi-output clock generator, AD9512 – clock driver, AD9549 – clock
generator synchronizer),
•Real-Time Clocks (RTC) (MAX6902 – compatible RTC in a TDFN, DS1394 – RTC with trickle charger, DS1305 –
serial alarm RTC),
•Mixed Signal Memory Devices (DS28DG02 – 2 Kbits EEPROM with PIO, RTC, reset, battery monitor and watchdog),
•Direct Digital Sintesis (DDS) (AD9833 – programmable waveform generator).
•
Mikroprocesory i kontrolery
•
147
Power Management:
Energy Measurement (MCP3901 – two channel analog front end, ADE7878 – polyphase multifunction energy
metering),
2
• Impedance Analyzers (AD5933 – 12-bit impedance I C converter network analyzer),
•
•
•
LED drivers:
o LED Display Drivers (MAX6950 – 5- and 8-digit LED display driver),
o Tri-Color LED Drivers (MAX16825, NLSF595DTR2),
• Micro-Stepping Motor Drivers (AMIS-30521, NCV70521).
Optoelectronic Devices:
LCD Display Devices (MAX7231 – tripled LCD decoder/driver, SCD558XA – 8 character, 5x5 dot matrix, MAX9697
– programmable gamma reference system for TFT-LCD displays),
• Vacuum-Fluorescent Display Drivers (MAX6852),
2
2
• Light Sensors (SFH5712 – I C digital ambient light sensor, S11059 – I C color sensor).
•
Mikroprocesory i kontrolery
Rys. 75. Schemat ogólny układu peryferyjnego z interfejsem SPI
Wszystkie układy peryferyjne z interfejsem SPI składają się z dwóch części:
•
bloku interfejsu SPI służącego do komunikacji z układem (wysyłanie i odbiór danych, wysyłanie rozkazów i odbiór
danych statusowych),
•
bloku warstwy aplikacji realizującej zadania zgodne z przeznaczeniem układu.
148
Mikroprocesory i kontrolery
149
Blok interfejsu SPI składa się z:
•
Rejestru szeregowego, do którego w takt sygnału zegarowego CLK są na linii wejście danych SDI szeregowo bit po
bicie wprowadzane dane (najczęściej 8-bitowe – czyli bajty). Dane z układu szeregowo są wystawiane na linii wyjście
danych SDO. Transmisja odbywa się, gdy na linii wyboru układu CS jest stan aktywny (najczęściej stan niski).
•
Układ kontrolny steruje interfejsem SPI za pośrednictwem linii CS oraz podłączonych do niego cyfrowych sygnałów
sterujących, których występowanie (liczba i pełnione funkcje) zależą od zastosowania układu (warstwy aplikacji).
Zarządza również komunikacją między rejestrem szeregowym a blokiem aplikacji.
Postać bloku warstwy aplikacji i liczby oraz funkcji dołączonych do niego linii analogowych i cyfrowych zależy od
zastosowania układu.
Np. dla układów pamięci blok ten składa się z matrycy komórek pamięci i obsługujących ją bloków, dochodzą do niego
tylko dwie cyfrowe linie sterujące.
Natomiast przetworniki A/C posiadają ustaloną liczbę wejść
Mikroprocesory i kontrolery
150
Przykład układów sterowanych interfejsem SPI – a przetworniki A/C pracujące na zasadzie SAR
AD7475 i AD7495 są szybkimi (1 MSPS – miliona próbek na sekundę), o niskim poborze mocy (10,5 mW dla 1 MSPS i
zasilania 5 V, pobór prądu w trybie uśpienia: 1 µA), pojedynczymi 12-bitowymi przetwornikami analogowo-cyfrowymi z
pojedynczym zasilaniem, operującym w zakresie napięć zasilania od 2,7V do 5,25V.
a)
b)
Rys. 76. Schemat blokowy układów firmy Analog Devices przedstawicieli przetworników pracujących na zasadzie
SAR: a) AD7475, b) AD7495
Mikroprocesory i kontrolery
a)
151
b)
Rys. 77. Rozmieszczenie pinów układów: a) AD7475, b) AD7495
Rys. 78. Przebiegi czasowe interfejsu SPI dla układów AD7475 i AD7495
Mikroprocesory i kontrolery
Rys. 79. Typowa aplikacja układu AD7475
152
Mikroprocesory i kontrolery
153
Przykład układów sterowanych interfejsem SPI – układ MEMS
Rys. 80. Schemat blokowy czujnika przyśpieszenia i nachylenia ADIS16201
Mikroprocesory i kontrolery
Rys. 81. Wyprowadzenia układu ADIS16201
154
Mikroprocesory i kontrolery
155
Interfejs szeregowy standardu 1-Wire
Interfejs 1-Wire jest przeznaczony do przesyłania informacji pomiędzy układem nadrzędnym master (mk) i układami
podrzędnymi slave (np. termometry, układy identyfikacji, pamięci SRAM i EEPROM, programowalne klucze).
Transmisja odbywa się w obu kierunkach z wykorzystaniem jednego przewodu sygnałowego (oprócz masy), który
jednocześnie może być wykorzystany do zasilania układów do niego podłączonych.
Dane przesyłane są z prędkością od bliskiej 0 do 16,3 kbps w trybie standard oraz do 115 kbps w trybie overdrive.
Każde z urządzeń podłączonych do magistrali musi mieć wyjście typu otwarty dren, a linia sygnałowa DQ jest
połączona do zasilania przez rezystor podciągający o wartości około 5 kΩ.
Magistrala nie ma ustalonego formatu danych, jednak najczęściej dane są wysyłane w paczkach 8-bitowych.. Zawsze
jednak jako pierwszy jest przesyłany bit najmniej znaczący.
Mikroprocesory i kontrolery
156
Rys. 82. Schemat połączeń interfejsem 1-Wire
Do jednej linii danych może być podpiętych wiele urządzeń typu slave.
Każde z nich posiada bowiem unikalny 64-bitowy numer identyfikacyjny, czyli adres, zawarty w swojej pamięci ROM.
Najmniej znaczący bajt określa typ urządzenia, kolejne 48-bitów reprezentuje unikalny numer seryjny, a najbardziej
znaczący bajt zawiera sumę kontrolną CRC obliczoną z pierwszych 56 bitów pamięci ROM.
Rys. 83. 64-bitowy identyfikator zawarty w pamięci ROM czujnika temperatury DS18B20
Mikroprocesory i kontrolery
157
Protokół wymiany danych poprzez magistralę 1-Wire składa się z czterech podstawowych sekwencji inicjowanych przez
układ master:
•
inicjalizacja (zerowanie magistrali) realizowana przez układ master,
•
wysłanie (zapis do układu podrzędnego) zera przez układ master,
•
wysłanie (zapis do układu podrzędnego) jedynki przez układ master,
•
odczyt bita przez układ master z układu podrzędnego.
Rys. 84. Przebiegi sekwencji inicjalizacji dla magistrali 1-Wire
Mikroprocesory i kontrolery
Rys. 85. Transmisja logicznych „0” i „1” na magistrali 1-Wire
158
Mikroprocesory i kontrolery
159
Rys. 86. Odczyt bita z układu slave przez układ master na magistrali 1-Wire
Przy emulacji programowej interfejsu 1-Wire, na czas generowania impulsów (zwłaszcza dla „1”) warto wyłączać
wszystkie przerwania mk, gdyż wystąpienie przerwania w trakcie generacji impulsu może doprowadzić do jego
wydłużenia poza dopuszczalne granice, a co za tym idzie do zafałszowania transmisji.
Mikroprocesory i kontrolery
160
Interfejs szeregowy standardu I2C
Standard interfejsu I2C został opracowany przez firmę Philips.
Jest stosowany w urządzeniach powszechnego użytku, zwłaszcza audio-video, telekomunikacji i systemach elektroniki
przemysłowej.
Transmisja danych odbywa się (Interfejs synchroniczny, halfduplex):
•
szeregowo, w dwóch kierunkach,
•
przy użyciu dwóch linii: SCL (serial clock line) – impulsy zegarowe synchronizujące transmisję, SDA (serial data
line) dwukierunkowa linia danych.
Przemysłowa norma magistrali I2C zakłada możliwość taktowania transmisji sygnałem zegarowym SCL o częstotliwości
od 0 do 100 kHz.
Wymaga się przy tym, by stan niski impulsów zegarowych trwał przynajmniej 4,7 µs, natomiast stan wysoki był nie
krótszy niż 4 µs.
Mikroprocesory i kontrolery
161
Rys. 87. Połączenie urządzeń z magistralą I2C
Układy współpracujące z magistralą I2C muszą być wyposażone w wyjścia z otwartym drenem dla linii SCL i SDA.
Każda z tych linii jest połączona ze źródłem napięcia zasilającego UCC przez rezystor 10 kΩ.
Do jednego układu master można przyłączyć dowolną liczbę układów slave (rys. 87), jednak pod warunkiem, że
pojemność połączeń nie przekroczy maksymalnej wartości równej 400 pF.
W transmisji interfejsem I2C uczestniczy układ nadrzędny (master) oraz jeden lub więcej układów podrzędnych (slave).
Mikroprocesory i kontrolery
Rys. 88. Protokół transmisji szeregowej standardu I2C
Pełna sesja składa się z:
•
bloku Start,
•
przynajmniej jednego cyklu przesłania danych (adresu, bajta),
•
bloku Stop.
Liczba bajtów przesłanych w jednej sesji, to jest między stanem Start i Stop, jest nieograniczona.
162
Mikroprocesory i kontrolery
163
Przykład interfejsu I2C
Układ MSSP (Master Synchronous Serial Port) mk PIC18F452 może pracować jako interfejs SPI oraz interfejs I2C.
Układ ten w pełni implementuje wszystkie funkcje master i slave interfejsu I2C. Zapewnia on sprzętową realizację
przerwań na pojawienie się sekwencji Start i Stop. Umożliwia adresowanie 7-mio i 10-bitowe oraz może pracować przy
dwóch prędkościach 100 kHz i 400 kHz.
Do obsługi interfejsu wykorzystuje się sześć rejestrów:
•
rejestr sterujący SSPCON (SSP Contorl Register),
•
rejestr sterujący drugi SSPCON2 (SSP Contorl Register2),
•
rejestr statusowy SSPSTAT (SSP Status Register),
•
bufor odbioru/wysyłania danej SSPBUF (Serial Receive/Transmit Buffer),
•
rejestr przesuwny SSPSR (SSP Shift Register) –bezpośrednio nie dostępny,
•
rejestr adresu SSPADD (SSP Address Register).
Rej. SSPCON służy do kontroli pracy interfejsu. Pozwala na wybór jednego z czterech trybów pracy interfejsu:
•
tryb slave (adres 7-bitowy),
•
tryb slave (adres 10-bitowy),
•
tryb master, prędkość transmisji jest równa fOSC/(4 * (adres SSPADD+1)),
•
tryby firmware (aby zapewnić kompatybilność z innymi produktami średniej klasy).
Mikroprocesory i kontrolery
Rys. 89. Schemat blokowy układu MSSP pracującego jako interfejs I2C w trybie master
164
Mikroprocesory i kontrolery
165
Rys. 90. Schemat blokowy układu MSSP pracującego jako interfejs I2C w trybie slave
Mikroprocesory i kontrolery
Rys. 91. Przebieg czasowy transmisji (7-bitowy adres) dla interfejsu I2C w trybie master
166
Mikroprocesory i kontrolery
167
Szeregowy interfejs CAN (Controller Area Network)
Interfejs CAN stosuje się głównie w motoryzacji, w lotnictwie, a także w sterownikach przemysłowych.
Założenia projektowe CAN koncentrują się na trzech właściwościach systemu transmisyjnego:
•
szybkości przesyłania danych łączem szeregowym,
•
odporności transmisji na zakłócenia elektromagnetyczne,
•
możliwości dzielenia wspólnych danych przez rozproszone mk realizujące cząstkowe funkcje sterowania.
Szyna CAN jest asynchroniczną szyną transmisji szeregowej z tylko jedną linią transmisyjną. Ma strukturę otwartą, tzn.
może być rozszerzana o nowe węzły (odbiorniki/nadajniki), oraz liniową, czyli nie zawiera pętli.
Rys. 92. Przykład dołączenia węzłów do magistrali CAN
Mikroprocesory i kontrolery
168
Właściwości interfejsu CAN:
•
Interfejs asynchroniczny, half-duplex.
•
Ma strukturę otwartą, tzn. może być rozszerzany o nowe węzły (odbiorniki/nadajniki). Poszczególne węzły są
przyłączone do szyny interfejsu na zasadzie funkcji „zwarty iloczyn” (wired-AND). Minimalna konfiguracja CAN
składa się z dwóch węzłów. Liczba węzłów w trakcie pracy szyny może się zmieniać bez wpływu na działanie szyny.
Właściwość ta oznacza możliwość dynamicznego konfigurowania węzłów, na przykład wyłączenia węzłów, które w
wyniku działania procedur diagnostycznych zostały uznane za niesprawne.
•
Składa się tylko z jednej linii transmisyjnej. Najpopularniejszym sposobem sprzętowej realizacji szyny (tej linii
sygnałowej) jest użycie pary skręconych przewodów oznaczonych symbolami CAN_H i CAN_L. Linie te przyłącza
się do węzłów bezpośrednio lub za pośrednictwem buforów/nadajników/odbiorników.
•
Konfiguracja liniowa, czyli nie zawiera pętli, Po obu stronach linii dołącza się rezystory, tzw. terminatory rezystorowe
(rys. 2.75).
•
Przy braku sterowania szyna znajduje się w stanie nazywanym recesywnym R (recessive), któremu odpowiada stan
logiczny „1”. Stan ten może być zmieniony na stan logiczny „0”, jeśli choć jeden węzeł wymusi na szynie poziom
dominujący D (dominant).
•
Dane przesyłane szyną są transmitowane metodą NRZ (Non Return to Zero). Ponieważ interfejs składa się wyłącznie z
jednej linii konieczny jest arbitraż szyny. Wykonuje się go metodą CSMA/CD z opcją NDA (carrier sense multiple
access / collision detection with non-destructive arbitration).
•
Adresy odbiorników (identyfikatory) są przesyłane jako integralna część przekazu. Specyfika standardu CAN
przewiduje 11-bitowe identyfikatory, czyli umożliwia współpracę 2048 węzłów. Najnowsza specyfikacja 2.0B
(extended CAN) posiada identyfikator 29-bitowy, co daję teoretycznie możliwość adresowania 536 milionów
współpracujących ze sobą urządzeń.
Mikroprocesory i kontrolery
169
Układy obsługujące system CAN można podzielić na trzy grupy:
•
układy nadawczo-odbiorcze (trasceiver),
•
kontrolery współpracujące z mikroprocesorami, mikrokontrolerami, procesorami DSP,
•
mk z zaimplementowanym kontrolerem CAN.
Rys. 93. Koncepcje budowy węzła CAN
Mikroprocesory i kontrolery
Rys. 94. Schemat blokowy kontrolera interfejsu CAN mk PIC18F6585
170
Mikroprocesory i kontrolery
171
Rys. 95. Standardowa ramka danych dla interfejsu CAN
Ramka (jeden z pięciu typowych formatów) składa się z następujących pól:
•
11-bitowy identyfikator,
•
pole kontrolne z bitami sterującymi i długością pola danych,
•
pole danych składające się z 8N bitów,
•
15-bitowa suma kontrolna CRC,
•
pole kończące ramkę.
Mikroprocesory i kontrolery
172
Szeregowy interfejs USB
Interfejs USB został opracowany jako uniwersalny interfejs szeregowy wbudowany w architekturę komputerów PC.
Jego przeznaczeniem jest współpraca komputerów z urządzeniami: przemysłowymi, urządzeniami powszechnego użytku
oraz integracja z sieciami telekomunikacyjnymi.
Prędkość transferu danych wynosi:
•
1,5 lub 12 Mbit/s dla standardu USB 1.1,
•
dla standardu USB 2.0 jest ona równa 480 Mbit/s,
•
(dla standardu USB 3.0 ma wynosić 4,8 Gbit/s).
Przyjęto następującą topologię systemu z interfejsem USB:
•
jeden host (komputer zarządzający)
•
połączony z pierwszym Hubem, do którego można podłączyć na zasadzie drzewa kolejne Huby lub urządzenia.
Cechy interfejsu USB:
•
prostemu i znormalizowanemu okablowaniu,
•
izolacji elektrycznej,
•
samoidentyfikacji urządzeń,
•
automatycznej konfiguracji ich sterowników oraz automatycznej rejestracji w systemie,
•
niskich kosztów sprzętu i okablowania.
Mikroprocesory i kontrolery
173
Podstawowym elementem systemu są Huby. Hub posiada port do połączenia z hostem (Upstream Port) oraz do siedmiu
portów do podłączenia urządzeń lub innych Hubów (Downstream Port), z których każdy może być indywidualnie
konfigurowany i kontrolowany poprzez komputer host.
Huby składają się z dwóch części:
•
Hub Controller,
•
Hub Repeater.
Hub Repeater jest protokołem kontrolującym połączenie pomiędzy Upstrem Port i Downstream Port. Dostarcza on rejestr
służący do komunikacji z hostem.
Wszystkie elementy systemu połączone są magistralą składającą się z czterech linii:
•
Vbus, przewód zasilania +5 V,
•
D+, przewód symetrycznej skrętki sygnałowej,
•
D-, przewód symetrycznej skrętki sygnałowej,
•
GND, przewód masy zasilania.
Typowym kablem sygnałowym jest skrętka ekranowana o impedancji charakterystycznej 90 Ω +-15 % i maksymalnej
długości 5 m. Maksymalne opóźnienie sygnału między punktami końcowymi, tzn. hostem i urządzeniem musi być
mniejsze od 70 ns.
Mikroprocesory i kontrolery
Rys. 96. Połączenie urządzeń w standardzie USB 2.0
Do identyfikacji standardu w jakim pracuje urządzenie służy rezystor Rpu.
•
Gdy łączy on linię D+ z zasilaniem to urządzenie jest identyfikowane jako zgodne z USB 2.0,
•
gdy linia D- jest przez niego dołączona do zasilania to obsługiwany jest standard USB1.1.
174
Mikroprocesory i kontrolery
175
Stosuje się trzy sposoby zasilania urządzeń podłączonych do interfejsu USB:
•
zasilanie pobierane wyłącznie z interfejsu USB (rys. 97a),
•
urządzenia z własnym zasilaniem (rys. 97b),
•
urządzenia z podwójnym zasilaniem (rys. 97c).
a)
b)
c)
Rys. 97. Sposoby zasilania urządzeń podłączonych do interfejsu USB
Mikroprocesory i kontrolery
176
Do transmisji danych interfejsem USB wykorzystuje się kodowanie danych NRZI (Non-Return to Zero Inver on ones).
Kodowanie to polega na braku zmiany poziomu dla jedynki logicznej i zmianie poziomu dla zera logicznego.
Rys. 98. Sposób kodowania danych metodą NRZI
Rys. 99. Warstwowy logiczny model urządzenia USB
Mikroprocesory i kontrolery
177
Każde z urządzeń USB posiada następujące deskryptory:
•
Device Descriptor – tylko jeden, dostarcza ogólną informację o urządzeniu taką jak producent, numer produktu, numer
seryjny, klasa urządzenia i liczba konfiguracji.
•
Configuration Descriptor – zawiera informację dotyczącą wymagań związanych z zasilaniem urządzenia i ile
różnych interfejsów jest przypisanych danej konfiguracji. Urządzenie może posiadać więcej niż jedną konfigurację (np.
konfiguracje low-power i high power).
•
Interface Descriptor – określa liczbę przypadających mu Endpointów, jak również klasę interfejsu.
•
Endpoint Descriptor – identyfikuje typ transferu i kierunek danych, jak również inne parametry Endpointu.
Urządzenie może mieć wiele Endpointów, które mogą być współdzielone przez różne konfiguracje.
•
String Descriptor – dostarcza tekstowej informacji dla użytkownika kodowanej w formacie unicode.
Dane oraz komunikaty przesyłane są po magistrali USB w postaci pakietów mieszczących się w 1 ms oknach
czasowych.
Wyróżnia się trzy rodzaje pakietów:
•
token,
•
data,
•
handshake,
•
(oraz czwarty: special).
Mikroprocesory i kontrolery
a)
178
b)
c)
Rys. 100. Formaty pakietów na magistrali USB: a) token, b) data, c) handshake
Dane są przesyłane od LSB do MSB.
O typie pakietu decydują cztery pierwsze bity pola PID (Packet Identifier) wysyłanego od razu po 32-bitowym polu
SYNC służącym do synchronizacji transmisji między nadajnikiem a odbiornikiem.
W typie token wyróżnia się cztery podtypy pakietów: OUT, IN, SOF, SETUP:
•
pole ADDR pakietu token zawiera 7-bitowy adres urządzenia,
•
pole ENDP 4-bitowy numer Endpointu urządzenia,
•
5-bitowa suma kontrolna CRC5 jest obliczana z pól ADR i ENDP.
Mikroprocesory i kontrolery
179
Typ data jest podzielony na cztery podtypy: DATA0, DATA1, DATA2, MDATA.
•
Wielkość pola danych DATA, z którego obliczna jest 16-bitowa suma kontrolna CRC16, może zmieniać się w
zakresie od 0 B do 1024 B.
•
Dane dla każdego bajta są przesyłane od najmłodszego do najstarszego bita.
Ostatni typ handshake dzieli się na podtypy ACK, NAK, STALL, NYET.
•
Pakiet składa się tylko z pola PID.
•
Służy do raportowania i sterowania transakcją wymiany danych.
Komunikacja między urządzeniami z interfejsem USB przebiega w następujący sposób:
•
Urządzenie fizyczne zostaje zidentyfikowane przez oprogramowanie typu klient, zainstalowane na komputerze (host).
•
Następnie zostaje zainicjowane połączenie pomiędzy urządzeniem a hostem, umożliwiające przesyłanie komunikatów i
danych.
•
Dane odebrane z urządzenia zostają sformatowane zgodnie z wymaganiami protokołu USB i przekazane do hosta
dzięki współpracy oprogramowania systemu USB, oprogramowania hosta oraz współpracującego sprzętu.
Mikroprocesory i kontrolery
Rys. 101. Schemat blokowy kontrolera USB mk PIC18F87J50
180
Mikroprocesory i kontrolery
181
System zdarzeń
System zdarzeń (Event System) służy do zapewnienia bezpośredniej komunikacji (przesyłanie sygnałów wyzwalania i
synchronizacji) między urządzeniami peryferyjnymi mikrokontrolera bez udziału obsług przerwań, układu DMA czy
procesora rdzeniowego (oprogramowania).
Rys. 102. Idea działania systemu zdarzeń
Mikroprocesory i kontrolery
•
•
•
182
Warunek wystąpienia zmiany stanu w urządzeniu peryferyjnym to zdarzenie.
Sygnały zdarzeń są przesyłane między urządzeniami peryferyjnymi za pomocą dedykowanej sieci połączeń zwanej
siecią routowania zdarzeń.
Urządzenia peryferyjne, które generują zdarzenia to generatory zdarzeń, a które odbierają te zdarzenia to
użytkownicy zdarzeń.
Rys. 103. Przykład konfiguracji systemu zdarzeń z podziałem na generator zdarzeń, użytkownika (odbiorcy)
zdarzeń oraz obsługiwanych akcji
Mikroprocesory i kontrolery
183
Rys. 104. Schemat blokowy systemu zdarzeń w mk
rodziny Xmega A
Mikroprocesory i kontrolery
Rys. 105. Przykładowe wykorzystanie systemu zdarzeń – mikrosystem pomiarowy zbudowany
z zasobów wewnętrznych mk ATxmega32A4
184
Mikroprocesory i kontrolery
...
// Event System
EVSYS_CH7MUX = 0xC4;
// TCC0
TCC0_CTRLA = 0x00;
TCC0_CTRLB = 0x30;
TCC0_INTCTRLB = 0x04;
...
// ADC A
ADCA_CTRLB = 0x00;
ADCA_REFCTRL = 0x20;
ADCA_EVCTRL = 0xFE;
ADCA_CH3_INTCTRL = 0x01;
...
ADCA_CTRLA = 0x01;
185
// Source - Capture or Compare A (TCC0_CCA)
// TCC0 stop
// Compare enable for A, B channels, Normal Mode
// Timer Compare B - low level interrupt
//
//
//
//
//
//
Unsigned result, 12-bit resolution
External reference from AREF pin on PORT A
ADC cannels 0, 1, 2 and 3; Event channel 7
as selected inputs. Event channel 7 triggers
conversions on all active channels
Low level interrupt on CH3
// ADC A enable
...
Listing 16. Fragmenty inicjalizacji systemu zdarzeń, licznika i przetwornika A/C w mk ATxmega32A4
Mikroprocesory i kontrolery
186
Typy obudów mk
Scalone struktury mk są zamykane w obudowach rozmaitych typów, zarówno plastikowych, jak i ceramicznych. Ich
klasyfikację podano na rys. 106.
Wyróżniono następujące typy obudów:
DIP – (dual in-line package) dwurzędowe płaskie; najstarszy, tradycyjny typ obudowy zarówno do wlutowywania jak i
montażu w podstawkach; wytwarzane jako plastikowe i ceramiczne,
S-DIP – (shrink dual in-line package) dwurzędowe płaskie; o zmniejszonych gabarytach, plastikowe,
SK-DIP - (skinny dual in-line package) dwurzędowe płaskie, miniaturowe,
PGA – (pin grid array), ze szpilkowymi wyprowadzeniami rozmieszczonymi na obwodzie prostokątnej (lub
kwadratowej) matrycy,
DFP – (dual flat package) do montażu powierzchniowego, z wyprowadzeniami po dwóch stronach obudowy,
QFP – (qual flat package) do montażu powierzchniowego, z wyprowadzeniami z czterech stron obudowy,
TQFP – (thin qad flat package) do montażu powierzchniowego, miniaturowa wersja QFP,
CC – (chip carier) obudowy z kontaktami na krawędzi obudowy, produkowane w dwóch podstawowych odmianach:
PLCC (plastic leaded chip carier) oraz LCC (leadless chip carier).
Mikroprocesory i kontrolery
187
Rys. 106. Klasyfikacja obudów mk
Mikroprocesory i kontrolery
a)
b)
Rys. 107. Przykładowe typy obudów mk PIC16F87x
188
c)
Mikroprocesory i kontrolery
189
Rys. 108. Widoki obudów mk ST72215G
Mikroprocesory i kontrolery
Rys. 109. Obudowa SDIP mk ST72215G
190
Mikroprocesory i kontrolery
191
Rys. 110. Obudowa DIP pamięci SRAM K6T1008C2E firmy Samsung
Mikroprocesory i kontrolery
192
Rodziny mk
Definicja rodziny mikrokontrolerów:
Rodziną mikrokontrolerów nazywamy grupę mk bazującą na tym samym procesorze rdzeniowym ale
zawierającą różne zestawy urządzeń peryferyjnych.
Czyli w skład rodziny mk wchodzą mk o różnych parametrach, ale zachowujące między sobą
kompatybilność programową, tzn. posiadają tą samą jc, czyli tą samą listę instrukcji.
Modyfikacja członków danej rodziny odbywa się na kilku poziomach:
•
na poziomie jc, dotyczy ona zmiany:
− rozmiaru pamięci programu,
− rozmiaru pamięci danych RAM,
− maksymalnej szybkości pracy.
•
na poziomie urządzeń peryferyjnych. Modyfikacje w tej warstwie stanowią podstawowy wyróżnik danego typu mk.
Użytkownik otrzymuje do dyspozycji całą, niekiedy dość liczną rodzinę mk różniących się kombinacjami
wbudowanych w układ scalony układami we/wy.
•
na poziomie warstwy zacisków zewnętrznych i typu obudowy. Dotyczy głównie parametrów elektrycznych
zacisków mk oraz stosowanego typu obudowy mk.
Mikroprocesory i kontrolery
193
Rys. 111. Najpopularniejsze architektury mikrokontrolerów funkcjonujące na rynku krajowym
(10/2010 rok wg „Elektronik – Magazyn Elektroniki Profesjonalnej”)
Rys. 112. Najpopularniejsi w Polsce producenci mikrokontrolerów
(10/2010 rok wg „Elektronik – Magazyn Elektroniki Profesjonalnej”)
Mikroprocesory i kontrolery
194
Tabela 7. Udział w rynku elektroniki wybranych grup mikrokontrolerów, źródło: (1/2015 rok wg „Elektronik – Magazyn
Elektroniki Profesjonalnej”)
Mikroprocesory i kontrolery
195
Wybrani producenci mikrokontrolerów:
•
Atmel (http://www.atmel.com),
•
Microchip (http://www.microchip.com),
•
STMicroelectronics (http://www.st.com),
•
Freescale Semiconductor (http://www.freescale.com),
•
Renesas Technology (dawniej Hitachi Semiconductor),
•
Texas Instruments (http://www.ti.com),
•
NXP (wydzielony z Philips),
•
Zilog,
•
Rabbit Semiconductor,
•
•
Dallas Semiconductor,
Infineon,
•
Analog Devices.
Mikroprocesory i kontrolery
Podział mikrokontrolerów firmy Atmel:
•
AVR 8- and 32-bit MCUs:
•
•
32-bit AVR UC3 MCUs
AVR XMEGA MCUs
megaAVR MCUs
tinyAVR MCUs
Battery Management MCUs
Automotive AVR MCUs
•
SMART ARM-based MCUs:
•
SAMA5 MPUs
SAM C MCUs, SAM D MCUs, SAM E MCUs, SAM G MCUs, SAM L MCUs, SAM S MCUs, SAM V MCUs
SAM3N MCUs, SAM3S MCUs, SAM4L MCUs
SAM4E MCUs, SAM4N MCUs, SAM4S MCUs
SAM3U MCUs, SAM3A MCUs, SAM3X MCUs
SAM7S/SE MCUs, SAM7X/XC MCUs
SAM9XE MCUs, SAM9N/CN MPUs, SAM9R MPUs, SAM9G MPUs, SAM9X MPUs, SAM9M MPUs
8051 Architecture
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Flash ISP - Single Cycle Core
Flash ISP (In-System Programmable)
Flash (Reprogrammable)
CAN Networking MCUs
USB MCUs
Lighting MCUs
ROMless
196
Mikroprocesory i kontrolery
197
Przykłady mikrokontrolerów firmy Atmel
Najmniejszy mk ATtiny4 posiada wymiary: 2 x 2 x 0,6 mm i masę nie przekraczającą 8 mg.
Parametry elektryczne:
•
napięcie zasilania: 1,8 do 5,5 V,
•
częstotliwość oscylatora (zależna od napięcia zasilania): 0 do 12 MHz,
•
niski pobór mocy:
•
tryb aktywności: 200 µA dla 1MHz i 1,8 V,
•
tryb uśpienia: 25 µA dla 1MHz i 1,8 V,
•
tryb zatrzymania: < 0,1 µA dla 1,8 V.
Rys. 113. Zdjęcie mk ATtiny4
Mikroprocesory i kontrolery
Rys. 114. Obudowa mk ATtiny 4
Wybrane cechy mk:
•
54 instrukcje (większość jednocyklowych),
•
16 x 8 rejestrów roboczych,
•
512/1024 bajtów pamięci programu FLASH,
•
32 bajty wewnętrznej pamieci SRAM,
•
urządzenia peryferyjne:
•
16-bit Timer/Counter with Prescaler and Two PWM Channels,
•
Programmable Watchdog Timer with Separate On-chip Oscillator,
•
4-channel, 8-bit Analog to Digital Converter,
•
On-chip Analog Comparator.
198
Mikroprocesory i kontrolery
199
Rys. 115. Schemat blokowy ATtiny4
Mikroprocesory i kontrolery
Mk o najniższym napięciu zasilania (już od 0,7 V) ATtiny43U:
Parametry elektryczne:
•
napięcia zasilania:
•
0,7 – 1,8 V (z wykorzystaniem On-Chip Boost Converter),
•
1,8 – 5,5 V (Boost Converter Bypassed),
•
częstotliwość oscylatora:
•
korzystając z On-Chip Boost Converter: 0 – 4 MHz,
•
zewnętrzne źródło zasilania: 0 – 4 MHz przy 1,8 – 5,5 V, 0 – 8 MHz przy 2,7 – 5,5 V,
•
niskie zużycie energii:
•
tryb aktywności, (bez Boost Converter) 400 µA przy 3V i 1 MHz,
•
tryb zatrzymania (bez Boost Converter) 150 nA przy 3V.
Rys. 116. Schemat wykorzystania układu On-Chip Boost Converter
200
Mikroprocesory i kontrolery
201
Firma Microchip
Rys. 117. Rodziny mk firmy Microchip
Mikroprocesory i kontrolery
202
Przykłady mikrokontrolerów firmy Microchip
Mikrokontrolery o super niskim poborze mocy z technologią nanoWatt XLP? (eXtreme Low Power) zostały
zaprojektowane do systemów bateryjnych, które spędzają nawet 90%-99% czasu swojej pracy w stanie uśpienia.
Zalety najnowszej technologii nanoWatt XLP? to m.in.:
•
zużycie prądu w trybie uśpienia / wyłączenia spada do 13 nA,
•
zużycie prądu z aktywnym układem resetu z odcięciem zasilania spada do 45 nA,
•
zużycie prądu z aktywnym licznikiem watch-dog spada do 400 nA,
•
zużycie prądu z aktywnym zegarem czasu rzeczywistego / kalendarzem spada do 500 nA,
•
zużycie prądu w trybie aktywnym spada do 50 µA na 1 MHz.
Tabela 8. Mikrokontrolery PIC w technologii nanoWatt XLP?
Mikroprocesory i kontrolery
203
Firma STMicroelectronics
Rys. 118. Podział mk firmy STMicroelectronics
Mikroprocesory i kontrolery
Rys. 119. Podział mk STM32 firmy STMicroelectronics
204
Mikroprocesory i kontrolery
205
Firma Texas Instruments
Low-power MCUs (532)
Wireless MCUs (35)
Ultra-low Power (327)
MSP430F1x (32)
MSP430F2x/4x (145)
MSP430FRxx FRAM (92)
MSP430G2x/i2x (59)
MSP430L09x Low Voltage (3)
Low Power + Performance (205)
MSP430F5x/6x (203)
MSP432P4x (2)
Performance MCUs (274)
Real-time Control (111)
Piccolo F2802x/3x/5x/6x/7x (63)
Delfino F2833x/F2837x (19)
Fixed-point F280x/1x (29)
Control + Automation (83)
F28M3x (12)
TM4C12x (71)
Safety (80)
Hercules RM (43)
Hercules TMS570 (34)
Hercules TMS470M (3)
RF430 (4)
CC430 (13)
SimpleLink CC1x (2)
SimpleLink CC2x (14)
SimpleLink CC3x (2)
ARM-Based Processor Platforms (212)
Safety MCUs (64)
ARM Cortex-R (64)
RM MCUs (36)
TMS570 MCUs (28)
ARM Cortex-M MCUs
ARM Cortex-M4 Core (73)
MSP432P4x (2)
ARM Cortex-M3 Core (15)
F28M3x MCUs (12)
TMS470M MCUs (3)
Mikroprocesory i kontrolery
Firma NXP (Philips)
Podział mk firmy NXP ze względu na użyty w mk procesor rdzeniowy:
Cortex-M (32-bit)
Cortex-M0/M0+
Cortex-M3
Cortex-M4/M4F
Dual core
Cortex-M0 & M4F
Cortex-M0+ & M4F
Other ARM (32-bit)
ARM7
ARM9
8/16-bit
80C51
206
Mikroprocesory i kontrolery
207
Sposoby programowania i debugowania mikrokontrolerów z pamięcią FLASH
Definicja programowania zagnieżdżonego:
Tworzenie oprogramowania dla mse opartych na mk (i nie tylko) i ukierunkowanych na zadania
pomiarowo-sterujące oraz komunikacyjne określa się w literaturze mianem programowania
zagnieżdżonego (embeded programming). Oprogramowanie to jest ściśle związane z architekturą samego
procesora i jego sprzętowego otoczenia.
Można wyróżnić następujące cechy programów zagnieżdżonych:
•
Program jednoznacznie ustala funkcję mse, tzn. użytkownik ma możliwość zmiany funkcji systemu zazwyczaj tylko
w niewielkim zakresie przewidzianym przez program użytkowy. Ta właśnie cecha określana jest jako „zagnieżdżenie”
programu.
•
Działanie programu musi spełniać określone wymagania czasowe dotyczące przekraczania maksymalnego czasu
reakcji na określone zdarzenia zewnętrzne oraz realizacji określonych zadań programowych w nieprzekraczalnym
czasie. Ta cecha określana jest jako praca programu w „czasie rzeczywistym”.
•
Są to programy działające na specyficznych zasobach sprzętowych warunkowanych ukierunkowaniem budowy
sprzętowej mse na konkretne zadanie.
Mikroprocesory i kontrolery
208
Cykl tworzenia oprogramowania dla mk jest zbliżony do cyklu tworzenia oprogramowania dla komputerów osobistych.
Obejmuje on trzy fazy:
•
napisanie kodu źródłowego,
•
przetłumaczenie kodu źródłowego na kod maszynowy danego mk,
•
uruchomienie programu w systemie docelowym (mse).
Faza pierwsza i druga wykonywana jest najczęściej przy zastosowaniu standardowego komputera osobistego. Komputer
osobisty w tej funkcji określany jest jako system rozwojowy (development system).
Faza trzecia realizowana jest na rzeczywistym mse zawierającym mk. System ten określany jest jako system docelowy
(target system).
Środowisko programistyczne IDE (Integrated Development Enviroment) zawiera między innymi:
•
specjalizowany edytor tekstowy,
•
kompilator,
•
linker,
•
symulator programowy,
•
debuger,
•
oprogramowanie sterujące programatorem sprzętowym służące do programowania mk.
Mikroprocesory i kontrolery
209
Rys. 120. Struktura programu użytkownika na mk
Po włączeniu napięcia zasilania w programie użytkownika musi się odbyć jednorazowa inicjalizacja, np. ustalenie trybu
pracy urządzeń peryferyjnych.
Właściwy program użytkownika jest realizowany
•
częściowo w niekończącej się pętli głównej,
•
a częściowo w obsługach przerwań.
Mikroprocesory i kontrolery
...
; deklaracje zmiennych i stałych
.ORG 0x00
jmp Reset
...
; wektor przerwania od resetu / początek programu
; np. wektory przerwań
Reset:
...
; kod procedury inicjalizacji po resecie
Program:
...
rjmp Program
; kod w pętli głównej programu
; powrót do początku programu
...
; np. kody obsług przerwań i funkcji
.EXIT
Listing 17. Pętla główna programu na mk ATxmega32A4 w asemblerze
210
Mikroprocesory i kontrolery
211
...
int main(void)
{
init();
// procedura inicjalizacji po resecie
/* Program główny (głowna pętla programu) */
while(1)
{
...
// kod programu
}
return(0);
}
// np. deklaracje funkcji i funkcji obsługi przerwań
...
Listing 18. Pętla główna programu na mk w języku C
Mikroprocesory i kontrolery
212
Języki niższego poziomu – asemblery
Asembler jest językiem niższego poziomu. Operuje on bezpośrednio na liście rozkazów (instrukcji) danej jc.
Każdy rozkaz z tej listy ma przyporządkowaną krótką nazwę zwaną mnemonikiem. Za ich pomocą programista tworzy
kod źródłowy.
Następnie program tłumaczący tłumaczy mnemoniki na odpowiadający im kod maszynowy. Stąd określenie „język
niższego poziomu”.
Program tłumaczący z języka asemblera określany jest jako asembler (assembler).
;adres
006a
006c
006e
0070
0072
kod maszynowy
mnemonik argumenty
DC01
CB01
BF77
BC01
CD01
movw
movw
andi
movw
movw
r26,r24
r24,r22
r27,0x7f
r22,r24
r24,r26
Listing. 19. Fragment pliku z raportem (plik LST) po asemblacji dla mk ATmega16
Mikroprocesory i kontrolery
213
Programowanie w języku asemblera stosuje się w trzech przypadkach:
•
gdy tworzona aplikacja jest bardzo prosta i zapis w języku asemblera nie sprawia kłopotu,
•
gdy nie dysponujemy kompilatorem C/C++ lub jego koszt byłby niewspółmierny do skali projektu,
•
gdy wymagania wobec szybkości działania programu i minimalizacji zajmowanej pamięci są szczególnie ostre.
Do zalet programowania w języku asemblera należy zaliczyć:
•
Możliwość pełnego panowania nad zasobami systemu. Programista ma nieograniczony dostęp do wszystkich
bloków na poziomie rejestrów i pojedynczych bitów.
•
Żadna z funkcji systemu nie jest ukryta, w szczególności możliwe jest dowolne, nawet nietypowe oddziaływanie na
obszar stosu i mechanizm przerwań.
•
Swobodne dysponowanie obszarem pamięci.
•
Efektywny program wynikowy, szybszy i zajmujący na ogół znacznie mniej pamięci niż równoważny program
zapisany w języku wysokiego poziomu.
•
Możliwość swobodnego wyboru formatu danych i precyzji obliczeń. Programista może samodzielnie definiować
wielobajtowe struktury danych do obliczeń o praktycznie dowolnej dokładności.
•
Możliwość dopasowania algorytmu do indywidualnych cech architektury mk oraz optymalizacji programu
wynikowego.
Mikroprocesory i kontrolery
Rys. 121. Cykl projektowania w języku asemblera
214
Mikroprocesory i kontrolery
215
Jednym z najpopularniejszych formatów nie przemieszczalnych programów binarnych (non-relocatable code) jest
format HEX opracowany przez firmę Intel (Intel-HEX). Przechowuje on kody instrukcji i dane (stałe) w postaci ciągu
rekordów zapisanych w kodzie ASCII.
Każdy z rekordów ma stały format:
:llaaaatt[dd....]cc
przy czym:
: - znak dwukropka, identyfikator początku każdego nowego rekordu,
ll – długość pola danych (dd....) wyrażona w bajtach,
aaaa – 16-bitowy adres miejsca pamięci, do którego mają być załadowane dane zapisane w rekordzie,
tt – kod typu rekordu: 00 oznacza rekord danych, 01 oznacza rekord terminalny (kończący plik HEX),
dd – ciąg bajtów danych,
cc – suma kontrolna obliczana jako różnica: 00H-(suma wszystkich bajtów rekordu) mod 256.
Podczas ładowania programu z pliku HEX do pamięci systemu wykonywane jest rozpakowanie kolejnych rekordów,
sprawdzanie sumy kontrolnej oraz przesłanie pola danych pod wskazany adres.
Mikroprocesory i kontrolery
:09000000020100B20030B2FD3231
:1001000075813075880175A801D2AF20000A90FE74
:1001100000E090F900F0800890FB00E090F900F01A
:0201200080E974
:00000001FF
Listing 20. Przykład pliku binarnego porty.hex dla mk P89V51RC2
Rys. 122. Zawartość bufora po wgraniu pliku binarnego porty.hex
216
Mikroprocesory i kontrolery
217
Programowanie w językach wyższego poziomu
Języki programowania wyższego poziomu są w zasadzie niezależne od listy instrukcji konkretnej jc. Programista
operuje rozkazami wykonującymi bardziej złożone operacje niż język asemblera.
Program tłumaczący z języka programowania wyższego rzędu na kod maszynowy nosi nazwę kompilatora (compiler).
W języku wyższego poziomu każda linia programu tłumaczona jest na kilka, kilkanaście, a czasami nawet na kilkadziesiąt
rozkazów asemblera. Ten ostatni przypadek ma miejsce np. wówczas, gdy w programie zastosowane są działania na
liczbach zmiennoprzecinkowych, zaś jc nie wspiera operacji zmiennoprzecinkowych.
Dominującym językiem wyższego poziomu jest język C. Obecnie obowiązuje jego standard ANSI C. Jednak większość
kompilatorów zawiera dodatkowe rozszerzenia tego języka związane ze specyficznymi wymaganiami przy
programowaniu mk.
Najczęściej są to następujące rozszerzenia:
•
wprowadzone są nowe typy zmiennych, np. zmienne bitowe,
•
przy deklaracji zmiennych wprowadzane są mechanizmy umożliwiające umiejscowienie (alokację) zmiennej w
określonym miejscu przestrzeni adresowej,
•
wprowadzone są nowe słowa kluczowe języka C (np. słowo interrupt jest używane przy deklaracji funkcji
wywoływanych przy wystąpieniu przerwania).
Mikroprocesory i kontrolery
218
Zalecane jest aby pisząc program w języku C na mk stosować następujące rozwiązania:
•
fragmenty kodu źródłowego związane z obsługą specyficznych układów peryferyjnych umieszczać w wydzielonych
modułach,
•
typy zmiennych deklarować nie bezpośrednio przy deklaracji zmiennych, ale poprzez słowo kluczowe typdef,
•
alokacji zmiennych nie dokonuje się bezpośrednio przy deklaracji zmiennych, lecz za pomocą dyrektyw preprocesora,
głównie przez użycie tzw. modelu pamięci,
•
alokacja funkcji służących do obsługi przerwań (tzw. rozprowadzanie przerwań) odbywa się w wydzielonym zbiorze,
często napisanym w języku asemblera.
Tworzenie programu w języku C przebiega według tego samego schematu, co cykl projektowy programu w języku
asemblera.
Pliki źródłowe programu zwykle oznacza się rozszerzeniem C.
Literatura dotycząca języka C:
Brian W. Kernighan, Dennis M. Ritchie: „Język ANSI C”, Wydawnictwo Naukowo-Techniczne, Warszawa 1994.
Mikroprocesory i kontrolery
219
...
#define II 250
...
volatile uint16_t DDSbuffer[II];
volatile register uint8_t ii asm ("r17");
volatile register uint8_t Tsvalue asm ("r18);
...
// The interrupt response time – it takes 5 CPU clock cycles
ISR (TCC0_CCD_vect)
// – 3 clock cycles
{
// – 12 clock cycles
// – 10 clock cycles
TCC0_CCD += Tsvalue;
DACB_CH0DATA = DDSbuffer[ii];
// – 15 clock cycles
asm ("inc r17 \n" : : );
// - 1 clock cycle
if(ii > II) asm("dec r17 \n" : : );
// - 3 clock cycles
}
// – 23 clock cycles
Listing 21. Fragment pliku C z obsługą przerwania dla TCC0 compare channel D interrupt dla mk ATxmega32A4
Mikroprocesory i kontrolery
220
asm ("inc r17 \n" : : );
ISR (TCC0_CCD_vect)
{
25c:
1f 92
push
r1
25e:
0f 92
push
r0
; 63
260:
0f b6
in
r0, 0x3f
262:
0f 92
push
r0
264:
08 b6
in
r0, 0x38
; 56
266:
0f 92
push
r0
268:
11 24
eor
r1, r1
; 56
26a:
18 be
out
0x38, r1
26c:
8f 93
push
r24
26e:
9f 93
push
r25
270:
ef 93
push
r30
272:
ff 93
push
r31
DACB_CH0DATA = DDSbuffer[ii];
// a new value at the DAC output
274:
e1 2f
mov
r30, r17
276:
f0 e0
ldi
r31, 0x00
; 0
278:
ee 0f
add
r30, r30
27a:
ff 1f
adc
r31, r31
; 0
27c:
e0 50
subi
r30, 0x00
27e:
f0 4e
sbci
r31, 0xE0
; 224
280:
80 81
ld
r24, Z
; 0x01
282:
91 81
ldd
r25, Z+1
284:
80 93 38 03
sts
0x0338, r24
288:
90 93 39 03
sts
0x0339, r25
TCC0_CCD += Tsvalue;
// the next interrupt service for Ts
28c:
80 91 2e 08
lds
r24, 0x082E
290:
90 91 2f 08
lds
r25, 0x082F
294:
82 0f
add
r24, r18
296:
91 1d
adc
r25, r1
298:
80 93 2e 08
sts
0x082E, r24
29c:
90 93 2f 08
sts
0x082F, r25
2a0:
13 95
inc
// ii++;
r17
if(ii > II) asm ("dec r17 \n" : : );
// ii--;
2a2:
1b 3f
cpi
r17, 0xFB
; 251
; 0x2a8
2a4:
08 f0
brcs
.+2
<__vector_19+0x4c>
2a6:
1a 95
dec
r17
}
2a8:
2aa:
2ac:
2ae:
2b0:
2b2:
2b4:
2b6:
2b8:
2ba:
2bc:
ff
ef
9f
8f
0f
08
0f
0f
0f
1f
18
91
91
91
91
90
be
90
be
90
90
95
Listing 22. Fragment pliku lss uzyskanego po kompilacji i asemblacji kodu z listingu 2.3
pop
pop
pop
pop
pop
out
pop
out
pop
pop
reti
r31
r30
r25
r24
r0
0x38, r0
r0
0x3f, r0
r0
r1
; 56
; 63
Mikroprocesory i kontrolery
221
Uruchamianie programu mk
Definicja uruchamiania programów:
Uruchamianie programów jest procesem eliminacji błędów i wprowadzania zmian do programu
użytkowego w celu uzyskania bezbłędnej i zgodnej z założeniami pracy systemu w danym zastosowaniu.
Uruchamianie prototypowych mse z mk jest trudnym procesem.
Wynika to z dwóch podstawowych przyczyn:
•
mk mają wiele wbudowanych bloków funkcjonalnych (pamięci i układów peryferyjnych), do których dostęp w czasie
pracy systemu jest utrudniony lub niemożliwy,
•
sterowniki z wbudowanymi mk są przeznaczone do pracy w czasie rzeczywistym. Testowanie systemu w czasie
rzeczywistym, we współpracy z rzeczywistym otoczeniem, bez naruszenia relacji czasowych sygnałów, wymaga
narzędzi diagnostycznych, które nie zakłócają pracy systemu.
Zatem opracowano wiele metod stosowanych w tym celu. Metody te dzielą się na dwie grupy:
•
bez wykorzystania systemu docelowego,
•
z wykorzystaniem systemu docelowego.
Mikroprocesory i kontrolery
222
W skład grupy metod z wykorzystaniem systemu docelowego wchodzą:
•
metoda prób i błędów - polega na wielokrotnym programowaniu mk i za każdym razem obserwacji działania
programu w mse i jego korekcji na podstawie tych obserwacji, aż do uzyskania prawidłowego działania mk,
•
zastosowanie monitorów programowych (monitors) i programów śledzących (debuggers) – są najczęściej
stosowane.
- Monitory są instalowane w pamięci programu mk i kontrolują wykonywanie właściwego programu użytkowego
oraz komunikują się z systemem rozwojowym poprzez złącze szeregowe.
- Natomiast debugery pracują w przyłączonych do systemu komputerach PC,
•
zastosowanie emulatora sprzętowego mk (ICE – in-circuit emulators) – polega to na umieszczeniu, na czas
uruchamiania programu, w podstawce na mk sondy połączonej ze specjalnym układem sprzętowym, który emuluje
działanie mk. Emulator wiernie odtwarza wszystkie właściwości mk łącznie z jego wszystkimi układami peryferyjnymi
oraz pamięcią,
•
wykorzystanie specjalnych zasobów wewnętrznych mk – niektóre mk zwłaszcza 32-bitowe posiadają specjalne
zasoby sprzętowe przeznaczone do wspierania procesu uruchomiania programu. Zasoby te oferują w przybliżeniu
wszystkie te możliwości co emulator sprzętowy, między innymi ustawienie pułapek oraz pracę krokową. Zasoby te
komunikują się przez dedykowane wyprowadzenia mk. Są one dostępne wyłącznie na etapie uruchamiania programu,
zatem nie są wykorzystywane przez normalny program użytkowy.
Mikroprocesory i kontrolery
223
Rys. 123. Symulator dla mk ADuC812
Mikroprocesory i kontrolery
Rys. 124. Środowisko IDE dla mk Rabitt 2000 i zestawu Rabbit 2000 TCP/IP
224
Mikroprocesory i kontrolery
225
Rys. 125. Środowisko do programowania mk ST72215G2
Mikroprocesory i kontrolery
226
Sposoby programowania mk z pamiecią FLASH
Obecnie prawie wszystkie produkowane mk są dostępne w wersji z pamięcią programu typu FLASH. Zaletą pamięci
FLASH (pamięć błyskowa) jest możliwość wielokrotnego jej programowania bezpośrednio w systemie docelowym (bez
konieczności wyciągania mk z podstawki) – ISP (In-System Programmable).
Możemy wyróżnić dwa tryby programowania mk:
• tryb równoległy – wymagający umieszczenia mk w programatorze,
• tryb szeregowy (ISP).
Tryb równoległy
Wadą trybu równoległego programowania jest konieczność wyciagnięcia mk z mse i umieszczenie go w programatorze.
Zaletą, np. dla mk firmy Atmel, jest to, iż mk nie dające się z jakichkolwiek przyczyn zaprogramować w trybie ISP, dadzą
się programować w trybie równoległym.
Mikroprocesory i kontrolery
227
Przykład programowania w trybie równoległym
Charakterystyka algorytmu AT051 dla mk AT89Cx051:
•
U5=5V tylko, Vpp=5V lub Vpp=12V.
•
Adres dla odczytu sygnatury to: 0, 1, 2.
•
Algorytm zawiera:
- operację odczytu pamięci,
- operację kasowania układu,
- operację programowania i weryfikacji pamięci,
- programowania bitów security, dwa bity tylko programowanie - bez odczytu.
Rys. 126. Konfiguracja połączeń przy użyciu algorytmu AT051
Mikroprocesory i kontrolery
Tabela 9. Tryby pracy mikrokontrolera dla algorytmu AT051
228
Mikroprocesory i kontrolery
229
Rys. 127. Schemat ogólny algorytmu AT051
Mikroprocesory i kontrolery
230
Tryb programowania szeregowego (ISP)
Generalnie procedura programowania szeregowego mk jest następująca:
•
Wprowadzenie mk w tryb programowania. Odbywa się to podczas resetu mk poprzez podanie na odpowiednie
końcówki określonej sekwencji sygnałów lub odpowiednich poziomów napięć.
•
Następnie poprzez dedykowany do programowania interfejs szeregowy wprowadza się szeregowo odpowiednie
rozkazy sterujące procesem programowania pamięci.
- Część rozkazów dotyczy zapisu i odczytu danych do/ze specjalnych rejestrów konfiguracyjnych zawartych w
pamięci FLASH odpowiedzialnych za konfigurację mk (tryb pracy oscylatora, zabezpieczenia przed odczytem, itd.).
Rejestry te dostępne są wyłącznie w trybie programowania mk.
- Pozostałe rozkazy są związane z zapisem i odczytem danych z pamięci FLASH oraz z jej kasowaniem.
•
Na zakończenie programowania następuje odpowiednia sekwencja sygnałów lub zdjęcie odpowiednich napięć
powodujące wyjście z trybu programowania.
Mikroprocesory i kontrolery
231
Ze względu na używany interfejs szeregowy możemy wyróżnić następujące sposoby programowania ISP:
• z wykorzystaniem interfejsu SPI (mk rodziny AVR i ST7),
• oparte na interfejsie JTAG (IEEE 1149.1) (mk ATmega16, XMEGA),
• bazując na dedykowanym interfejsie szeregowym (mk rodziny PIC18) i interfejsie PDI (mk rodziny AVR
XMEGA),
• opierając się na interfejsie UART lub USB i programie ładującym (loader) zawartym w dedykowanej
pamięci ROM lub FLASH mk (np. UART – XMEGA, USB – zestawy uruchomieniowe Arduino,
Rasbery Pi, itd.),
Mikroprocesory i kontrolery
Przykład programowania w trybie szeregowym z wykorzystaniem interfejsu SPI
Rys. 128. Sygnały w trybie programowania szeregowego z wykorzystaniem interfejsu SPI
232
Mikroprocesory i kontrolery
233
Aby zaprogramować lub zweryfikować pamięć programu mk należy wykonać następującą sekwencję:
1. Włączyć napięcie zasilania, w tym czasie na linii RESET oraz SCK musi być stan niski.
2. Odczekać 20 ms i włączyć tryb szeregowego programowania wysłając za pomocą interfejsu SPI komendę
Programing Enable.
3. Wysłać odpowiednie komendy programujące i odczekiwać czasy potrzebne na zaprogramowanie lub komendy
związaną z odczytem.
4. Na zakończenie programowania lub weryfikacji układu ustawić sygnał RESET w stan wysoki, aby przejść w
normalny tryb pracy mk.
Mikroprocesory i kontrolery
Tabela 10. Lista instrukcji obsługi mk ATmega16 w trybie programowania szeregowego
234
Mikroprocesory i kontrolery
235
Rys. 129. Przebiegi czasowe dla interfejsu SPI w trybie programowania
Mikroprocesory i kontrolery
Rys 130. Schemat ideowy programatora STK200
236
Mikroprocesory i kontrolery
237
Programowanie w trybie szeregowym z wykorzystaniem interfejsu JTAG
Interfejs JTAG (IEEE 1149.1) jest wykorzystywany do:
•
testowania poprawności połączeń na płytce drukowanej (oczywiście w obrębie układu scalonego jakim jest mk)
bazując na ścieżce brzegowo-krawędziowej,
•
programowania pamięci FLASH i EEPROM oraz bitów zabezpieczających,
•
debagowania struktury wewnętrznej mk.
Interfejs JTAG składa się z czterech linii:
•
TMS (Test Mode Select) służy do sterowania kontrolerem TAP interfejsu JTAG,
•
TCK (Test Clock) synchronizuje transmisje danych szeregowych,
•
TDI (Test Data In) wejście danych szeregowych wprowadzanych do rejestru instrukcji lub rejestru danych (łańcucha
ścieżki brzegowo-sterującej),
•
TDO (Test Data Out) szeregowe wyście danych z rejestru instrukcji lub rejestru danych.
Mikroprocesory i kontrolery
Rys. 131. Schemat blokowy układu interfejsu JTAG
238
Mikroprocesory i kontrolery
239
Rys. 132. Schemat programatora JTAG dla mk AT91SAM7S64 firmy Atmel
Mikroprocesory i kontrolery
240
Programowanie w trybie szeregowym z wykorzystaniem dedykowanego interfejsu
Tryb programowania bazujący na dedykowanym interfejsie szeregowym mk PIC18F452 pozwala na wpisanie do
pamięci programu danych oraz programu użytkownika, danych pod specjalne lokacje typu ID i do rejestrów
konfiguracyjnych.
Istnieją dwie metody programowania mk:
•
normalne programowanie – dla napięć zasilania od 2,2V do 5,5V i napięcia programowania VPP dołączanego do linii
resetu MCLR wynoszącego 13V ±0,5V,
•
programowanie niskonapięciowe – dla napięć zasilania od 4,5V do 5,5V, nazywane w skrócie LVP (Low Voltage
ICSP, gdzie ICSP – In-Circuit Serial Programmable).
W trybie programowania wykorzystuje się trzy linie portu B:
•
RB5 (PGM) linia wejściowa wykorzystywana wyłącznie w trybie LVP,
•
RB6 (SCLK) wejście zegara,
•
RB7 (SDATA) wejście/wyjście danych,
•
pin resetu MCLR wybierający tryb programowania i dostarczający napięcia do programowania,
•
VDD zasilanie i VSS masa.
Mikroprocesory i kontrolery
241
W tym trybie mamy dodatkowy dostęp do
•
siedmiu rejestrów indentyfikacyjnych ID (adresy od 200000h do 200007h),
•
siedmiu dwubajtowych rejestrów konfiguracyjnych (adresy 300000h do 30000Dh),
•
dwóch rejestrów identyfikujących dany układ (adresy 3FFFFE i 3FFFFF) wykorzystywanych przez programatory.
b)
a)
Rys. 133. Sposoby wejścia w tryb programowania: a) tryb normalny, b) tryb niskonapięciowy
Mikroprocesory i kontrolery
242
W trybie programowania pamięć programu od 000000h do 3FFFFFh jest adresowana za pomocą wskaźnika tablicy,
składającego się z trzech rejestrów umieszczonych w pamięci danych mk.:
•
TBLPTRU (adres[21:16]),
•
TBLPTRH (adres[15:8])
•
TBLPTRL (adres[7:0])
Wszystkie instrukcje wysyłane do mk są 20-bitowe, składające się z 4-bitowego rozkazu i 16-bitowego argumentu
zależnego od typu rozkazu.
W zależności od 4-bitowego rozkazu, 16-bitowy argument reprezentuje 16-bitową daną wejściową lub 8 bitów danej
wejściowej i 8 bitów danej wyjściowej.
Mikroprocesory i kontrolery
243
Tabela 11. Zestawienie komend obsługi trybu programowania mk PIC18F452
Mikroprocesory i kontrolery
244
Polecenie Core Instruction ‘0000’ służy do
•
wprowadzenia 16-bitowej instrukcji (np. MOLVW 3Ch – 16-bitowy kod: 0E 3C)
•
jej wykonania przez mk.
Pozostałe rozkazy są związane z obsługą 24-bitowego wskaźnika tablicowego.
Dodatkowo korzysta się z dwóch rejestrów o adresach:
•
3C0004h – rejestr opcji kasowania,
•
3C0006h – rejestr trybu programowania.
Kasowanie i programowanie mk polega na odpowiednich wpisach do wskaźnika tablicowego i do rejestrów opcji
kasowania i trybu programowania, wykorzystując przy tym rozkazy mk (BSF, BCF, MOVLW, MOVWF, CLRF, NOP).
Mikroprocesory i kontrolery
245
Rys. 134. Przebieg czasowy rozkazu Table Write, post increment by 2 składającego się
z kodu rozkazu ‘1101’ i 16-bitowej danej 3C 40.
Mikroprocesory i kontrolery
246
Programowanie w trybie szeregowym z wykorzystaniem interfejsu UART (RS232)
Metoda programowania szeregowego korzystająca z interfejsu UART i zawartego w pamięci FLASH mk programu
ładującego (boot loader).
Program ładującego obsługuje interfejs UART:
•
sterowanie komunikacją oraz interpretacja rozkazów,
•
sterowanie kontrolerem pamięci FLASH (programowanie, kasowanie i odczyt pamięci FLASH).
Pamięć programu mk P89V51RC2 jest podzielona na dwa bloki.
•
Blok 0 ma wymiar 32 kB i jest podzielony na 256 sektorów, z których każdy składa się ze 128 B.
•
Blok 1 o wymiarze 8 kB zawiera kod programu ładującego.
Rys. 135. Interfejs RS232 z kontrolą linii RST za pomocą sygnału DTR
Mikroprocesory i kontrolery
247
Programowanie w trybie szeregowym z wykorzystaniem interfejsu USB
Cechy metody wykorzystującej interfejs USB (np. dla mk AT91SAM7S firmy Atmel z 32-bitowym
rdzeniem ARM7 TDMI):
•
w dodatkowej pamięci programu mk znajduje się program bootujący,
•
po inicjalizacji mk konfiguruje on szeregowy port Debug Unit (DBGU) i port USB,
•
następnie uruchamiany jest program SAM-BA Boot, który oczekuje na polecenia z portu DBGU
•
lub z interfejsu USB.
Mikroprocesory i kontrolery
Rys. 136. Diagram przedstawiający sposób wejścia w tryb programowania mk za pomocą interfejsu USB
248
Mikroprocesory i kontrolery
249
Mikrokontrolery z rdzeniem ARM
Informacje podstawowe o układach z rdzeniem ARM:
•
ARM – Advanced Risc Machine (wcześniej Acron Risc Machine) firma, która stworzyła rdzeń ARM (sama nie
produkuje układów scalonych).
•
Procesor ARM jest sprzedawany innym firmom w postaci licencji na IP (Intellectual Property).
•
Wiele firm (STMicroelectronics, NXP, Atmel, Motorola i inne) produkuje mikrokontrolery oparte na rdzeniu ARM.
•
Ze względu na zoptymalizowanie architektury pod względem ilości zajmowanej powierzchni na płytce krzemowej
procesory ARM bardzo chętnie są implementowane w układach programowalnych FPGA np. firmy Actel
•
Idealnie nadają się do systemów SoC (System on a Chip).
Mikroprocesory i kontrolery
250
Historia rozwoju procesorów ARM:
•
2
ARMv1 – 1985. (3,0 µm, 2 warstwy metalizacji, 25000 tranzystorów, 6 MHz, 20 mW/MHz, 50 mm ). Z instrukcji
dostępne były jedynie podstawowe pozwalające przetwarzać dane, nie było mnożników. Była wyposażona jednak w
instrukcje skoku i programowych przerwań, co dostosowywało ją do implementowania systemów operacyjnych.
•
ARMv2 - 1986. Implementowana w procesorach wykorzystywanych w rzeczywistych urządzeniach. (30 000 tr. (Intel
80286 134 000 tr., 68,7 mm2). Wydajność > Intela 286. 32-bitowa szyna danych, 26-bitowa szyna adresowa (64 MB –
obszar adresowania). Została wyposażona w instrukcje mnożenia oraz mnożenia i dodawania (MAC). Dołożono
wspomaganie koprocesora oraz dwa rejestry w trybie pracy obsługi szybkiego przerwania tzw. FIQ.
•
ARMv3 - Rozszerzona do 32-bitowej szyny adresowej. Dołożono rejestry (rejestry statusowe), które jeszcze bardziej
usprawniły współprace z systemami operacyjnymi, przełączaniem kontekstu oraz obsługą wyjątków. Dołożono także
szybką pamięć podręczną (cache) co znacznie zwiększyło wydajność.
•
ARMv4 – Dołożono możliwość wykonywania instrukcji na połówkach słowa (16-bitowych) oraz instrukcji 16bitowych - Thumb 1. Wzbogacona została także lista trybów pracy o tryb użytkownika (user mode), który zapewnia
ograniczony dostęp do pamięci i zabrania bezpośredniego dostępu do urządzeń zewnętrznych. Pewne zmiany także
nastąpiły w wykonywaniu istniejących instrukcji.
•
ARMv5 - Dalsze zoptymalizowanie instrukcji, polepszenie obsługi instrukcji 16-bitowych - Thumb 2. Zostały
dołożone instrukcje wspomagające operacje DSP (Digital Signal Processing) oraz po raz pierwszy zastosowano
technologie wspomagającą obsługę programów Java – Jazelle.
Mikroprocesory i kontrolery
251
Rys. 137. Przegląd rdzeni ARM
Mikroprocesory i kontrolery
Rys. 138. Architektury rdzeni ARM
252
Mikroprocesory i kontrolery
253
Przegląd mikrokontrolerów z rdzeniem ARM
Tabela 12. Zestawienie mikrokontrolerów z rdzeniem ARM firmy Atmel
Nazwa
Rdzeń
Pamięć
cache
AT91SAM7S
ARM7TDMI
brak
32 – 512 kB
8 – 64 kB
55
AT91SAM7SE
ARM7TDMI
brak
32 – 512 kB
8 – 32 kB
48
AT91SAM7A
ARM7TDMI
brak
0 – 256 kB
4 – 32 kB
30 – 60
AT91SAM7X
ARM7TDMI
brak
128 – 512 kB
32 – 128 kB
55
AT91SAM9261
ARM926EJ-S
2x16 kB
brak
160 kB
180
AT91SAM9263
ARM926EJ-S
2x16 kB
brak
96 kB
240
ARM920T
2x16 kB
brak
16 kB
180
AT91RM9200
Wbudowana Wbudowana
pamięć Flash pamięć RAM
Częst.
(MHz)
Istotne peryferia
USB, UART, ADC,
PDC
USB, UART, ADC,
SDRAM, MPU
CAN, UART, ADC,
PDC
Ethernet, USB, CAN,
PDC
USB Host, LCD,
SDRAM, MMU
Ethernet, CAN, USB
Host, LCD, SDRAM
Ethernet, USB Host,
SDRAM, MMU
Mikroprocesory i kontrolery
254
Tabela 13. Zestawienie mikrokontrolerów z rdzeniem ARM firmy NXP
Nazwa
Rdzeń
LPC2101…3
LPC2104…6
LPC2114/2124
ARM7TDMI-S
ARM7TDMI-S
ARM7TDMI-S
Pamięć
cache
brak
brak
brak
Wbudowana Wbudowana Częst.
pamięć Flash pamięć RAM (MHz)
8 – 32 kB
2 – 8 kB
70
128 kB
16 – 32 kB
60
128 – 256 kB
16 kB
60
Istotne peryferia
LPC2119/2129
ARM7TDMI-S
brak
128 – 256 kB
16 kB
60
LPC213x
ARM7TDMI-S
brak
32 – 512 kB
8 – 32 kB
60
LPC214x
ARM7TDMI-S
brak
32 – 512 kB
8 – 40 kB
60
LPC2194
ARM7TDMI-S
brak
256 kB
16 kB
60
LPC2210/2220
ARM7TDMI-S
brak
brak
16/64 kB
60/75
LPC2212/2214
ARM7TDMI-S
brak
128/256 kB
16 kB
60
LPC2290
ARM7TDMI-S
brak
brak
16/64 kB
60/72
LPC2292/2294
ARM7TDMI-S
brak
16 kB
60
LPC2364/64/68
ARM7TDMI-S
brak
32/58/58 kB
72
Ethernet, USB, CAN, ADC,
DAC, 70 I/O, SD/MMC
LPC2880/88
ARM7TDMI
8 kB
1024 kB
60
USB, ADC, LCD, SD/MMC,
ster. pamięci
LPC3180
ARM926EJ-S
2x32 kB
256 kB
128/256/512
kB
128/256/512
kB
brak
UART, PWM, SPI, I2C, 32 I/O
UART, ADC, PWM, SPI, I2C,
46 I/O
UART, CAN, ADC, PWM,
SPI, I2C, 46 I/O
UART, ADC, PWM, DAC,
SPI, I2C, 46 I/O
USB, UART, ADC, PWM,
DAC, SPI, I2C, 45 I/O
UART, CAN, ADC, PWM,
SPI, I2C, 46 I/O
UART, ADC, PWM, SPI,
I2C,112 I/O, sterownik pamięci
UART, ADC, PWM, SPI,
I2C,112 I/O, sterownik pamięci
UART, CAN, ADC, PWM,
SPI, 76 I/O, sterownik pamięci
UART, CAN, ADC, PWM,
SPI,112 I/O, sterownik pamięci
64 kB
208
USB, SDR/DDR SDRAM,
NAND Flash, SD
UART, ADC, SPI, I2C, 32 I/O
Mikroprocesory i kontrolery
255
Tabela 14. Zestawienie mikrokontrolerów z rdzeniem ARM firmy STMicroelectronics
Nazwa
Rdzeń
ARM7TDMI
ARM7TDMI
ARM7TDMI
ARM7TDMI
ARM7TDMI
Pamięć
cache
brak
brak
brak
brak
brak
Wbudowana
pamięć Flash
0/128/256 kB
64/128/256 kB
64/128/256 kB
64 kB
128/256 kB
STR710xx
STR711xx
STR712xx
STR715xx
STR730xx
Wbudowana Częst.
pamięć RAM (MHz)
32/64 kB
66
16/32/64 kB
66
16/32/64 kB
66
16 kB
66
16 kB
36
STR731xx
STR735xx
STR736xx
STR750xx
ARM7TDMI
ARM7TDMI
ARM7TDMI
ARM7TDMI
brak
brak
brak
brak
64/128/256 kB
128/256 kB
64/128/256 kB
64/128/256 kB
16 kB
16 kB
16 kB
16 kB
36
36
36
60
STR751xx
ARM7TDMI
brak
64/128/256 kB
16 kB
60
STR752xx
ARM7TDMI
brak
64/128/256 kB
16 kB
60
STR755xx
ARM7TDMI
brak
64/128/256 kB
16 kB
60
STR910xx
ARM966E-S
różna
256 kB
64 kB
96
STR911xx
ARM966E-S
różna
256/512 kB
96 kB
96
STR912xx
ARM966E-S
różna
256/512 kB
64/96 kB
96
Istotne peryferia
UART, USB, CAN, ADC, I2C, 48 I/O,
ster. pamięci
UART, USB, ADC, I2C, PWM, 30 I/O
UART, CAN, ADC, I2C, PWM, 32 I/O
UART, ADC, I2C, PWM, 32 I/O
UART, CAN, ADC, I2C, PWM, DMA,
112 I/O
UART, CAN, ADC, I2C, PWM, DMA,
72 I/O
UART, ADC, I2C, PWM, DMA, 112 I/O
UART, ADC, I2C, PWM, DMA, 72 I/O
UART, USB, CAN, ADC, I2C, PWM,
DMA, 72 I/O
UART, USB, ADC, I2C, PWM, DMA, 38
I/O
UART, CAN, ADC, I2C, PWM, DMA,
38 I/O
UART, ADC, I2C, PWM, DMA, 38/72
I/O
UART, CAN, ADC, I2C, PWM, DMA,
40/80 I/O, ster. pamięci
UART, USB, CAN, ADC, I2C, PWM,
DMA, 40/80 I/O
UART, Ethernet, USB, CAN, ADC, I2C,
PWM, DMA,80 I/O, ster. pamięci
Mikroprocesory i kontrolery
256
Właściwości rdzenia ARM7TDMI:
•
Jednostka typu RISC (Reduced Instruction Set Computer).
•
Ujednolicone instrukcje o stałej długości.
•
Tylko proste tryby adresowania.
•
32 ujednolicone rejestry 32-bitowe ogólnego przeznaczenia.
•
Architektura load/store – specjalne instrukcje do operacji na pamięci, pozostałe działają na rejestrach.
•
Warunkowe wykonywanie większości instrukcji.
•
Przetwarzanie potokowe – 3 stopniowe (Fetch, Decode, Execute).Dwa tryby pracy (instrukcje): ARM (32-bitowe) i
Thumb (16-bitowe).
•
Możliwość przełączania się pomiędzy trybami – instrukcja BX.
•
Daje to możliwość optymalizacji działania systemu pod względem szybkości, objętości programu oraz poborem mocy.
•
Większość instrukcji 32-bitowych ma swoich odpowiedników 16-bitowych.
•
Tryb Thumb daje ok. 30% zysk pamięci programu, natomiast tryb ARM daje 40% zysk wydajności.
Mikroprocesory i kontrolery
257
Tryby pracy:
1. USER – dostępne wszystkie rejestry, wykonujemy nasz program,
2. IRQ – obsługa przerwania zwykłego,
3. FIQ – obsługa szybkiego przerwania,
4. SUPERVISOR – przy starcie systemu,
5. ABORT – gdy odwołujemy się do nieistniejącego obszaru pamięci,
6. UNDEF – odwołanie się do instrukcji nierozpoznawalnej przez procesor,
7. SYSTEM – wykorzystywany przez systemy operacyjne.
Mikroprocesory i kontrolery
Rys. 139. Pełny schemat blokowy procesora ARM7TDMI
258
Mikroprocesory i kontrolery
259
Rys. 140. Schemat blokowy rdzenia ARM7TDMI
Mikroprocesory i kontrolery
Rys. 141. Organizacja rejestrów w trybie ARM
260
Mikroprocesory i kontrolery
261
Tabela 15. Zestawienie instrukcji dla trybu ARM
Instrukcja
Operacja
Instrukcja Operacja
MOV
ADD
SUB
RSB
CMP
TST
AND
EOR
MUL
SMULL
SMLAL
MSR
B
BX
LDR
LDRSH
LDRSB
LDRH
LDRB
LDRBT
LDRT
LDM
SWP
MCR
LDC
Przenieś
Dodaj
Odejmij
Odejmij z odwróceniem
Porównaj
Testuj (znak)
Logiczne AND
Logiczne XOR
Mnożenie
Mnożenie typów Signed Long
Mnożenie Signed Long z akumulacją
Przenieś do rejestru statusu
Skok
Skok ze zmianą zestawu instrukcji
Pobierz wartość Word
Pobierz wartość Signed Halfword
Pobierz wartość Signed Byte
Pobierz wartość Half Word
Pobierz wartość Byte
Pobierz wartość Byte z translacją
Pobierz wartość Word z translacją
Pobierz wielokrotnie
Zamień miejscami wartości Word
Przenieś do koprocesora
Pobierz z koprocesora
CDP
MVN
ADC
SBC
RSC
CMN
TEQ
BIC
ORR
MLA
UMULL
UMLAL
MRS
BL
SWI
STR
STRH
STRB
STRBT
STRT
STM
SWPB
MRC
STC
Przetwarzanie danych koprocesora
Nie przenoś
Dodaj z przeniesieniem
Odejmij z przeniesieniem
Odejmij z odwróceniem i przeniesieniem
Porównaj zanegowane
Testuj równoważność
Wyzerowanie bitu
Logiczne OR
Mnożenie z akumulacją
Mnożenie typów Unsigned Long
Mnożenie Unsigned Long z akumulacją
Przenieś z rejestru statusu
Skok z linkiem
Przerwanie programowe
Zachowaj wartość Word
Zachowaj wartość Half Word
Zachowaj wartość Byte
Zachowaj wartość Byte z translacją
Zachowaj wartość Word z translacją
Zachowaj wielokrotnie
Zamień miejscami wartości Byte
Przenieś z koprocesora
Zachowaj z koprocesora
Mikroprocesory i kontrolery
262
Mikrokontrolery rodziny AT91SAM7
Cechy i parametry mikrokontrolera AT91SAM7S64:
•
Oparty na rdzeniu ARM7TDMI, taktowanie do 55 MHz.
•
Wbudowana szybka pamięć Flash o wielkości 64 kB, jednocyklowym dostępie przy prędkości do 30 MHz,
maksymalnej liczbie 10000 zapisów i zabezpieczeniem zawartości przed odczytem.
•
Wbudowana szybka pamięć SRAM o wielkości 16 kB, z jednocyklowym dostępem przy maksymalnej prędkości pracy
procesora.
•
Rozbudowany kontroler pamięci.
•
Kontroler resetu oparty na blokach Power-on Reset i Brown-out Detector.
•
Generator zegarowy z oscylatorem RC i układem powielania częstotliwości PLL, dzięki czemu możliwe jest
stosowanie rezonatorów 3 – 20 MHz.
•
Kontroler zarządzania energią.
•
Zaawansowany kontroler przerwań, przerwania indywidualnie maskowane, 8 poziomów priorytetów, dwa przerwania
zewnętrzne i jedno szybkie.
•
Układ nadzorujący Watchdog.
•
Timer czasu rzeczywistego oparty na wbudowanym układzie RC.
•
Kontroler portów ogólnego przeznaczenia GPIO, zawierający 32 linie I/O multipleksowane z blokami peryferyjnymi.
•
11-kanałowy kontroler DMA.
•
Port USB 2.0 Full Speed z 328 bajtowym rejestrem FIFO.
•
Dwa układy USART, w tym jeden w konfiguracji Full Modem.
Mikroprocesory i kontrolery
263
Cechy i parametry mikrokontrolera AT91SAM7S64 – ciąg dalszy:
•
Interfejs szeregowy SPI.
•
Jeden 3-kanałowy 16-bitowy timer/licznik z trzema zewnętrznymi wejściami zegarowymi i możliwością generowania
przebiegu PWM.
•
Cztero-kanałowy 16-bitowy układ PWM.
•
Dwu-przewodowy interfejs TWI (inaczej nazywany I2C).
•
8-kanałowy 10-bitowy przetwornik A/C.
•
SAM-BA Boot Assistant – wbudowany bootloader ułatwiający programowanie poprzez RS232 lub USB.
•
Kontroler magistrali 1149.1 (JTAG) z rejestrem brzegowym obejmującym wszystkie wyprowadzenia cyfrowe.
•
Linie I/O pozwalają na pracę z napięciem 5 V, cztery linie o wysokiej wydajności prądowej (16 mA).
•
Zasilanie 3,3 V, wbudowany regulator 1,8 V do zasilania rdzenia.
•
Pobór prądu przy zasilaniu rdzenia 1,85 V i pozostałych układów 3,3 V:
– stan aktywny (taktowanie 50 MHz, większość bloków włączona) – ok.30 mA,
– stan minimalnego poboru prądu (taktowanie 500 Hz) – ok. 30 µA.
Mikroprocesory i kontrolery
Rys. 142. Schemat blokowy mikrokontrolera AT91SAM7S64
264
Mikroprocesory i kontrolery
265
Rys. 143. Mapa pamięci mk AT91SAM7S64
Mikroprocesory i kontrolery
266
Narzędzia IDE dla mikrokontrolerów z rdzeniem ARM7
Dostępne środowiska programistyczne IDE można podzielić na dwie główne kategorie:
•
komercyjne –Aplikacje te są rozbudowanymi narzędziami, udostępniającymi wiele przydatnych funkcji i ułatwień.
Zawierają dużo dodatkowych bibliotek upraszczających pisanie programów. Poszczególne części środowiska
programistycznego, czyli edytor, kompilator, debuger i narzędzia do programowania zawarte są w postaci jednego
kompletnego programu. Dodatkowo producenci udostępniają rozbudowaną dokumentacje techniczną wraz ze
wsparciem technicznym wykwalifikowanego personelu.
•
open source – Aplikacje udostępniane na zasadzie open source. Ich główną zaletą jest to, że nic nie kosztują. Wokół
każdego darmowego środowiska programistycznego tworzy się grupa użytkowników chcących wnieść swoje
udoskonalenia (dotyczy to wszystkich programów open source). Za wadę można uznać trudniejszą konfigurację, niż
ma to miejsce w komercyjnych aplikacjach, jednak częściowo rekompensują to informacje i pomoc dostępne na
grupach dyskusyjnych.
Przykładowe środowiska IDE komercyjne:
•
IAR Embedded Workbench,
•
Keil ARM,
•
Rowley CrossWorks,
•
ARM RealView Dev. Suite.
Mikroprocesory i kontrolery
267
Przykładowe darmowe środowiska programistyczne IDE:
•
WinARM,
•
Yagarto (z edytorem Eclipse),
•
GnuARM,
•
CodeBlocks Studio.
Mikroprocesory i kontrolery
268
Środowisko WinARM
WinARM jest to zbiór narzędzi GNU oraz innych, skompilowanych do działania w systemie Microsoft Windows.
Umożliwia pisanie oprogramowania na mikrokontrolery z rdzeniami ARM, z instrukcjami Thumb i ARM. Kod programu
może być pisany zarówno w asemblerze, jak i języku C.
Zawartość pakietu:
•
Kompilator GNU-C/C++ w wersji 4.1.1.
•
GNU-Binutils CVS 20060606 – narzędzia do obsługi platformy ARM.
•
Newlib 1.14.0 – biblioteka C do obsługi systemów wbudowanych.
•
Newlib-lpc 5a – biblioteka C do obsługi układów LPC.
•
GNU-Utils – narzędzia GNU wspierające kompilator i linker.
•
Pliki nagłówkowe dla mikrokontrolerów z rdzeniami ARM.
•
Programmers Notepad 2.0.6.1 -
•
Insight-GDB 6.5.50 – debuger.
•
GNU Gdb 6.4.50 – debuger dostępny z linii poleceń.
•
H-JTAG 0.2.1 – programator JTAG.
•
Przykładowe programy z plikami makefile.
Edytor tekstowy do pisania kodu programu.
Mikroprocesory i kontrolery
269
Programy Yagarto + edytor Eclipse
Yagarto to zbiór narzędzi opartych na GNU ARM. Wyróżnia je brak konieczności korzystania z Cygwina (emulatora
systemu Linux na MS Windows), jak w czystym GNU ARM. Środowisko to dobrze współpracuje z wieloplatformowym
edytorem Eclipse.
Czyli, Yagarto to zespół kompilatorów, linkerów itp. stworzonych do współpracy z edytorem Eclipse.
Zawartość pakietu:
•
YAGARTO GNU ARM Toolchain (Binutils-2.17, Newlib-1.14.0, GCC-4.1.1).
•
Eclipse 3.2, wtyczki Zylin i Zylin CDT.
•
Debuger OpenOCD.
Sam edytor Eclipse nie obsługuje kodu w języku C, zatem należy podczas instalacji programu doinstalować wtyczkę
usprawniającą pracę Eclipse w trybie debugowania z rozbudowanym debugerem OpenOCD.
Download