Praca pochodzi z serwisu www.e-sciagi.pl
Rozdział 8.Złożone układy wejścia-wyjścia
W poprzednich rozdziałach położono nacisk na zastosowanie programowalnych układów czasowych i równoległego wejścia-wyjścia. Istotne jest jednak także ich połączenie z mikroprocesorem. W niniejszym rozdziale pokazane są techniki łączenia układów tak, aby ich rejestry znajdowały się w określonej przestrzeni adresowej, a przerwania generowane przez te układy posiadały żądane cechy (np. priorytet, sposób obsługi). Jednocześnie, aby uniknąć niepotrzebnego zaciemniania schematów, pomienięto tu zastosowania tych układów, gdyż zostały one zilustrowane w poprzednich rozdziałach.
Przykład 1.Do mikroprocesora Z-80 dołączyć układy PIO, CTC i 8255. Zadaniem układu CTC jest wytwarzanie opóźnień dla układów 8255 i PIO, pracujących w trybach transmisji wyjściowej z potwierdzeniem. Układ ten powinien zajmować adresy 20 – -23h i posiadać niższy priorytet przerwań. Układ PIO powinien zajmować adresy 40 – -43h i posiadać wyższy priorytet przerwań. Układ 8255 powinien zajmować adresy 60 – -63h i zgłaszać przerwania za pośrednictwem układu CTC tak, aby były to przerwania o najniższych priorytetach. Wszystkie adresy znajdują się w przestrzeni wejścia-wyjścia mikroprocesora Z-80. Zastosować pełne dekodowanie adresów. Zapewnić zerowanie sprzętowe układów PIO, CTC i 8255 po włączeniu zasilania.
Tabela 11. Określanie stanów linii adresowych
Układ
Adresy
Linie A7-A0
CTC
20-23h
001000xx
PIO
40-43h
010000xx
8255
60-63h
011000xx
0aa000xx
Dekoder adresów można wygodnie zrealizować opierając się na w oparciu o układzie 74138. Na początku warto rozpisać przestrzenie adresowe układów w kodzie dwójkowym, aby zorientować się, które linie adresowe należy przyłączyć do wejść bramkujących tego układu, a które do jego wejść adresowych. Ilustruje to tabela 1.
Jedyna tabela, jaka została zamieszczona w tej książce, znajduje się w rozdziale 1. i nosi tytuł „Parametry elektryczne cyfrowych układów scalonych rożnych serii”. Czyżby chodziło o tę tabelę!?
Dwa najmniej znaczące bity adresów (oznaczone w tabeli znakiem x) można pominąć, ponieważ sterują one bezpośrednio odpowiednimi wejściami układów i nie wpływają na sposób pracy dekodera. Następnie należy porównać stan linii adresowych w przestrzeniach poszczególnych układów i odnaleźć te bity adresowe, które się zmieniają. W naszym przypadku są to bity A6 i A5, oznaczone w tabeli znakiem a. Do pełnej realizacji dekodera potrzeba jeszcze jeden bit —– może to być linia A7. Wobec tego linie A4 – -A2 należy wprowadzić na wejścia bramkujące dekodera, przy czym jedna z nich (dowolna) powinna przejść przez bramkę negacji, ponieważ stan aktywny wejścia to „1”. Pozostałe linie adresowe sterują wejściami adresowymi dekodera. I tak wyjście podłączamy na wejście układu CTC, a —– na wejście układu PIO. Nieco więcej uwagi należy poświęcić wejściu układu 8255. Otóż układ ten nie ma wejścia , a więc nie potrafi rozróżnić, czy mikroprocesor odwołuje się do pamięci, czy do układów wejścia-wyjścia. Stan tego sygnału nie jest także sprawdzany w dekoderze. Należy zatem zapewnić (np. przez dołączenie bramki), aby wejście było aktywne tylko wówczas, gdy aktywny jest zarówno sygnał , jak i wyjście dekodera.
Rysunek 8.1.
Brak podpisu.
Do ustalenia priorytetów poszczególnych przerwań należy wykorzystać mechanizmy wbudowane w układy mikroprocesorowe rodziny Z-80. Aby układ PIO miał przerwania o wyższych priorytetach, jego wejście IEI musi być stale utrzymywane w stanie wysokim, natomiast jego wyjście IEO steruje wejściem IEI układu CTC, który także może zgłaszać przerwania, ale o niższych priorytetach. Liczniki 2. i 3. tego układu pełnią funkcję sterownika przerwań wektorowych dla układu 8255, który nie może bezpośrednio współpracować z mikroprocesorem Z-80 w trybie przerwań IM 2. Licznik 2. obsługuje przerwanie od portu A (sygnał IRQA). Licznik 3. obsługuje przerwanie od portu B (IRQB) —– jest to przerwanie o najniższym priorytecie spośród wszystkich przerwań generowanych przez moduł. Aby układ 8255 mógł zgłaszać przerwania, liczniki 2. i 3. muszą być odpowiednio zaprogramowane.
Liczniki 0. i 1. układu CTC wytwarzają odpowiednie opóźnienia czasowe dla portów układów 8255 i PIO. Liczniki te pracują w trybie czasowym, a więc źródłem zliczanych impulsów jest sygnał zegarowy CLK, a wejścia CLK/TRG pełnią funckję sygnałów pobudzających odliczanie. W przypadku układu 8255 pobudzenie powinno nastąpić, gdy sygnał jest aktywny. Licznik powinien zatem reagować na zbocze opadające wejścia CLK/TRG —– ustala się to programowo. Ponieważ wyjście ZC/TO jest aktywne w staniem wysokim, a w niskim, potrzebna jest bramka negacji. W przypadku układu PIO licznik powinien reagować na zbocze narastające sygnału CLK/TRG, ponieważ wyjście RDY jest aktywne stanem wysokim. Wyjście ZC/TO powinno także sterować wejściem poprzez bramkę negacji. Liczniki 0. i 1. nie muszą zgłaszać przerwań, gdyż odpowiednie przerwania są generowane przez porty układów 8255 i PIO.
Wyzerowanie układu CTC po włączeniu zasilania nie nastręcza trudności —– wystarczy jego wejście połączyć z analogicznym wejściem mikroprocesora. Podobnie wygląda sytuacja w układzie 8255, jednak sygnał zerowania mikroprocesora musi przejść przez bramkę negacji. Natomiast w układzie PIO w ogóle nie ma wejścia zerowania. Dlatego też układ ten jest zerowany, gdy sygnał jest aktywny, natomiast i —– nieaktywne. Wynika stąd potrzeba wytwarzania sygnału dla układu PIO, gdy co najmniej jeden z sygnałów i mikroprocesora jest aktywny.
Przykład 2.Do mikroprocesora Z-80 dołączyć układy CTC, 8253 i 8255. Układ CTC pełni funkcję sterownika przerwań wektorowych dla układów 8253 i 8255. Jeden licznik układu 8253 ma wytwarzać opóźnienia dla układu 8255, pracującego w trybie transmisji wyjściowej z potwierdzeniem. Pozostałe liczniki powinny zgłaszać przerwania o najniższych priorytetach. Układ CTC powinien zajmować adresy 20 – -23h, układ 8253 —– 24 – -27h, a układ 8255 —– 3C – -3Fh. Wszystkie adresy znajdują się w przestrzeni wejścia-wyjścia mikroprocesora Z-80. W ćwiczeniu należy zZastosować pełne dekodowanie adresów.
Tabela ...