Mikrokontroler jest niezależnym systemem komputerowym, zawierającym w sobie (pamięć RAM,ROM, układy I/O, timer, układy kontroli przerwań, rdzeń CPU), układ transmisji (szeregowej, równoleglej), jednostkę obliczeniową ALU, zegar czasu rzeczywistego RTC :
mała moc obliczeniowa (20 MIPSów)
na ogół brak instrukcji zmiennoprzecinkowych
przetwarzanie potokowe
bogate peryferia
liczniki i układy czasowe
przetworniki A/C i C/A
duża liczba interfejsów
dostępne operacje bitowe
brak układu zarządzania pamięcią MMU
praca tylko w trybie rzeczywistym
rzadko obsługiwany bezpośredni dostęp do pamięci DMA
zastosowanie: aparatura kontrolno pomiarowa
Mikroprocesor jest sekwencyjnym układem logicznym działającym w takt sygnału zegarowe CLK:
duża moc obliczeniowa (6000 MIPSów obecnie)
wielordzeniowość oraz technologia HT
przetwarzanie potokowe
dostępne instrukcje zmiennoprzecinkowe
do działania wymaga dodatkowych peryferiów
kontroler DMA
pamięć (programu i danych)
kontroler przerwań PIC (ang. Programmable Interrupt Controller)
dostępny układ zarządzania pamięcią MMU
adresowanie w trybie rzeczywistym i wirtualnym
z reguły architektura Von-Neumana
możliwość pracy w systemie wieloprocesorowym
zastosowanie: komputery (stacje robocze - komputery osobiste, serwery)
Kontroler przerwań jest urządzeniem pozwalającym na zgłaszanie przerwań przez wiele urządzeń przy wykorzystaniu jednej linii przerwań mikroprocesora. Układ umożliwia także ustawianie priorytetów przerwań. Pojedynczy 8259 umożliwia obsługę 8 przerwań. Możliwe jest jednak podłączenie kaskadowe kontrolerów, co pozwala obsłużyć ich większą ilość. Połączenie takie jest realizowane jak na rysunku. Jedno z urządzeń pracuje w trybie master, z kolei pozostałe kontrolery działają jako układ slave. Wyprowadzenia CAS0:2 wszystkich urządzeń łączy się ze sobą równolegle. Linie kontrolera master przesyłają sygnały do układów slave. Z kolei wyjścia INT układów slave są podłączane do wejść M7:0 układu master (każdy slave do jednego wejścia Mx). Wyjście INT układu master jest podłączone z wejściem IRQ mikroprocesora. Układy wymagają skonfigurowania do pracy w trybie kaskadowym.
Układy połączone są ze sobą trzema liniami adresowymi CAS0:2. Każdy z kontrolerów rozpoznaje swoją rolę (Master lub Slave) badając poziom sygnału SP/EN. Zero logiczne konfiguruje układ jako SLAVE. Do każdego kaskado połączonego kontrolera doprowadzony jest z procesora sygnał INTA. lecz tylko układ Mastter jest połączony ze swojego wyjścia INT z wejściem procesora INTREQ.
Obsługa przerwań od układu MASTER:
Urządzenie połączone z wejściem o numerze n zgłasza przerwanie wymuszając wysoki poziom logiczny na linii IRn
Jeżeli bit n w rejestrze maskującym IMR jest ustawiony to powoduje ignorowanie wszelkich przerwań nadchodzących tą linią, jeżeli nie to powoduje ustawienie n-tego bitu w rejestrze zgłoszeń IRR
Następnie układ oceny priorytetu wybiera w przypadku większej liczby zgłoszeń to o najwyższym priorytecie i wysyła go do rejestru obsługi ISR
w ISR obsługiwane jest przerwanie , procesor wysyła sygnał INTA a kontroler odpowiada do niego wystawieniem na szynę danych D0:7 wektora przerwań
następnie rejestr ISR jest zerowany co objawia się gotowością do obsługi kolejnego przerwania
Obsługa przerwań od układu SLAVE:
zgłoszenie ustawia n bit w rejestrze zgłoszeń IRR układu SLAVE i po opracowaniu priorytetów, wysyła sygnał INT do układu Master
układ master otrzymuje zgłoszenie na linii IR2, co powoduje ustawienie bitu 2 w rejestrze IRR
układ master opracowawszy priorytet własnych zgłoszeń, wysyła sygnał INT do procesora
procesor odpowiada pierwszym sygnałem INTA, następnie układ Master adresuje liniami CAS0:2 układ Slave odpowiadający za obsługę zgłoszonego przerwania
w obu układach następuje przesunięcie bitu odpowiadającego obsługiwanemu kanałowi z IRR do ISR
drugi impuls INTA Z CPU nakazuje układowi Slave wystawienie na szynę danych (D7:0) wektora przerwań
zerowane są rejestry ISR układu Master i Slave
Tryb DMA jest trybem, w którym transmisja danych pomiędzy urządzeniami (np. we/wy) a pamięcią odbywa się z pominięciem samego mikroprocesora. Może to być realizowane przez sam mikroprocesor lub przez specjalny układ zwany kontrolerem DMA. Wymaga on wcześniejszego skonfigurowania. Tryb transferu DMA pozwala odciążyć procesor od przesłań danych między jednymi urządzeniami a innymi. W tym czasie CPU może kontynuować wykonywanie programu. Przykładem kontrolera DMA jest układ 8237. Możliwe jest kaskadowe połączenie układów 8237, aby zwiększyć ilość urządzeń mogących pracować w trybie DMA.
Jest to przesyłanie danych bezpośrednio z pamięci do układu we/wy z pominięciem mikroprocesora. Realizacja transmisji DMA wymaga zastosowania specjalnego układu tzw. sterownika DMA. Układ ten inicjuje transmisję przez zablokowanie mikroprocesora w trakcie transmisji adresuje komórki pamięci, dlatego wymaga zewnętrznego sygnału zegarowego. Przed rozpoczęciem transmisji musi być odpowiednio zaprogramowany. Sama transmisja może być wykonywana po zablokowaniu pracy mikroprocesora lub w cyklach zegarowych, podczas których przetwarza on dane.
Układ we/wy wykorzystujący transmisję DMA musi być wyposażony w dwa dodatkowe sygnały sterujące(wyjściowy DRQ i wejściowy DACK). Sygnałem DRQ zgłasza się żądanie obsługi do sterownika DMA. DACK oznacza zgodę na rozpoczęcie transmisji i jest wystawiany przez sterownik DMA
Zaletą transmisji DMA jet szybkość przesyłania dużych ilości informacji (tzw. Bloków), wadą jest skomplikowanie układów w postaci układu DMA i dodatkowych sygnałów sterujących.
Liczba zmiennoprzecinkowa jest komputerową reprezentacją liczb rzeczywistych zapisanych w postaci wykładniczej (zwanej też notacją naukową). Ze względu na wygodę operowania na takich liczbach przyjmuje się ograniczony zakres na mantysę i cechę. Powoduje to, że liczba jest określana z pewną dokładnością i może występować w określonym zakresie.
Istnieje kilka typów reprezentujących liczby zmiennoprzecinkowe między innymi typ float. W typie tym cała liczba przedstawiona jest na 32 bitach z czego:
8 bitów to wykładnik (cecha)
23 bity to mantysa
1 bit został przeznaczony na znak liczby
Wartość liczby zmiennoprzecinkowej zapisanej w typie float jest obliczana wg wzoru:
Gdzie:
S (ang. sign) – znak liczby, czyli 1 lub -1
M (ang. Mantissa) – znormalizowana mantysa
E (ang. Exponent) – wykładnik
Bias (pochodzi od ang. Biased Exponent) – pewna stała o którą przesuwany jest wykładnik
Normalizacja mantysy:
Mantysa należy do przedziału [1,2)
Znak liczby:
Liczba jest ujemna, gdy bit znaku (S) jest równy 1, w przypadku liczby dodatniej bit znaku jest równy 0.
Przesunięcie wykładnika:
Wykładnik, w celu uniknięcia konieczności kodowania jego znaku (liczba miałaby dwa bity znaku), zapisywany jest jako wartość przesuniętą o pewną stałą (ang. biased exponent). Właściwą wartość wykładnika uzyskuje się odejmując od zakodowanego wykładnika wartość przesunięcia (ang. bias).
W formacie liczby zmiennoprzecinkowej 32 bitowej przesunięcie to wynosi 127.
Poniżej przestawiona została liczba zmiennoprzecinkowa typu float
Znak | Wykładnik | Mantysa |
---|---|---|
0 | 0 | 1 |
L(C) = (01101000)2 = 104
Bias = 127
L(C) – Bias = 104 – 127 = - 23
L(M) = (1.11101101111010111101011)2 = 1 + (11101101111010111101011)2 * 2-23 =1.9294
L = 2,3000 * 10-7
Najmniejszą dodatnią liczbą możliwą do przechowywania w typie float to
2-127 = 5,8775 * 10-39, co stanowi rozdzielczość tego typu danych. Największą wartością, którą można zapisać jest 3,4028 * 1038.
Wartość największa
Wartość najmniejsza
Wartość największa mniejsza od zera
Najmniejsza większa od zera
Struktura liczby zmiennoprzecinkowej:
Mantysa m-bitowa, cecha n-bitowa, jeden bit przeznaczony na znak. Przyjmując następujące oznaczenia:
L(S) – bit znaku, L(M) – mantysa, L(C) – cecha, P – podstawa systemu liczbowego
Liczbę zmiennoprzecinkową można zapisać w następującej postaci:
L(A) = (-1)L(S) * L(M) * PL(C)-B gdzie B = Pn-1-1
Ponadto mantysa musi być unormowana co oznacza, iż L(M) musi się znajdować w przedziale [1,P), a L(S) przyjmuje 0 lub 1.
Przykład:
(17,5)10 = (10001,1)2 -> normalizacja mantysy -> 1,00011 * 24
Przyjmując, że mamy 8 bitów na cechę oraz 8 bitów na mantysę (w tym jeden bit na znak), otrzymujemy B = 28-1-1 = 127, wobec tego L(C) = (131)10 = (10000011)2
Ostatecznie:
0 10000011 1000110
Niektóre typy danych pomijają jednostkę (1 przed przecinkiem) w mantysie, gdyż wiadomo, że zawsze (gdy mantysa jest znormalizowana) ta 1 tam występuje. Tak np. jest w typie float. Wówczas liczba zostałaby zapisana jako:
0 10000011 0001100000000000000000
W kolejności big endian dane wielobajtowe są zapisywane w pamięci po kolei od najstarszego bajta do najmłodszego. Liczba 0xfd0aa55 będzie zapisana w pamięci w następujący sposób:
Adres | 0x23 | 0x24 | 0x25 | 0x26 |
---|---|---|---|---|
Zawartość | 0x0f | 0xd0 | 0xaa | 0x55 |
W kolejności little endian dane są zapisywane w kolejności od najmłodszego bajta począwszy, a na najstarszym skończywszy. Liczba 0xfd0aa55 będzie zapisana w pamięci w następujący sposób:
Adres | 0x23 | 0x24 | 0x25 | 0x26 |
---|---|---|---|---|
Zawartość | 0x55 | 0xaa | 0xd0 | 0x0f |
System komputerowy von Neumanna nie posiada oddzielnych pamięci do przechowywania danych i instrukcji. Instrukcje jak i dane są zakodowane w postaci liczb. Bez analizy programu trudno jest określić czy dany obszar pamięci zawiera dane czy instrukcje.
W odróżnieniu od architektury von Neumanna, w architekturze harvardzkiej pamięć danych jest oddzielona od pamięci rozkazów. Prostsza (w stosunku do architektury Von Neumanna) budowa przekłada się na większą szybkość działania - dlatego ten typ architektury jest często wykorzystywany w procesorach sygnałowych oraz przy dostępie procesora do pamięci cache.
Harwardzka
Prostsza od architektury Von Neumanna co przekłada się na większą szybkość działania(używane w procesorach sygnałowych i tam gdzie procesor ma dostęp do pamięci cache)
rozkazy i dane przechowywane są w oddzielnych pamięciach
różna organizacja pamięci(inna długość słowa danych i rozkazów)
możliwość pracy równoległej (jednoczesny odczyt z pamięci programu oraz pamięci danych)
von Neumanna
procesor ma dostęp do przestrzeni adresowej dekodery adresowe zapewniają mapowanie pamięci na rzeczywiste układy
pamięć traktowana jest, jako liniowa tablica komórek, które identyfikowane są przy pomocy dostarczanego przez procesor adresu
rozkazy i dane przechowywane są w tej samej pamięci
nie da się rozróżnić danych od rozkazów
instrukcje jak i dane zakodowane są w postaci liczb
wykonywany program może sam się modyfikować traktując obszar instrukcji jako dane
Ze względu na typ listy instrukcji mikroprocesory można podzielić na:
RISC (ang. Reduced Instruction Set Computer)
Jako przykłady można wymienić: Atmel AVR, ARM, Ralpha, MIPS, SPARC, Intel 80860
CISC (ang. Complex Instruction Set Computer)
Jako przykłady można wymienić: AMD, x86
Podstawowe cechy architektury RISC w porównaniu z CISC:
Zredukowana liczba rozkazów do niezbędnego minimum. Ich liczba wynosi kilkadziesiąt, podczas gdy w procesorach CISC sięga setek. Upraszcza to znacznie dekoder rozkazów.
Redukcja trybów adresowania, dzięki czemu kody rozkazów są prostsze, bardziej zunifikowane, co dodatkowo upraszcza wspomniany wcześniej dekoder rozkazów. Ponadto wprowadzono tryb adresowania, który ogranicza ilość przesłań - większość operacji wykonuje się wg schematu:
Ograniczenie komunikacji pomiędzy pamięcią, a procesorem. Przede wszystkim do przesyłania danych pomiędzy pamięcią, a rejestrami służą dedykowane instrukcje, które zwykle nazywają się load (załaduj z pamięci), oraz store (zapisz do pamięci); pozostałe instrukcje mogą operować wyłącznie na rejestrach. Schemat działania na liczbach znajdujących się w pamięci jest następujący: załaduj daną z pamięci do rejestru, na zawartości rejestru wykonaj działanie, przepisz wynik z rejestru do pamięci.
Zwiększenie liczby rejestrów (np. 32, 192, 256, podczas gdy np. w architekturze x86 jest zaledwie 8 rejestrów), co również ma wpływ na zmniejszenie liczby odwołań do pamięci.
Dzięki przetwarzaniu potokowemu (ang. pipelining) wszystkie rozkazy wykonują się w jednym cyklu maszynowym, co pozwala na znaczne uproszczenie bloku wykonawczego, a zastosowanie superskalarności także na zrównoleglenie wykonywania rozkazów. Dodatkowo czas reakcji na przerwania jest krótszy.
W skrócie:
RISC | CISC |
---|---|
Zbiór instrukcji jest ortogonalny | Rozbudowana liczba instrukcji |
Mała liczba instrukcji
|
Wysoka specjalizacja instrukcji
|
ADuC812 | 8051 | 8052 |
---|---|---|
|
|
|
Głównym zadaniem rdzenia CPU (centralnej jednostki liczącej) jest zapewnienie poprawnego i szybkiego wykonywania kodu. Z tego powodu CPU musi mieć dostęp do pamięci, musi wykonywać operacje, sterować układami peryferyjnymi i obsługiwać przerwania.
Dla uzyskania maksymalnej wydajności AVR zbudowany jest w oparciu o architekturę harwardzką – z rozdzielonymi pamięciami i szynami dla programu i danych. Instrukcje w pamięci programu wykonywane są potokowo. Podczas gdy jedna instrukcja jest wykonywana, następna jest już pobierana z pamięci programu. Dzięki takiemu rozwiązaniu, możliwe jest wykonywanie całej instrukcji w każdym cyklu zegara.
Blok szybkiego dostępu zawiera 32 rejestry robocze o jednocyklowym czasie dostępu. To pozwala aby jednostka ALU (arytmetyczno logiczna) również mogła pracować w jednym cyklu. W typowej operacji, dwa argumenty ALU są wystawiane z bloku rejestrów, wykonywana jest operacja, a wynik jest powrotem umieszczany w bloku rejestrów, i to wszystko w jednym cyklu zegara.
Sześć spośród 32 rejestrów roboczych może być używane jako trzy 16-bitowe rejestry wskaźnikowe (X, Y, Z) w trybie adresowania pośredniego. Daje to możliwość wykonywania szybkich przeliczeń danych. Jeden z tych trzech wskaźników adresu (Z) może być użyty jako wskaźnik adresu w tzw. lookup tables w pamięci flash programu.
Jednostka ALU umożliwia wykonywanie operacji arytmetycznych i logicznych między rejestrami, miedzy stałą a rejestrem, oraz także operacji na pojedynczym rejestrze. Po wykonaniu operacji uaktualniany jest rejestr statusowy dający informacje o rezultacie.
Działanie programu jest możliwe dzięki warunkowym i bezwarunkowym skokom i instrukcjom rozgałęziającym, dającym bezpośredni dostęp do całej przestrzeni adresowej. Większa część instrukcji AVR ma format pojedynczego 16-bitowego słowa. Każdy adres pamięci programu zawiera 16 lub 32-bitową instrukcję.
Pamięć programu może być podzielona na dwie sekcje: sekcję programu botującego, oraz sekcję programu aplikacji. Obie części mają indywidualne bity bezpieczeństwa (Lock bits) do zabezpieczenia przed odczytem i nadpisaniem zawartości (np. przez programator). Program sekcji botującej może służyć np. do aktualizacji oprogramowania systemu, gdyż tylko z tej części pamięci programu może być wykonywana instrukcja SPM nadpisująca pamięć flash aplikacji.
Podczas przerwań i wywołań procedur podrzędnych adres powrotny licznika programu jest przechowywany w pamięci stosu. Stos zajmuje obszar pamięci SRAM, więc jego rozmiar jest ograniczony wielkością tej pamięci. Każdy program musi zainicjalizować wskaźnik stosu SP w procedurze obsługi resetu, zanim zostanie wywołana obsługa przerwania czy podprocedura.
Moduł przerwań ma swoje rejestry kontrolne w przestrzeni I/O z dodatkowym globalnym bitem odblokowującym przerwania w rejestrze statusowym SREG (opisany dalej). Wszystkie przerwania mają osobny wektor przerwania w tablicy wektorów przerwań. Przerwania mają priorytet zależny od pozycji wektora. Im niższy adres wektora przerwań, tym wyższy jest priorytet dla danego przerwania.
Rejestr statusowy – SREG:
Numer bitu | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Nazwa | I | T | H | S | V | N | Z | C |
Dostęp | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
I – globalne zezwolenie na przerwania
T – znacznik kopii
H – znacznik przeniesienia połówkowego
S – bit znaku S=V xor N
V – znacznik przepełnienia
N – znacznik wartości ujemnej
Z – znacznik wartości zerowej
C – znacznik przeniesienia lub pożyczki
Mapa pamięci programu:
Mapa pamięci danych:
Porty wejścia i wyjścia:
Budowa
Każdy z portów ma ściśle z nim związane 3 rejestry konfiguracyjne. Są to: rejestr danych PORTx, rejestr kierunkowy DDRx oraz port pinów wejściowych PINx. Dodatkowo ustawieniem jednego bitu PUD w rejestrze SFIOR można wyłączyć wszystkie rezystory
pull-up we wszystkich portach jednocześnie.
Większość pinów posiada więcej niż jedną funkcję, do obsługi układów zintegrowanych w mikrokontrolerze. Uaktywnienie funkcji alternatywnej wybranym pinom portu nie blokuje pozostałym możliwości pracy jako cyfrowe piny I/O.
Bity DDxn w rejestrze DDRx określają kierunek pracy pinu. Wpisana tam wartość 1 powoduje pracę pinu Pxn jako wyjściowy, 0 jako wejściowy.
Wpisanie 1 do PORTxn podczas, gdy pin skonfigurowany jest jako wejście, powoduje włączenie rezystora pull-up. Wartość 0 spowoduje jego wyłączenie. Skonfigurowanie pinu jako wyjście automatycznie odłączy rezystor pull-up. W czasie stanu resetu mikrokontrolera lub gdy nie pracuje zegar, piny są w trójstanowe.
Wpisanie 1 do PORTxn, podczas gdy pin skonfigurowany jest jako wyjście, spowoduje ustawienie stanu wysokiego. Wpisanie 0 ustawi stan niski.
Niezależnie od obranego kierunku pracy pinu w DDxn, wartość pinu portu może być odczytana poprzez bity PINxn. Jeśli zmiana stanu następuje z zewnątrz, to wartość PINxn jest opóźniona do momentu synchronizacji ze stanem niskim zegara. Wartość na pinie jest zapamiętywana na zboczu opadającym zegara a uaktualniona wartość PINxn pojawia się ze zboczem narastającym zegara. Potwierdzenie wpisanej programowo wartości pinu, poprzez odczyt PINxn, musi odbywać się więc co najmniej jeden cykl zegarowy po wpisaniu. Synchronizujące opóźnienie można zrealizować instrukcją NOP.
Generator taktujący – w mikro kontroler wbudowano wzmacniacz odwracający fazę, przeznaczony do generowania przebiegu zegarowego synchronizującego pracę mikrokontrolera. Wyprowadzenie XTAL1 i XTAL2 pełnią odpowiednio funkcję jego wejścia i wyjścia.
Po podłączeniu zewnętrznego rezonatora wzmacniacz pracuje jako generator sygnału taktującego mikrokontroler. Przewidziano też możliwość pracy z zewnętrznym przebiegiem zegarowym.
Rejestry ogólnego przeznaczenia
Zestaw 32 8-bitowych rejestrów ogólnego przeznaczenia gwarantuje szybki dostep do podręcznych danych. Wszystkie rejestry mają bezpośredni dostęp do ALU, mogą więc pełnić rolę argumentów operacji arytmetyczno-logicznych bez pośrednictwo dodatkowych rejestrów przejściowych i specjalnego akumulatora. 6 ostatnich rejestrów tworzy 3 pary dwubajtowych rejestrów indeksowanych używanych jako wskaźniki(X,Y,Z) przy adresowaniu pośrednim.
Rejestry R0:15 objęte zostały ograniczeniem, przez co nie mogą być stosowane przez ALU przy operacjach ze stałymi ładowanymi bezpośrednio.
ALU-bardzo wydajna jednostka arytmetyczno-logiczna współpracująca z bez[pośrednio z 32 rejestrami ogólnego przeznaczenia. Operacje wykonywane przez ALU dzielimy na: arytmetyczne,logiczne,bitowe.
Pamięć programu- mikrokontrolery AVR wyposażono w 2kB pamięci Flash programowanej w systemie , która pełni rolę pamięci programu.
Stos-pamięci SRAM w układach AVR powierzono dodatkową istotną rolę poza miejscem przechowywania danych pamięć ta stanowi stos mikrokontrolera. Pamięć stosu może być wykorzystana do tymczasowego przetrzymywania zmiennych lokalnych oraz adresów powrotu przy wywoływaniu podprogramów.
Gdy na linii SDA stan logiczny zmienia się z '1' na '0', a na linii SCL jest stan '1', to sytuacja taka nazywa się START. Natomiast gdy na linii SDA stan logiczny zmienia się z '0' na '1', podczas wysokiego poziomu na linii SCL, to sytuacja taka nazywa się STOP. Przedstawione to zostało na poniższych wykresach:
W protokole I2C transmisja danych odbywa się szeregowo, w dwóch kierunkach przy użyciu dwóch linii. Jedna z nich SCL(serial clock Line) przesyła impulsy zegarowe synchronizujące transmisję, natomiast druga SDA(serial data Line) przesyła dane w dwóch kierunkach.
Stan linii danych może być zmieniany, gdy linia zegarowa SCL znajduje się w stanie niskim.
Nazwa interfejsu 1-Wire wywodzi się stąd, że do całkowitej komunikacji używana jest tylko jedna linia danych (i jedna linia masy). Dodatkowo, odbiornik może być zasilany bezpośrednio z linii danych, wykorzystując zasilanie pasożytnicze, co jest ogromną zaletą tego interfejsu.
Właściwości magistrali 1-Wire:
Wykorzystuje jedną linię do dwustronnej komunikacji.
Wymaga rezystora podciągającego na linii danych (ang. pull-up resistor) najczęściej o wartości 4.7–5 kΩ.
System z magistralą 1-Wire wymaga jednego urządzenia typu Master i jednego lub więcej urządzeń typu Slave.
Każde urządzenie podłączone jest do magistrali przez końcówkę typu „open drain” lub 3-state port.
Wszystkie dane oraz rozkazy przesyłane są przez magistralę począwszy od najmłodszego bitu (ang. LSB).
Każda wymiana danych zawiera 3 etapy :
1. Inicjalizacja: Zawiera etap zerowania układu Slave oraz etap potwierdzenia przez Slave’a obecności na magistrali.
2. Przesyłanie komendy typu ROM:. Każdy układ Slave posiada unikalny 64-bitowy kod. Komendy typu ROM umożliwiają zaadresowanie konkretnego układu, identyfikację układu, wyszukanie alarmu lub pominięcie sprawdzania 64-bitowego kodu.
3. Przesłanie funkcji sterującej układu:. Sekwencja tego typu umożliwia realizację wszystkich dostępnych operacji na wybranym układzie.
Urządzenie typu master rozpoczyna transmisję sekwencji bitów poprzez wystawienie impulsu reset, czyli zwarciu linii danych na 480 μs do masy. Powoduje to zresetowanie wszystkich podłączonych odbiorników (urządzeń typu slave). Następnie każde urządzenie slave potwierdza swoją obecność wystawiając na linię danych impuls obecności - zwierając linię danych do masy na 60 μs.
Przesłanie logicznej jedynki na magistralę oznacza wystawienie przez mastera krótkiego (od 1 do 15μs) impulsu niskiego (zwarcie linii) oraz następnie wysokiego o długości 60 μs. Logiczne zero odpowiada niskiemu impulsowi o długości od 60 do 120μs.
Przed odbiorem każdego bitu danych master wysyła niski impuls startu (od 1 μs do 15 μs), po czym wraca do stanu wysokiego na linii danych. Jeśli slave chce wysłać logiczną jedynką - nie robi nic, pozostawiając linię w stanie wysokim. Jeśli slave chce wysłać zero, wówczas zwiera linię danych do masy na 60 μs. Po przesłaniu 8 bitów następuje wysłanie komendy (rozkazu) (również ośmiobitowej). Ewentualne błędy w transmisji mogą być wykryte za pomocą wbudowanego CRC (również ośmiobitowego).
Inicjalizacja rozpoczyna się wysłaniem na magistrale przez układ Master impulsu zerującego następnie układ Slave wysyła impuls obecności. Inicjalizacja pozwala układowi Master wykrycie podłączonych do niej układów Slave.
Sekwencja zapisu ‘0’ i ‘1’
Nadanie logicznego 0 polega na wygenerowaniu impulsu o czasie trwania 60-120 µs a następnie na zwolnieniu magistrali i oczekiwaniu minimum 1µs przed nadaniem następnego bita.
Dla logicznej 1 generowany impuls trwa 1-15µs natomiast wymagany czas bezczynności 60µs
Sekwencja odczytu ‘0’ i ‘1’
Układ Master generuje impuls o czasie trwania min 1µs a następnie zwalnia linię DQ. Jeżeli Slave chce wysłać logiczną jedynkę - nie robi nic pozostawiając linię w stanie wysokim. Jeżeli Slave chce wysłać 0 wówczas zwiera linię danych do masy. Po przesłaniu 8bitów nastepuje wysłanie komendy rozkazu
Procesor wysyła na linie wierszy impuls po kolei począwszy od pierwszej. W każdej chwili czasu w stanie aktywnym jest tylko jeden wiersz. Wciśnięcie przycisku spowoduje wystąpienie impulsu na odpowiedniej kolumnie, co zostaje wykryte przez procesor. Po jednym cyklu odpytywania klawiatury, proces jest powtarzany.
Połączenie większej ilości klawiszy w matrycę pozwala na zaoszczędzeniu wyprowadzeń mikrokontrolera. Klawiatura składająca się z 16 przycisków wymaga 8 linii mikrokontrolera.
Odczyt pierwszego wiersza:
Zerowanie programowe linii B0 i odczytując stan wyprowadzeń B4:B7- stan tych linii odzwierciedla stan klawiatury w pierwszym wierszu (SW1-SW4). Przykładowo niski poziom na linii B5 oznacza wciśnięcie SW2. Podobnie postępujemy dla pozostałych wierszy kolejno zerując pojedyncze linie B4, B5, B6, B7 i odczytując stan czterech linii wejściowych. W ten sposób po wykonaniu 4 kroków mamy odczytane stany wszystkich 16-stu klawiszy.
Zadaniem procesorów sygnałowych (DSP – ang. Digital Signal Procesor) jest przetwarzanie sygnałów analogowych lub cyfrowych w czasie rzeczywistym. Zastosowanie znajdują one przede wszystkim w przetwarzaniu sygnałów akustycznych, obrazów, a także modulacji i demodulacji (modemy, telefony komórkowe). Główne różnice pomiędzy DSP a zwykłym mikroprocesorem to:
Operacja mnożenia wraz z akumulacją wykonywana jest w jednym cyklu
Specjalne tryby adresowania pamięci (pamięć dwuportowa)
Sprawna realizacja pętli
Procesory DSP można podzielić na:
Stałoprzecinkowe
Zmiennoprzecinkowe
16, 32 czy 64 bitowe
Przykładem procesora sygnałowego może być procesor sygnałowy rodziny ADSP-21xx. W procesorze tym znajdują się następujące jednostki obliczeniowe:
ALU – Arithmetic Logic Unit jest 16-bitowa z dwoma wejściami X i Y i jednym wyjściem R, wyniki operacji zapamiętywane są w rejestrach AR i AF,
Operacje arytmetyczne i logioczne
Rejestr AF jest rejestrem wewnętrznym umożliwiającym użycie wyniku bezpośrednio jako jedno z wejść (wejście Y)
Rejestr AR może zostać przesłany na magistralę R-BUS lub DMD-BUS oraz załadowany z magistrali DMD-BUS
MAC – Multiply Accumulator
Jedno cyklowe instrukcje mnożenia, mnożenia z dodawaniem, mnożenia z odejmowaniem
40-bitowy akumulator z zabezpieczeniem na przepełnienie
dwa 16-bitowe wejścia(X i Y)
wynik mnożenia w postaci 32 bitowej R
wynik może być podawany na wejście Y
wszystkie rejestry mogą być odczytane lub zapisane w tym samym czasie
Shifter – rejestr przesuwny
Normalizacja (konwersja liczb stałoprzecinkowych na zmiennoprzecinkowe)
Denormalizacja
Przesunięcia arytmetyczne i logiczne
Ponadto w procesorze znajdują się jeszcze: generator adresu danych DAG, który odpowiada za:
Sprzętowe adresowanie modulo
Jednoczesne zarządzanie czterema wskaźnikami za każdy DAG
Sprzętowa implementacja bufora cyklicznego
Możliwość pobrania dwóch operandów jednocześnie
oraz układ sekwencjonowania programu Program Sequencer:
Generowanie adresu kolejnych instrukcji
Stos sprzętowy
Obsługa przerwań
Jednocyklowa obsługa instrukcji rozgałęziających
Ponadto zawiera : elementy we/wy, peryferia (porty szeregowe, flagi we/wy, timer)
Podział
pełniona funkcja
przesłań (miedzyrejestrowe, pamięć – rejestr, rejestr – pamięć)
arytmetyczne
logiczne
sterujące (wywołanie podprogramu, skok bezwarunkowy, skok bezwarunkowy względny)
warunkowe
specjalne (zatrzymanie procesora, oczekiwania przerwania, operacja pusta, obniżenie poboru mocy)
typ danych
stałoprzecinkowe
zmiennoprzecinkowe
bitowe (przesunięcia logiczne, arytmetyczne, przesuniecie cykliczne w prawo przez znacznik przeniesienia, przesuniecie cykliczne w prawo, ustawianie bitu k w słowie B, zerowanie bitu k w słowie B)
blokowe
DSP - Digital Signal Processing
SIMD - Single Instruction Multiple Data
poziom uprzywilejowania
0 - jadro systemu operacyjnego (zarządzanie pamięcią, przełączanie zadań)
1 - system operacyjny (dostęp do danych, obsługa wejść / wyjść)
2 - rozszerzenie systemu operacyjnego przez użytkownika
3 - programy użytkowe
Przykłady dla AVR ATMEGA:
Mnemonik | Operandy | Opis | Znaczniki | Cykle zegara | Uwagi |
---|---|---|---|---|---|
Arytmetyczno-logiczne | |||||
ADD | Rd, Rr | Rd = Rd + Rr | ZCNVSH | 1 | d, r = [0,31] |
SUB | Rd, Rr | Rd = Rd - Rr | ZCNVSH | 1 | d, r = [0,31] |
SUBI | Rd, K | Rd = Rd – K | ZCNVSH | 1 | K = [0,255], d = [16,31] |
SBC | Rd, Rr | Rd = Rd-Rr-C | ZCNVSH | 1 | d, r = [0,31] |
AND | Rd, Rr | Rd = Rd & Rr | ZNVS | 1 | d, r = [0,31] |
ANDI | Rd, K | Rd = Rd & K | ZNVS | 1 | K = [0,255], d = [16,31] |
OR | Rd, Rr | Rd = Rd | Rr | ZNVS | 1 | d, r = [0,31] |
EOR | Rd, Rr | Rd = Rd ^ Rr | ZNVS | 1 | d, r = [0,31] |
COM | Rd | Rd = 0xFF-Rd | ZNCVS | 1 | d = [0,31] |
INC | Rd | Rd = Rd +1 | ZNVS | 1 | d = [0,31] |
TST | Rd | Rd = Rd & Rd | ZNVS | 1 | d = [0,31] |
CLR | Rd | Rd = Rd^Rd | ZNVS | 1 | d = [0,31] |
Mnemonik | Opis | Cykle zegara | Operacja |
---|---|---|---|
Rozgałęziające | |||
JMP k | Skok bezpośredni | 2 | PC = k |
RJMP k | Skok względny | 2 | PC = PC + k +1 |
CALL k | Skok bezpośredni | 3 | PC = k |
RET | Powrót z procedury | 4 | PC = STACK |
SBRC Rr, b | Pomiń jeśli bit w rejestrze równy 0 | 1/2/3 | If (Rr(b)=0) PC=PC+2 or 3 |
SBIS P, b | Pomiń jeśli bit w rejestrze I/O równy 1 | 1/2/3 | If (P(b)=1) PC=PC+2 or 3 |
BREQ k | Skok gdy równe | 1,2 | If (Z=1) PC=PC+k+1 |
BRNE k | Skok gdy nierówne | 1,2 | If (Z=0) PC=PC+k+1 |
BRSH k | Skok gdy większe lub równe | 1,2 | If (C=0) PC=PC+k+1 |
BRLO k | Skok gdy mniejsze | 1,2 | If (C=1) PC=PC+k+1 |
Bitowe | |||
SBI P, b | Ustaw bit w rejestrze I/O | 2 | I/O(P,b) = 1 |
CBI P, b | Wyczyść bit w rejestrze I/O | 2 | I/O(P,b) = 0 |
LSL Rd | Logiczne przesunięcie w lewo | 1 | Rd(n+1)=Rd(n), Rd(0)=0 |
LSR Rd | Logiczne przesunięcie w prawo | 1 | Rd(n)=Rd(n+1), Rd(7)=0 |
ROL Rd | Rotacja w lewo przez Carry | 1 | Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) |
SEI | Włącz przerwania | 1 | I=1 |
ROR Rd | Rotacja w prawo przez Carry | 1 | Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) |
Transfer danych | |||
MOV Rd, Rr | Prześlij z rejestru do rejestru | 1 | Rd = Rr |
LDI Rd, K | Ładuj stałą do rejestru d=[16,31] | 1 | Rd = K |
LD Rd, X | Ładuj pośrednio | 2 | Rd = (X) |
ST X, Rr | Zachowaj pośrednio | 2 | (X) = Rr |
IN Rd, P | Czytaj port | 1 | Rd = P |
OUT P, Rr | Wyślij na port | 1 | P = Rr |
PUSH Rr | Wyślij na stos | 2 | STACK = Rr |
POP Rd | Pobierz ze stosu | 2 | Rd = STACK |
Układ zarządzania pamięcią MMU – pozwala na obsługę pamięci wirtualnej i jej translację na pamięć fizyczną. Do zadań tych układów należy również ochrona pamięci podręcznej. Zarządzanie szynami danych
Pamięć wirtualna jest techniką programową a także sprzętową gospodarowania pamięcią operacyjną RAM pozwalającą na przydzielanie pamięci dla wielu procesów, zwalnianie jej i powtórne przydzielanie. Mechanizm umożliwia przydzielenie procesom więcej pamięci niż rzeczywista ilość pamięci fizycznej zainstalowanej w komputerze
Tryb rzeczywisty – tryb pracy mikroprocesorów z rodziny procesorów x86, w którym procesor pracuje tak jak procesor Intel 8086. W trybie tym brak ochrony pamięci przed użyciem przez inny proces i brak obsługi wielozadaniowości. W trybie rzeczywistym dostępna jest 1-megabajtowa przestrzeń adresowa. Procesory nowsze,i386 itd., mają szersze szyny adresowe (24-, 32- lub 36-bitowe) toteż pracując w trybie rzeczywistym mogą adresować całe 1088 kB pamięci.
Tryb chroniony (ang. protected mode) – to tryb pracy mikroprocesorów serii x86 wprowadzony w mikroprocesorze Intel 80286. Tryb chroniony umożliwia adresowanie pamięci w większym zakresie niż 1MB (tryb rzeczywisty), wprowadza wiele nowych udogodnień wspierających wielozadaniowość, takich jak: sprzętowa ochrona pamięci (układ MMU), wsparcie przełączania kontekstu procesora i wiele innych.
Tryb wirtualny (zwany także V86 lub Virtual 8086) — specjalny tryb pracy procesorów o architekturze IA-32, dostępny w trybie chronionym, który umożliwia uruchamianie programów przeznaczonych dla trybu rzeczywistego. W trybie wirtualnym symulowane jest działanie analogiczne dla procesora Intel 8086 (faktycznie można uruchamiać kod także dla 8088, 80186 i 80188), tzn. otrzymuje dostęp do 1 MB pamięci i rejestrów procesora i może wykonywać te rozkazy, które mają sens w takim otoczeniu.
Segmentacja pamięci polega na podzieleniu przez system operacyjny pamięci fizycznej na fragmenty o określonym początku, rozmiarze, atrybutach i identyfikatorze. System tworzy takie segmenty na żądanie aplikacji, przekazując jej jedynie identyfikatory nie pozwalające na odczytanie parametrów segmentów. Programy odwołują się zatem do kolejnych komórek pamięci w ramach należących do nich segmentów, nie wiedząc nic o tym, w jakie miejsca pamięci fizycznej trafiają ich odwołania. Procesy nie mają też prawa „widzieć” segmentów należących do innych programów — w czasie przekazywania kontroli procesowi system musi zablokować definicje segmentów należących do pozostałych procesów, przy każdym przełączeniu blokując segmenty wyłączanego programu i na nowo uaktywniając segmenty programu aktywowanego.
Rejestry segmentowe tworzą wirtualne segmenty pamięci których adresy nie mają związku z fizycznym adresowaniem komórek pamięci
Rejestr segmentowy - rejestr procesora stworzony do przechowywania adresu początkowego obszaru pamięci, w którym umieszczone są rozkazy, dane albo stos programu. W procesorach o architekturze x86 występuje 6 rejestrów segmentowych:
CS - 16 bitowy rejestr segmentu kodu programu
DS - 16 bitowy rejestr segmentu danych
SS - 16 bitowy rejestr segmentu stosu
ES, FS, GS - 16 bitowe rejestry pomocnicze dla danych
Rejestry indeksowe - (ang. Index Register) – odmiana rejestrów ogólnego przeznaczenia; umożliwiają stosowanie techniki adresowania zwanej adresowaniem indeksowym. Polega ono na tym, że kolejno zwiększana lub zmniejszana zawartość rejestru indeksowego jest dodawana do pewnej stałej liczby dając w wyniku ciąg adresów umożliwiających np. kolejne adresowanie danych umieszczonych w kolejnych komórkach pamięci.
Adresowanie indeksowe jest rodzajem adresowania pośredniego, gdzie adres efektywny jest sumą zawartości rejestru indeksowego SI lub DI i lokalnego przemieszczenia. Np. MOV AX, [SI].
x – ilość bitów potrzebna do zaadresowania 4GB, przy założeniu, że jedna komórka ma 4 bajty
Z powyższych obliczeń wynika, że potrzeba 30 bitów.
Pamięć statyczna:
Przechowuje informacje w rejestrach zbudowanych z przerzutników
Tworzone są w technologiach bipolarnych i MOS
Przechowują wpisane dane bez dodatkowych zabiegów tak długo, dopóki jest obecne napięcie zasilania
Przykładem takich pamięci mogą być pamięci podręczne CACHE
Pamięć dynamiczna jest to ulotna pamięć półprzewodnikowa o dostępie swobodnym, której bity są reprezentowane przez stan naładowania kondensatorów. Jej element składa się z kondensatora i tranzystora separującego. Ze względu na samorozładowywalnie się kondensatorów pamięci dynamiczne trzeba okresowo odświeżać z okresem od ułamka do kilku milisekund. Odświeżanie zawartości realizowane jest przez układy wspomagające umieszczone na płycie głównej lub sam procesor i polega na ponownym zapisie odczytanej wartości w te same komórki pamięci.
Typowa pojemność kondensatora w komórce pamięci dynamicznej to kilkadziesiąt femto faradów.
W procesorze Z80 za odświeżanie pamięci dynamicznych odpowiada rejestr R, który znajduje się w bloku Special Purpose Register.
Każdy akt odczytu z komórki pamięci powoduje więc zarazem odświeżenie jej zawartości. Komórki wymagają okresowego odświeżania zawartości nawet wtedy, gdy w pamięci nic się nie dzieje. Ładunek w kondensatorze C ulega bowiem powolnemu zanikowi w wyniku istnienia prądów upływu (prąd podprogowy tranzystora komórki, prąd wsteczny drenu). W celu odświeżania wystarczy okresowo odczytywać wszystkie komórki. Jak widać, działanie pamięci dynamicznej przy odczycie jest dość skomplikowane. Z tego powodu pamięci dynamiczne działają wolniej niż statyczne.
Podział ze względu na sposób programowania:
(S/D)RAM - (Static/Dynamic) Random Access Memory (pamięć o dostępie swobodnym),
ROM - Read Only Memory (pamięć tylko do odczytu),
OTP - One Time Programmable (pamięć jednokrotnie programowalna),
(UV)EPROM - Erasable Programmable ROM (pamięć tylko do odczytu kasowalna promieniami UV),
EEPROM - Electrically EPROM (pamięć tylko do odczytu kasowalna elektrycznie),
Flash - pamiec EEPROM typu błyskowego (Pełka 1999),
NVRAM - Non Volatile RAM - pamięć nieulotna o dostępie swobodnym.
Podział ze względu na sposób dostępu – interfejs:
szeregowa,
równoległa,
FIFO - First Input First Output (kolejka),
FILO - First Input Last Output (stos),
jednoportowa,
wieloportowa.
BCD – Binary Coded Decimal – kod dwójkowo-dziesiętny, który przyporządkowuje cyfrom dziesiętnym od 0 do 9 wektory informacji cyfrowej zwane z tego powodu kęsami BCD.
Najważniejszą zaletą kodów BCD jest prostota konwersji liczb pomiędzy postaciami: dziesiętną i binarną. Typowe zastosowania to: wyświetlacze liczb w postaci dziesiętnej np. kalkulatory.
Przykład liczbie 1937 w kodzie BCD odpowiada: 0001 1001 0011 0111
Poprawka BCD:
0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
---|
+
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
---|
=
0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
---|
Należy zastosować poprawkę BCD, ponieważ w wyniku dodawania nastąpiło przeniesienie pomiędzy segmentami. Poprawka ta polega na dodaniu 6. Ostateczny wynik po poprawce wygląda następująco:
0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
---|
W powyższym przykładzie wszystko jest OK, nastąpiło przeniesienie -> dodano 6. Natomiast jeśli dodamy inne liczby np. 0111 i 1000 czyli 7 i 8 wówczas jako wynik otrzymamy 1111. Z punktu widzenia kodu BCD wynik ten jest nieprawidłowy, ponieważ w tym kodzie największą wartością na danych 4 bitach może być 1001. W tym przypadku należy sprawdzać czy otrzymana w wyniku dodawania liczba w danym segmencie nie jest większa od 9, jeśli tak wówczas trzeba dodać 6. Podsumowując, jeśli mamy liczbę składającą się z dwóch kęsów BCD, tak jak na powyższych schematach, wówczas:
Jeżeli cztery mniej znaczące bity wyniku zawierają liczbę większą od 9 (tzn. od 1001) lub dodatkowe przeniesienie ma wartość 1, to do wartości wyniku należy dodać liczbę 6 (0110);
Jeżeli cztery bardziej znaczące bity wyniku zawierają liczbę większą niż 9 lub przeniesienie (z najbardziej znaczącej pozycji) ma wartość 1, to do wartości wyniku należy dodać liczbę 60 (01100000);
x1 = M1 * PC1
x2 = M1 * PC2
M1, M2 – mantysy
C1, C2 – cechy
Założenie: C2 >C1
Dodawanie
x1 +/- x2 = (M1 +/- M2 * PC2-C1) * PC1
Mnożenie
x1 * x2 = (M1 * M2) * PC2 + C1
Dzielenie
x1 / x2 = (M1 / M2) * PC1 – C2
Rejestr znaczników jest rejestrem mikroprocesora. Jego zawartość stanowi pewna ilość tzw. flag, czyli wartości jednobitowych. Rejestr ten służy przede wszystkim do oznaczania wyników niektórych operacji. Wartości znaczników mogą również wpływać na pracę procesora, sposób wykonania pewnych instrukcji. Niektórymi z nich są znaczniki zera (ustawiany, gdy wynikiem rozkazu jest 0), znacznik przeniesienia (carry – ustawiany np, gdy wynik operacji nie zmieścił w rejestrze), przepełnienia (overflow – ustawiany, gdy wynik operacji ze znakiem nie zmieścił się w rejestrze). Mogą występować także inne flagi, takie jak: znacznik znaku, kierunku, parzystości, zezwolenia przerwań. Znaczniki wpływają np. na sposób wykonania instrukcji rozgałęziających.
Rejestr znaczników (flagowy) – zawiera dodatkowe cechy wyniku wykonywanej operacji, które potrzebne są do podjęcia decyzji o dalszym sposobie przetwarzania informacji. Cechami tymi mogą być: znak wyniku, przekroczenie zakresu, parzysta lub nieparzysta liczba jedynek. Wystąpienie określonej cechy sygnalizowane jest ustawieniem lub wyzerowaniem określonego bitu w rejestrze flagowym. Ustawione bity są znacznikami lub flagami.
Przerwanie (ang. interrupt) jest stanem powodującym zmianę sposobu wykonywania programu procesora. Przerwania można podzielić na programowe i sprzętowe. Przerwanie programowe jest generowane odpowiednią instrukcją procesora wykonywaną podczas przetwarzania programu i przypomina raczej wywołanie podprogramu niż faktyczne przerwanie. Przerwanie sprzętowe to sygnał generowany przez dowolne urządzenie peryferyjne (znajdujący się wewnątrz lub poza mikrokontrolerem), które wymaga natychmiastowej obsługi przez procesor. W momencie zgłoszenia przerwania procesor wykonuje skok do obsługi danego przerwania. Miejsce, gdzie ta procedura obsługi się znajduje jest wyszukiwane w tzw. tablicy wektorów przerwań. Tam na podstawie numeru przerwania jest ustalany adres procedury. Po zakończeniu obsługi przerwania procesor kontynuuje wykonywanie przerwanego programu.
Przerwania maskowalne to takie, które mogą zostać zamaskowane, czyli wyłączone. Oznacza to, że procesor nie będzie reagować na zgłaszanie danego przerwania. Przerwaniem niemaskowalnym zostanie zawsze obsłużone ilekroć zostanie ono zgłoszone i nie można tego wyłączyć. Np. w procesorach AVR niemsakowalne jest tylko 1 przerwanie – reset.
implikowane – dane operandu są pobierane z określonego (wg kodu rozkazu) rejestru ogólnego przeznaczenia oraz akumulatora, wynik w akumulatorze
natychmiastowe – (dane/dana operandu są umieszczone bezpośrednio w kodzie rozkazu) dotyczy sytuacji kiedy do kodu rozkazu dołączony jest argument. Takie rozkazy są co najmniej 2-bajtowe
bezpośrednie – (dane umieszczone w rejestrze procesora) odbywa się przez powiązanie kodu rozkazu z adresem. Umożliwia adresowanie wewnętrznej pamięci RAM, SFR i adresowanie bitów
indeksowe – (dane operandu są pobierane z pamięci. Adres jest ustalany na podstawie wartości jednego z rejestrów indeksowych oraz przesunięcia zawartego w kodzie programu.) to jedyny sposób na pobieranie stałych z pamięci ROM, umożliwia obsługę tablic. Rozkaz wykorzystuje zawartość akumulatora i wcześniej zapisaną wartość rejestru pomocniczego DPTR. Adres stałej jest tworzony przez sumowanie zawartości DPTR z zawartością akumulatora.
postindeksowe – dana jest pobierana z pamięci. Adres jest ustalany na podstawie rejestru indeksowego oraz przesunięcia. Przesunięcie jest odczytywane z pamięci na podstawie adresu zawartego w kodzie programu
pośrednie – dana operandu pochodzi z pamięci, której adres jest określany na podstawie zawartości innej komórki pamięci. Tej adres jest z kolei umieszczony w kodzie.
względne – adres danej operandu jest ustalany na podstawie aktualnego wskaźnika instrukcji oraz przesunięcia z kodu programu
rejestrowe bezpośrednie służy do pobierania lub lokowania argumentu w rejestrach roboczych Rr. Pobieranie argumentu a rejestru roboczego wymaga wcześniejszego wprowadzenia danej do rejestru
pośrednie indeksowe wykorzystuje do adresowania argumentu rejestry indeksowe lub rejestr pomocniczy DPTR, kod rozkazu zajmuje 7 bitów
//uzupełnienie
Tryb natychmiastowy:
Tryb rejestrowy:
Tryb rejestrowy pośredni:
Tryb pośredni:
Tryb bezpośredni
Tryb indeksowy:
`
Dekoder adresu jest urządzeniem, które na podstawie niektórych linii adresowych określa fizycznie kość, z udziałem której odbywa się transmisja danych. Kod na podstawie wybranych linii adresu decyduje któremu układowi ustawić wyprowadzenie CS (chip select) w stan wysoki. Pozostałe moduły pamięci będą mieć linie danych w stanie wysokiej impedancji. Przykładem dekodera adresu jest układ 74154 lub multiplekser z wejściem zwartym do 1.
Na ramkę składają się: bity danych, bit startu (znacznik początku ramki), bit parzystości oraz bity stopu (znacznik końca ramki). Ramka może zawierać od 5 do 8 bitów danych. Bit startu jest obowiązkowy, natomiast liczba bitów stopu może wynosić 1 lub 2. Bit parzystości jest wykorzystywany do zabezpieczenia danych przed przekłamaniem podczas przekazu. Może oznaczać parzystą lub nieparzystą liczbę ustawionych bitów w polu danych. Bit ten może być ustawiony na stałe lub też może być na stałe wyzerowany, może być także pominięty.
W transmisji synchronicznej równolegle do sygnałów danych jest przesyłany sygnał taktujący. Próbkowanie danych na liniach danych odbywa się w określonym momencie przejścia sygnału zegarowego (zbocze narastające lub opadające).
W trybie asynchronicznym nie ma oddzielnej linii zegarowej, a dane są przesyłane w takt wewnętrznego sygnału zegarowego, który jest generowany oddzielnie w nadajniku i odbiorniku. Warunkiem prawidłowego przesyłania danych w asynchronicznym sposobie transmisji jest to, aby nadajnik i odbiornik miały ustawioną tą samą częstotliwość wspomnianych sygnałów zegarowych. Dane najczęściej są próbkowane z częstością 16 razy większą od częstości przesyłania kolejnych bitów. Nadpróbkowanie ma na celu zapewnienie, że żadna dana nie zostanie przekłamana w czasie transmisji.
Pamięć cache jest szybką pamięcią pośredniczącą w przesyłaniu danych pomiędzy pamięcią RAM a innymi układami np. procesorem. Pamięć cache ma znacznie mniejszy czas dostępu niż pamięć RAM. Cache jest wykorzystywana w procesorach, gdzie umieszczane są rozkazy do wykonania. Ich pobieranie z tej pamięci jest znacznie szybsze niż z RAM, co pozwala zmniejszyć czas ich wykonywania. Pamięć cache często jest też instalowana w dyskach twardych oraz napędach DVD-RW.
Pamięć podręczna cache ma czas dostępu poniżej 10µs. Wadą jest niewielka pojemność i duża cena. Jednak dodanie niewielkiej pojemności pośredniej między powolną pamięcią RAM a szybkim mikroprocesorem daje efekt przyśpieszenia mikrokomputera.
Przechowuje ona porcje danych pobrane z RAM, które z dużym prawdopodobieństwem będą potrzebne mikroprocesorowi. Możemy przyjąć trzy sposoby podłączenia pamięci cache: boczne, w linii, obustronnie.
Stos (ang. LIFO, Last In, First Out; ostatni na wejściu, pierwszy na wyjściu) – liniowa struktura danych, w której dane dokładane są na wierzch stosu i z wierzchołka stosu są pobierane. Ideę stosu danych można zilustrować jako stos położonych jedna na drugiej książek – nowy egzemplarz kładzie się na wierzch stosu i z wierzchu stosu zdejmuje się kolejne egzemplarze. Elementy stosu poniżej wierzchołka stosu można wyłącznie obejrzeć, aby je ściągnąć, trzeba najpierw po kolei ściągnąć to, co jest nad nimi.
Przykładowe instrukcje:
Push – odłożenie obiektu na stos
Pop – ściągnięcie obiektu ze stosu i zwrócenie jego wartości
Call – odłożenie adresu następnej instrukcji na stos
Ret – ściągnięcie adresu ze stosu; powrót z podprogramu
Pamięć SRAM w układach AVR powierzono dodatkową i istotną rolę. Poza miejscem przechowywania danych, pamięć ta stanowi jednocześnie stos mikrokontrolera. Pamięć stosu wykorzystana może być do tymczasowego przetrzymywania zmiennych lokalnych oraz zapamiętywania adresów powrotu przy wywoływaniu podprogramów.
Dokładanie danych na stos (push) powoduje dekrementację wskaźnika stosu, a ich ściąganie (po) jego inkrementacje. Konsekwentnie wywołanie podprogramu (call, wystąpienie przerwania) zmniejsza wartość tego wskaźnika (przesyła na stos adres powrotu), powrót( Ret, reti) jego zwiększenie. W przypadku skoków na stos odkładany jest licznik programu o długości 2 bajtów.
//Z wikipedii – analog.
Architektura 16-bitowa – jest to potoczna nazwa architektury procesora posiadającego wewnętrzne rejestry o długości 16 bitów. Ten fakt przekłada się bezpośrednio na sposób przetwarzania danych w komputerze w porcjach tejże wielkości. Należy podkreślić, że termin architektura 16-bitowa nie odnosi się do długości szyny danych oraz możliwości adresowych takiego procesora (długości szyny adresowej). Przykładowo: 16 bitowy procesor 8088 posiada 8 bitową szynę danych (co oznacza, że podczas jednego cyklu odczytu z pamięci może odczytać 8 bitów) oraz 20 bitową szynę adresową (co z kolei umożliwia mu adresowanie 220, czyli megabajt pamięci).
Pierwszym na świecie mikroprocesorem 16-bitowym był TMS9900 wyprodukowany przez firmę Texas Instruments w 1976 roku.
Procesory 16-bitowe stosunkowo dawno wyszły z użycia domowego, obecnie stosowane są głównie w sterownikach przemysłowych i systemach wbudowanych.
Procesory wykonane w tej architekturze to np.:
* Intel : seria 8086 aż do 80286
* Zilog : seria Z800
* AMD : AM29116
Licznik jest układem służącym do zliczania impulsów pochodzących z zewnętrznego źródła. Czasomierz jest układem bardzo podobnym do licznika z tym, że zliczane są impulsy zegarowe pochodzące z oscylatora.
Jednym z najbardziej popularnych chipów kontrolujących pracę wyświetlacza LCD jest HD44780, wdrożony przez japońską firmę Hitachi. Na poniższym rysunku przedstawiony został model typowego wyświetlacza LCD opartego na HD44780.
Rys. 1 Typowa budowa wewnętrzna modułu LCD
W wyświetlaczach LCD opartych na sterowniku HD44780 zasadnicze pole odczytowe sterowane jest poprzez 3 grupy sygnałów. Dwie grupy sygnałów generowane są bezpośrednio z kontrolera, natomiast trzecia grupa pochodzi od dodatkowych układów tzw. driverów LCD. Ilość tych dodatkowych driverów jest ściśle zależna od ilości wyświetlanych znaków, ponieważ jeden driver może obsługiwać maksymalnie do 16 znaków. Cały moduł jak widać na rys. 1 sterowany jest przy użyciu 11 linii sterujących. Oprócz tego do wyświetlacza należy jeszcze podłączyć zasilanie (VDD) oraz masę (VSS). Przewód V0 służy natomiast do regulacji kontrastu. Moduły LCD z reguły zasila się napięciem +5V.
Moduły LCD posiadają ponadto 3 rodzaje pamięci wewnętrznej:
pamięć generatora znaków CG ROM (255 znaków)
pamięć wyświetlacza DD RAM (80 znaków)
pamięć znaków użytkownika CG RAM (8 znaków)
CG ROM (czyli Charakter Generator ROM) jest to wbudowana w strukturę sterownika HD44780 pamięć typu ROM, w której umieszczone są kombinacje zgaszonych i zapalonych pikseli w matrycy danego znaku. DD RAM (czyli Display Data RAM) to natomiast tzw. pamięć wyświetlania. Jest ona taka sama dla wszystkich rodzajów wyświetlaczy i wynosi 80 znaków. Wobec tego jednocześnie do modułu wyświetlacza można zapisać 80 znakową informację, co powoduje, że jeżeli dany wyświetlacz ma mniejsze pole odczytowe niż 80 znaków, wówczas na LCD pojawią się tylko znaki z wpisanego tekstu.
Na rys. 2 zaznaczonych zostało 11 sygnałów sterujących. Osiem z nich - oznaczonych jako D0-D7 - to typowa ośmiobitowa linia danych, przeznaczona do wymiany informacji z kontrolerem sterującym.. Sygnał R/W (Read/Write) ustala kierunek komunikacji z wyświetlaczem LCD, sygnał RS ustala tryb pracy jako transmisję danych bądź instrukcji. Natomiast E (Enable) umożliwa odczyt sygnałów wejściowych. Na rys. 3 przedstawiony został cykl zapisu jak i odczytu danych z modułu LCD.
Rys. 3 Przebiegi charakterystyczne sygnałów sterujących LCD przy zapisie i odczycie
Jak można zaobserwować na rys. 3, aby zapisać daną lub instrukcję do LCD należy kolejno:
ustawić odpowiedni poziom na linii RS (‘0’ jeśli zapisywana jest instrukcja i ‘1’ jeśli zapisywana jest dana); na linii R/W ustawić ‘0’ (ponieważ dokonywany jest zapis); podać na linie D0…D7 daną lub instrukcję; w tym czasie linia E powinna znajdować się w stanie niskim;
następnie na linie Enable należy podać impuls o czasie trwania tEN, który minimalnie powinien wynosić 450ns; podczas opadającego zbocza dane z szyny danych zostają „fizycznie” zapisane do modułu LCD
po tym zboczu należy jeszcze przez okres tH, który minimalnie powinien wynosić 20ns, podtrzymać dane na liniach D0…D7;
po okresie tH stan na liniach RS, R/W oraz na szynie danych jest nieistotny; moduł wykonuje teraz wewnętrzne operacje zależne od wpisanych danych lub instrukcji;
W tabeli 1 przedstawione zostały instrukcje, które pozwalają sterować wyświetlaczem m.in. pozwalają wyczyścić wyświetlacz czy też włączyć funkcję migania kursora.
Tabela 1. Zbiór instrukcji służących do sterowania LCD
Instrukcja | Dane | Opis | Czas wykonania |
---|---|---|---|
RS | R/W | D7 | |
Clear display | 0 | 0 | 0 |
Return home | 0 | 0 | 0 |
Entry mode set | 0 | 0 | 0 |
Display ON/OFF | 0 | 0 | 0 |
Cursor & display shift | 0 | 0 | 0 |
Function set | 0 | 0 | 0 |
Set CG RAM address | 0 | 0 | 0 |
Set DD RAM address | 0 | 0 | 1 |
Read busy flag | 0 | 1 | BF |
Write data to CG or DD RAM |
1 | 0 | Dana do zapisu |
Read data from CG or DD RAM |
1 | 1 | Odczytana dana |
I/D = 1 Zwiększanie (+1) I/D = 0 Zmniejszenie (-1) S/C = 1 Przesuwanie napisu S/C = 0 Przesuwanie kursora R/L = 1 Przesuwanie w prawo R/L = 0 Przesuwanie w lewo DL = 1 Interfejs 8-bitowy DL = 0 Interfejs 4-bitowy N = 1 2 linie N = 0 1linia F = 1 znaki 5x10 punktów F = 0 znaki 5x7 punktów BF = 1 Moduł zajęty BF = 0 Gotowy na następną instrukcję S = 1 Przesuwanie całej zawartości napisu DD RAM Bity nie mające znaczenia „▪” |
DD RAM: Pamięć znaków CG RAM: Pamięć generatorów znaków ACG: Adres w pamięci CG RAM ADD: Adres w pamięci DD RAM AC: licznik (wskaźnik) adres w pamięci DD lub CG RAM |
|
Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku firmy Hitachi posiada układ automatycznego resetowania modułu po włączeniu napięcia zasilającego (‘Internal reset circuit’). Inicjalizacja automatyczna trwa około 10ms i podczas tego okresu wyświetlacz nie przyjmuje żadnych rozkazów.
Wartości początkowe są następujące:
wyświetlacz wygaszony (‘display clear’)
8-bitowa szyna danych (‘function set’ DL=1)
wyświetlanie 1 linii (‘function set’ N=0)
matryca znaku 5x7 punktów (‘function set’ F=0)
zwiększanie adresu (‘entry mode set’ I/D=1)
brak przesuwania (‘entry mode set’ S=0)
pamięć DD RAM jest spacjami, natomiast pamięć CG RAM jest wypełniona przypadkowymi znakami
Układ 8255 jest układem uniwersalnych portów wejścia/wyjścia. Układ jest wyposażony w 2 porty 8 bitowe (A i B) i dwa porty 4 bitowe (oznaczone jako port C). Tryb zerowy jest podstawowym trybem pracy układu. Każdy z portów (łącznie z obiema połówkami portu C) może pracować niezależnie od pozostałych jako wejście lub wyjście. Do sterowania układem wykorzystano 8 bitów danych, 2 bity adresu, linię CS (chip select) oraz linie RD i WR. Wyjścia portów są wyposażone w zatrzaski, z kolei wejścia nie są wyposażone w zatrzaski. Zapisanie wartości do odpowiedniego rejestru przez procesor spowoduje ustawienie żądanego stanu portów. Odczyt portów odbywa się również przez określony rejestr układu.
W momencie włączenia zasilania procesor x86 rozpoczyna wykonywanie programu od adresu 0xFFFF:0x0000. W trakcie uruchamiania komputera wykonywany jest tzw. POST (Power-On Self Test) w trakcie którego wykonywane jest sprawdzenie podstawowych podzespołów komputera. Przebieg POST zależy od tego, czy wykonano zimny, czy gorący start komputera. W trakcie zimnego startu sprawdzane są takie komponenty jak: procesor, pamięć ROM, RAM, układy pomocnicze, klawiatura, karty rozszerzeń, dyski. W trakcie gorącego startu pomijany jest test pamięci RAM. Następnie rozpoczyna się wykonywanie programu zawartego w pamięci ROM. Następuje inicjalizacja kart rozszerzeń, ustalenie wektorów przerwań BIOS oraz załadowanie sektora MBR pierwszej stacji dysków i jego wykonanie.
Największą liczbą ujemną zapisaną w tym formacie będzie liczba dziesiętna -0,0625, która ma reprezentację bitową:
1 11111111111,1111
Przykłady rozkazów rozgałęziających (AVR ATMEGA):
Mnemonik | Opis | Operacja |
---|---|---|
JMP k | Skok bezpośredni | PC = k |
RJMP | Skok względny | PC = PC + k + 1 |
CALL k | Skok bezpośredni | PC = k |
RET | Powrót z procedury | PC = STACK |
SBRC Rr, b | Pomiń jeśli bit w rejestrze równy 0 | If (Rr(b)=0) PC=PC+2 or 3 |
SBIS P, b | Pomiń jeśli bit w rejestrze I/O równy 1 | If (P(b)=1) PC=PC+2 or 3 |
BREQ k | Skok gdy równe | If (Z=1) PC=PC+k+1 |
BRNE k | Skok gdy nierówne | If (Z=0) PC=PC+k+1 |
BRSH k | Skok gdy większe lub równe | If (C=0) PC=PC+k+1 |
BRLO k | Skok gdy mniejsze | If (C=1) PC=PC+k+1 |
CALL k | Skok bezpośredni | PC = k |
Drgania styków jest to efekt niepożądany jaki występuje w momencie wciskania i zwalniania przycisku. Objawia się on występowaniem na zmianę losowych przełączeń między stanami wysokimi i niskimi. Efekt ten utrzymuje się przez kilkanaście milisekund. Dobrym sposobem eliminacji drgań jest zastosowanie pętli czasowej wykonywanej po wykryciu wciśnięcia przycisku tak długo, aby stan wejścia był już stabilny.
Układ PWM jest to układ, który generuje sygnał prostokątnym o regulowanym wypełnieniu. PWM można zbudować wykorzystując czasomierz, który będzie zmieniał stan wyjścia przy przepełnieniu oraz przy zrównaniu wartości licznika z pewną określoną wartością. Licznik taki zawsze będzie zliczać w górę. Od wartości porównywanej będzie zależeć wypełnienie impulsów. Taki tryb pracy układu PWM został zaimplementowany w mikrokontrolerach serii AVR i nazywa się Fast PWM.
Podział ze względu na symetrie:
wszystkie procesory traktowane sa na równi - system bardziej wydajny - SMP (ang. Symmetric Multi Processing)
niektóre procesory maja przypisane ścisłe zadania - łatwiejszy projekt, na przykład jeden procesor odpowiada na przerwania, drugi odpowiada za komunikacje wejścia wyjścia - ASMP (ang.Asymetric Mutli Processing)
Podział ze względu na potok danych i programu
SISD (ang. Single Instruction, Single Data) - jeden strumień instrukcji, jeden strumień danych
MIMD (ang. Multiple Instruction, Multiple Data) - wiele strumieni instrukcji, wiele strumieni danych
SIMD (ang. Single Instruction, Multiple Data) - jeden strumień instrukcji, wiele strumieni danych
MISD (ang. Multiple Instruction, Single Data) - wiele strumieni instrukcji, jednej strumień danych
Stan wysokiej impedancji jest to stan, w którym bramka na wyjściu nie posiada ani stanu wysokiego, ani niskiego. Jej wyjście jest praktycznie odizolowane od wejść. Dzięki temu możliwe jest proste zrealizowanie portów dwukierunkowych bez ryzyka uszkodzenia bramek (w wyniku połączenia z sobą dwóch wyjść), dwukierunkowych magistral danych. Stan wysokiej impedancji jest aktywowany poprzez ustawienie stanu wysokiego na określonym wejściu bramki trójstanowej.
MMX jest dodatkowym zestawem instrukcji wprowadzonym w procesorach Pentium MMX. MMX pozwala za pomocą jednej instrukcji wykonywać operacje na zbiorze kilku danych (SIMD – single instruction, multiple data). Instrukcje te służą do operowania liczbami całkowitymi (z i bez znaku). Instrukcje MMX pozwalają również na przeprowadzanie obliczeń z tzw. nasycaniem. Dzięki temu dodanie dwóch liczb, które przepełniłyby rejestr spowoduje ustawienie w nim najwyższej możliwej wartości. Zestaw instrukcji SSE (Streaming SIMD Extensions) został wprowadzony do procesorów Pentium III. Pozwala na wykonywanie instrukcji SIMD na liczbach zmiennoprzecinkowych.
Procesory PIC firmy MICROCHIP są procesorami posiadającymi cechy architektury RISC to oznacza, że posiadają zminimalizowaną listę rozkazów. Zaletę procesorów PIC jest przede wszystkim:
Tylko 35 pojedynczych rozkazów
Wszystkie rozkazy są wykonywane w jednym cyklu, wyłączając rozkazy skoków, które realizowane są w dwóch cyklach maszynowych
Maksymalna częstotliwość zegara to 20 MHz dla procesorów z pamięcią typu EPROM oraz 10 MHz dla procesorów z pamięcią programu typu EEPROM i FLASH
14-bitowa długość słowa rozkazu (dwunastobitowa w PIC 12C508)
Ośmiobitowa długość słowa pamięci danych RAM oraz rejestrów sterujących
15 rejestrów specjalnych służących do konfigurowania układu
Ośmiopoziomowy stos (dwupoziomowy dla PIC 12C508)
Natychmiastowy (bezpośredni) i pośredni typ adresowania
Ośmiobitowy licznik z ośmiobitowym podzielnikiem wstępnym
Wykonanie w technologii CMOS
Szeroki zakres napięć zasilających oraz niewielki pobór prądu (<2mA dla 5V oraz Stand-by 26uA)
W procesorze PIC 16F84 znajdują się dwa bloki pamięci:
Blok pamięci programu
Blok pamięci danych
Pamięć danych podzielona jest na dwa obszary. Pierwszy obszar to rejestry ogólnego specjalnego przeznaczenia SFR, które służą do sterowania oraz kontrolowania mikroprocesora, drugi zaś to rejestry ogólnego przeznaczenia – GPR służące jako pamięć operacyjna (statyczna) RAM. Pamięć danych podzielona jest na banki w PIC 16F84 znajdują się dwa banki. Bezpośredni dostęp do rejestrów jest możliwy tylko w obrębie jednego banku
Rejestr Statusowy:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
IRP | RP1 | RP0 | ~TO | ~PD | Z | DC | C |
IRP – bit wybierający bank (używany do adresowania pośredniego)
RP1, RP0 – do selekcji banków (używany do adresowania pośredniego)
PD – Power down
Z – wskaźnik zera
DC – przeniesienie połówkowe
C – wskaźnik przeniesienia
| - bitowe OR
& - bitowe AND
~ - negacja bitowa
1<<n – przesuwanie bitowe (w tym przypadku 1 w lewo o n bitów)
^ - bitowe XOR
Ustawianie bitu n w słowie A:
A |= 1<<n
A = A | 1<<n
Ustawienie bitu m i k w słowie A:
A |= 1<<m | 1<<k
Wyzerowanie bitu n w słowie A:
A &= ~(1<<n)
A = A & ~(1<<n)
Wyzerowanie bitów n, m, k i k+1 w słowie A:
A &= ~(1<<n | 1<<m | 3<<k)
Negacja bitu n w słowie A:
A ^= 1<<n
A = A ^ (1<<n)
Negacja bitu n i k+2 w słowie A:
A ^= (1<<n | 4<<k)
Kopiowanie bitów B6, B5, B4 na bity A4, A3, A2
A = (A & 0xE3) | (B>>2 & 0x1C)
Magistrala ISA jest to 16 bitowa magistrala, taktowana częstotliwością 8MHz, której maksymalna realna przepustowość wynosi ok. 4-5 MB/s. Złącze tej magistrali składa się z dwóch sekcji 62 i 36 stykowej. Doprowadzone jest 16 linii danych (po 8 na każdą z sekcji), cztery napięcia zasilania, w sumie występuje 27 linii adresowych (20 w sekcji podstawowej i 7 sekcji 36stykowej), linia reset, linie przerwań, linie związane z komunikacją w kanałach DMA, dwa sygnały oscylatora, oraz inne linie sterujące. Występują dwa rodzaje kart tzw. Długie czyli posiadającą także sekcje 36 stykową. Karty te operują na słowie 16 bitowym, mają dostęp do większej ilości przerwań oraz kanałów DMA. Drugi rodzaj kart to karty krótkie czyli mające tylko sekcję 62 stykową. Urządzenie na tych kartach operują na słowie 8 bitowym.
ISA parametry:
8 bitowa
Ilość kontaktów 62
Napięcia zasilające +5V,-5V,-12V, +12V
Częstotliwość pracy 4.77MHz (1MB/s)
16 bitowa
Kompatybilna z magistralą ISA 8 bitową
Szerokość szyny 16 bitów
Ilość kontaktów 98
Napięcia zasilające +5V,-5V,-12V, +12V
Częstotliwość pracy 8.33MHz (2MB/s)
Magistrala PCI (ang. Peripheral Component Interconnect)
PCI 2.0 – rok 1993, 32 bity, 33MHz, 133MB/s, 5V (12V, -12V, -5V)
PCI 2.1 – rok 1994, 64 bity, 33MHz, 533MB/s, 5V (12V, -12V, -5V)
PCI 2.2 – rok 1999, 64 bity, 33MHz, 533MB/s, 5V/3.3V (12V, -12V, -5V)
PCI 2.3 – rok 1999, 64 bity, 33MHz, 533MB/s, 3.3V (12V, -12V, -5V)
Układ Watchdog służy do wykluczenia możliwości „zawieszania się” mikrokontrolera, np. na skutek zaistniałych zakłóceń w systemie czy poprzez wykonywanie nieskończonych, niepożądanych pętli programu.
Jeśli włączony licznik watchdog’a nie zostanie w określonym czasie wyzerowany, nastąpi wygenerowanie impulsu resetującego mikrokontroler. Taktowanie odbywa się poprzez niezależny wbudowany oscylator.
W mikrokontrolerze Atmega16 watchdog jest taktowany oscylatorem o częstotliwości pracy ok. 1MHz. Włączanie i konfigurowanie watchdog’a odbywa się przez rejestr WDTCR. W rejestrze tym znajdują się bity odpowiedzialne za włączenie i odblokowanie watchdog’a (WDE i WDTOE) oraz bity WDP2:0, które odpowiadają za preskaler. Za pomocą tych bitów dobierany jest czas, jaki upływa od zerowania watchdog’a do wygenerowania przez niego impulsu resetującego. Czas można dobierać w zakresie od ok. 16ms (stan 000) do ok. 2,2s (stan 111).