« poprzedni punkt | następny punkt » |
Budowa i działanie sterownika łącza równoległego zostanie przedstawiona na przykładzie typowego układu opracowanego przez firmę Intel, znanego jako układ 8255.
Rysunek XIV.2. Końcówki układu 8255
Na rysunku XIV.2 pokazano końcówki układu 8255. Z lewej strony układu pokazano końcówki służące do połączenia z mikroprocesorem. Jest 8 dwukierunkowych linii magistrali danych, dwa wejścia adresowe A1 i A0 służące do wyboru jednego z czterech rejestrów wewnętrznych sterownika oraz 4 wejściowe sygnały sterujące. Sygnały sterujące są aktywne niskim poziomem napięcia, na co wskazują kreski nad nazwą sygnału. Sygnał na wejściu (chip select) uaktywnia cały układ. Adresy wysyłane przez mikroprocesor na magistralę adresową są dekodowane, a wyjścia dekodera są dołączane do wejść
różnych sterowników. Jeśli na magistrali adresowej znajdzie się adres wskazujący dany sterownik, to na jego wejściu
pojawi się niski poziom napięcia i sterownik stanie się aktywny. Sygnały
i
odbierane z mikroprocesora (odpowiednio w czasie odczytu lub zapisu portu) wskazują na moment kiedy na magistrali danych znajduje się właściwy bajt. W czasie cyklu odczytu bajt jest odczytywany przez mikroprocesor (
), a w czasie cyklu zapisu jest wysłany przez mikroprocesor (
) i odczytywany przez sterownik. Przed rozpoczęciem pracy sterownik musi zostać zaprogramowany. Aby to było możliwe sterownik musi otrzymać sygnał zerowania
. Dopiero po pojawieniu się tego sygnału sterownik można zaprogramować na odpowiedni tryb pracy.
Omawiany sterownik posiada 3 porty ośmiobitowe oznaczane literami A, B i C. Każdy port posiada rejestr i układ sterowania. Zadaniem układu sterowania jest ustawienie odpowiedniego trybu pracy rejestru, np. ustawienie go jako rejestr wyjściowy lub wejściowy. Sygnały wejściowe A0 i A1 wybierają jeden z portów lub rejestr sterujący. Programista chcąc ustawić odpowiedni tryb pracy sterownika przesyła do rejestru sterującego właściwe słowo rozkazowe.
Urządzenia zewnętrzne dołącza się do sterownika poprzez trzy grupy dwukierunkowych linii po 8 linii każda. Są to linie wejściowe lub wyjściowe w zależności od zaprogramowania portu. Porty można je ustawić w jednym z trzech trybów pracy:
- binarnym (ośmiobitowy rejestr wejściowy lub wyjściowy),
- jednokierunkowej transmisji z potwierdzeniem (dotyczy portów A i B),
- dwukierunkowej transmisji z potwierdzeniem (dotyczy portu A).
W binarnym trybie pracy port może pracować jako wejściowy lub wyjściowy. Wejściowy binarny tryb pracy polega na tym, że dane z linii wejściowych portu są wpisywane do jego wewnętrznego rejestru. Potem, w czasie wykonania przez mikroprocesor rozkazu IN z adresem wskazującym na dany port, mikroprocesor może odczytać zawartość tego rejestru. W wyjściowym trybie pracy mikroprocesor zapisuje rejestr portu wykonując rozkaz OUT z adresem wskazującym dany port. Na liniach wyjściowych portu pojawią się stany odpowiadające zawartości rejestru.
Jednokierunkowa transmisja z potwierdzeniem jest to tzw. transmisja równoległa. Polega ona na tym, że współpracują ze sobą dwa układy: nadajnik i odbiornik. Są one połączone 10 liniami. Na swoich ośmiu liniach wyjściowych danych nadajnik wysyła transmitowany bajt. Odbiornik jest informowany o tym, że na liniach danych jest właściwy bajt sygnałem strobu wysyłanym przez nadajnik dziewiątą linią. Odbiornik, gdy wczyta przesłany bajt, sygnalizuje gotowość do następnej transmisji wysyłając po dziesiątej linii sygnał potwierdzenia. Mogą się zdarzyć dwie sytuacje:
1. nadajnikiem jest układ 8255 a odbiornikiem urządzenie wyjściowe,
2. nadajnikiem jest urządzenie wejściowe a układ 8255 jest odbiornikiem.
Rozpatrzmy kolejno te dwa przypadki. W pierwszym z nich mikroprocesor wykonuje rozkaz OUT, a w drugim rozkaz IN.
Rysunek XIV.3. Przebiegi czasowe w czasie transmisji do urządzenia wyjściowego
Na rysunku XIV.3 pokazano przebiegi czasowe w czasie całego procesu przesyłania zawartości rejestru mikroprocesora do urządzenia wyjściowego. Pokazano przebieg strobu zapisu generowanego przez mikroprocesor w czasie wykonywania rozkazu OUT, przebieg sygnału sterującego
(ang. Output Bufer Full) generowanego przez sterownik jako strob danych na liniach DANE, które łączą sterownik i urządzenie. Pokazano także przebieg sygnału potwierdzenia odebrania danych
generowanego przez urządzenie wyjściowe do sterownika i przebieg na liniach danych. Dodatkowo pokazano przebieg sygnału zgłoszenia przerwania INTR, którym sterownik zgłasza mikroprocesorowi gotowość współpracy gdy urządzenie wyjściowe odbierze przesyłany bajt.
Załóżmy, że poprzednia transmisja (w stosunku do pokazanej na rysunku) skończyła się sygnałem generowanym przez urządzenie wyjściowe, które odczytało z linii DANE bajt wysłany przez sterownik . Wówczas sterownik zgłasza gotowość do przyjęcia następnego bajtu z mikroprocesora wysyłając sygnał przerwania INTR (ang. interrupt request). Aktywny jest wysoki poziom tego sygnału. Pokazane na rysunku XIV.3 przebiegi rozpoczynają się od momentu gdy podczas wykonywania przez mikroprocesor podprogramu obsługi tego przerwania, zostanie wykonany, znajdujący się w tym podprogramie, rozkaz OUT. Na systemowej magistrali sterującej pojawi się strob zapisu
(aktywny niski poziom), na magistrali adresowej adres wybranego sterownika (w tym przypadku zakładamy, że zostanie wybrany układ 8255), a na magistralę danych mikroprocesor wyśle zawartość odpowiedniego rejestru. Mikroprocesor wyśle także, nie pokazany na rysunku, sygnał
(wskazujący na to, że adres na magistrali adresowej dotyczy urządzeń we-wy). Bajt z systemowej magistrali danych zostanie wpisany do rejestru danego portu w układzie 8255. Na liniach wyjściowych portu (DANE) pojawią się stany odpowiadające zapisanemu bajtowi, a na linii
pojawi się sygnał wskazujący urządzeniu wyjściowemu możliwość odebrania bajtu. Ponadto strob
spowoduje zmianę sygnału INTR, świadczącą o zakończeniu współpracy sterownika z mikroprocesorem. Gdy urządzenie wyjściowe odbierze transmitowany bajt, to sygnalizuje ten fakt sygnałem potwierdzenia
(aktywny niski poziom). Kończy się wówczas transmisja i sterownik ponownie ustawia linię INTR w stan żądania przesłania następnego bajtu.
Rysunek XIV.4. Przebiegi czasowe w czasie transmisji z urządzenia wejściowego
Na rysunku XIV.4 pokazano przebiegi sygnałów w czasie procesu przesyłania bajtu z urządzenia wejściowego do rejestru mikroprocesora. Gdy urządzenie wejściowe nie wysyła danych do sterownika, to na liniach DANE jest stan wysokiej impedancji i urządzenie jest odłączone od sterownika. Jeśli urządzenie jest gotowe do transmisji, to wysyła bajt na linie DANE, a linię ustawia w stan aktywny (niski poziom). Urządzenie wejściowe wysyła bajt na linie DANE i jest on zapisywany do rejestru sterownika, skąd może być odczytany przez mikroprocesor. Sterownik potwierdza odebranie bajtu wysyłając do urządzenia sygnał IBF (ang. Input Bufer Full). Jest to potwierdzenie odebrania bajtu. Sygnał strobu
(narastające zbocze) ustawia także linię INTR zgłaszając mikroprocesorowi żądanie obsługi przerwania. Mikroprocesor reagując na ten sygnał wykona podprogram obsługi przerwania. W programie obsługi tego przerwania zostanie wykonany rozkaz IN. W czasie wykonania tego rozkazu mikroprocesor wysyła strob odczytu
(aktywny niskim poziomem) a sterownik wysyła na systemową magistralę danych zawartość rejestru wybranego portu. Mikroprocesor odczytuje bajt z magistrali danych. Strob
zmienia także stan sygnału INTR i IBF sygnalizując gotowość do przyjęcia następnego bajtu z urządzenia.
Rysunek XIV.5. Sygnały wejściowe i wyjściowe układu 8255 w czasie transmisji z potwierdzeniem
Na rysunku XIV.5 pokazano przypisanie końcówkom układu 8255 sygnałów sterujących dla urządzenia wyjściowego (port A) i urządzenia wejściowego (port B). Sygnały sterujące w obu przypadkach wykorzystują linie portu C.
Transmisja dwukierunkowa, która jest realizowana tylko przez port A, jest złożeniem obu wyżej opisanych procesów. W tym trybie pracy wykorzystywane są sygnały ,
,
, IBF i sygnały przerwań. Transmisja dwukierunkowa polega na tym, że sterownik może współpracować z urządzeniem dwukierunkowym. Liniami portu A można odbierać dane z urządzenia i wysyłać dane do urządzenia.
« poprzedni punkt | następny punkt » |