Układy we/wy można przedstawić jako ciąg komórek, do których można wpisywać lub odczytywać dane. Sterownik każdego urządzenia widziany jest jako pewna grupa rejestrów, do których dostęp ma miejsce za pośrednictwem portów . Port może być traktowany jako sterownik całego urz. (np. port szeregowy) lub jako miejsce w wyróżnionej przestrzeni adresowej we/wy.
Adresy niektórych rejestrów we/wy komputera IBM PC :
0000-001F - ukł. bezp. dost. do pam. DMA 8237A
0040-005F - prog. zegar/licznik 8253
0061-006F - interface równoległy 8255
03F8-03FF - port kom. szeregowej COM1
Adr. portu jest liczbą z zakresu 0 do 1023. Operacje na portach wykonuje się za pom. instr. IN i OUT. Adr. portu można podawać bezpośrednio jako liczbę lub w rej. DX. Wartość pobierana z portu (IN) umieszczana jest w AL lub AX, podobnie jak wartość wysyłana na port (OUT).
Przykłady :
OUT DX, AL
OUT 21h,AX
IN AL,20h
IN AL,DX
Układ DMA (Direct Memory Acces)
Celem ukł. bezp. dost. do pam. jest transfer danych z pam. do pam. lub urz. zewn. z pominięciem procesora. Po otrzymaniu info od urz. zewn. kontroler DMA (8237) zajmuje się wymianą info nie angażując procesora, który w tym czasie może wykonywać coś innego. Ponieważ przesłanie odbywa się między urz. a pam. bez udziału procesora jednostka złącza szyny procesora musi zwolnić sterowanie szyny i przekazać je kanałowi DMA na czas przesłania słowa lub bajtu.
Kontroler DMA może otrzymywać info od kilku urz. zewn. Niezależne rej. i linie wymiany danych nazywają się „kanałami DMA”. 8237A posiada 4 kanały do przesyłu 8-bitowych danych. Jego budowa pozwala na przesyłanie bloków do 64 KB.
Adr. komórki pam., z której lub do której przekazywane są dane znajduje się w rej. aktualnego adr. DMA. Jego zawartość jest zwiększana lub zmniejszana po każdej wymianie bajtu danych. Jednocześnie taka wymiana zmienia stan licznika bajtów danych podlegających transmisji, który po zakończeniu wymiany bloku danych ma wartość zero. Układ 8237 posiada 27 wewnętrznych rej. i może pracować w 4 trybach :
1. Pojedyncze przesłanie - kontroler przesyła tylko jedną daną (bajt lub słowo). Rejestr zliczający jest zmniejszany; po osiągnięciu zera pojawia się stan aktywny na linii TC.
2. Przesyłanie blokowe - kontroler po otrzymaniu sygnału DREQ rozpoczyna przesyłanie bloku danych do czasu wyzerowania licznika danych TC lub sygnału EOP (koniec przekazu) od urz. zewn.
3. Przesyłanie z żądaniem - j.w. przy czym transmisja może być wstrzymana poprzez anulowanie sygn DREQ. Transmisja przebiega do czasu opróżnienia buforów danych urz. peryf., po ponownym włączeniu DREQ transmisja może być kontynuowana. Istota tego trybu jest nastepująca: urz. może nie być w stanie dostarczyć lub przyjąć danej dostatecznie szybko. Przesyłanie zostaje wstrzymane pozwalając procesorowi na dostęp do pam., a następnie wznawiane-gdy urz. będzie znowu w stanie dostarczyc lub przyjąć daną.
4. Praca kaskadowa - wykorzystywana przy podłączeniu więcej niż jednego kontrolera DMA.
Programowanie układu DMA odbywa się przez rej., do których dostęp otrzymuje się przez odpowiednie adresowanie przestrzeni we/wy.
1. Rejestry od 00h do 07h
- przechowanie adr. pocz. obszaru pamięci do transmisji DMA
- przech. bież. adr. pam.
- przech. l. przes. bajtów
- przech. liczn. danych
2. Rejestry od 08h do 0Fh
-programowanie rodzaju pracy i jego kanałów.
Wszystkie rej. są 16-bitowe, co zapewnia dostęp do 64 KB pamięci. By można było pracować w całej przestrzeni adr. (1MB) DMA ma 4 4-bitowe „rejestry stron”.
Interface równoległy 8255
Układ 8255 zawiera 3 porty, które mogą być konfigurowane indywidualnie. Porty te, obok pełnienia typowych funkcji portów we/wy mogą spełniać funkcję ukł. transm. równoległej. 8255 posiada 4 rej. Pierwsze 3 odpowiadają portom A, B, C, czwarty jest rej. ster. Wpisanie do niego odpowiedniego bajtu ustawia tryby pracy portów. W trybie 0 porty A, B, C mogą pracować jako normalne porty we lub wy. Zapisu lub odczytu dokonuje się za pośrednictwem odpowiednich rej. Port C ma możliwość równoczesnej pracy starszej i młodszej połówki jako niezależnych we lub wy. Posiada on również możliwość indywidualnego ustawiania poszczególnych linii. Można to uzyskać przez wyzerowanie MSB rej. ster. (normalnie jest „1”). Bity 3, 2, 1 zawierają nr linii, natomiast bit 0 zawiera stan linii („0” lub „
1”).
Tryb 1 portów A, B pozwala na prowadzenie trans. równol. Linie portu C spełniają wówczas względem nich funkcje kontrolne. Do portu A przypisane są linie PC3--PC7, do portu B - PC0-PC2.
Tryb 1 portu A jako wy
Wpisanie przez procesor bajtu do portu A powoduje stan aktywny na linii OBF (Output Buffer Full) - PC7, co oznacza że na porcie A znajduje się gotowy do odczytu bajt. Urz. potwierdza to imp. ACK (acknowledge) - PC6, którego odebranie powoduje zdjęcie sygn. OBF, oraz wygenerowanie INT (INTR=1) - PC3. Zapis kolejnego bajtu do A przez procesor zeruje INTR. Po przesłaniu wszystkich danych należy zlikwidować sygn. przerw. przez wyzerowanie wewn. przerz. INTEA. Należy tego dokonać zapisując poprzez rej. ster. stan „0” na linię PC6 (ACK).
Tryb 1 portu B jako we
Sygn. STB (STroBe) - PC2 podawany przez urz. zewn. powoduje zapamiętanie bajtu z portu B wewnątrz 8255. Ustawiany jest sygn. IBF (Input Buffer Full) - PC1, informujący urz. zewn. że bufor we jest pełny. Zakończenie sygn. STB powoduje wysłanie przerw. do procesora przez linię INTR - PC0. Obsługa przerw. powinna zapewnić odczyt zapamiętanego bajtu. Odczyt powoduje zdjęcie sygn. INTR oraz zakończenie sygn. IBF, co pozwala na przesłanie kolejnego bajtu z urz. zewn.
Port A posiada dodatkowo tryb 2, w którym pracuje jako we/wy.
Uniwersalny nadajnik/odbiornik transmisji szeregowej synchronicznej lub asynchronicznej 8251.
Układ 8251 sterowany programowo przez procesor przyjmuje od niego dane równolegle i wysyła je jako ciąg sygn. szer. Jednocześnie może przyjmować dane szer. od urz. zewn. i przekazywać je równol. do procesora.
Nadajnik
Bufor nadajnika przyjmuje dane równol. z bufora magistrali i przekształca je w szer. ciąg bitów. Po dołączeniu odpowiednich znaków lub bitów zw. z rodzajem transmisji wysyła je pod kontrolą ukł. ster. przez wyjście TxD. Sygn. TxRDY (Transmitter ReaDY) przekazuje procesorowi info o gotowości do przyjęcia nastepnego bajtu. Po zakończeniu transm. przy braku następnego znaku pojawia się sygn. TxE (Transmitter Empty). Przy transm. synchro „1” na tym wyjściu oznacza, że znak nie został jeszcze przyjęty i wysyłane będą autom. znaki synchronizacji. Szybkość transm. zależy o częstotliwości sygn. podawanych na wejście TxC.
Odbiornik
Przyjmuje dane szer. we RxD i przetwarza je do postaci równol. RxRDY sygnalizuje przyjęcie znaku i gotowość do odczytu przez procesor. Jest ono kasowane po odczycie znaku. Szybkość przyjmowania znaków jest sterowana sygn. zegar. podawanym na we RxC. Przy transm. synchro korzysta się s sygn. SYNDET (SYNchronicityDETection), który może być we lub wy. Jako we używany jest przez urz. zewn. do wskazania, że od nastepnego imp. RxC należy rozpocząć odbiór danych. Jako wy potwierdza odbiór zn. synchro. przez 8251.
Programowanie 8251
Rozkazy sterowania dzielą się na 2 grupy:
-ustawiające rodzaj pracy
-wykonawcze
Pierwsze określają sposób transmisji (synchro/asynchro). Muszą to być pierwsze rozkazy po każdym zerowaniu, ponieważ wszystkie rozkazy wykonawcze są rozpatrywane w kontekście ustawionego trybu.
Sekwencja rozkazów :
1. ustawienie trybu pracy
2. znak synchronizacji 1
3. znak synchronizacji 2
4. rozkaz wykonawczy
5. dane
6. rozkaz wykonawczy
7. dane
8. rozkaz wykonawczy RESET
9. patrz 1
Programowalny zegar/licznik 8253
Układ 8253 może pełnić nastepujące funkcje :
-zegar generujący odpowiedni sygnał po ustawianym programowo opóźnieniu;
-dzielnik częstotliwości;
-genrator fali prostokątnej;
-licznik zdarzeń zewn.;
-programowalny uniwibrator;
-generator sygn. strobujących wyzwalany programowo lub sprzętowo.
Układ posiada 4 rejestry. 3 pierwsze odpowiadają 3 licznikom, natomiast czwarty-rej. słowa ster. do rej. 1, 2, 3 można info zapisać jak i z nich odczytać. Do rej. ster. można tylko zapisać. Info w rej. ster. określa tryb pracy każdego z niezależnych liczników oraz ich zapis lub odczyt. Liczniki są 16-bitowe, ustawiane programowo. Zawartośc każdego może być odczytana bez blokowania we, czyli bez zakłócania ich pracy.
Tryb 0: generowanie INT po zliczeniu do 0.
Po załadowaniu liczn. i rozpoczęciu zliczania imp. zegar. OUT=„0”. Gdy liczn.=0 OUT=„1” i pozostaje do określenia nowego trybu pracy. Wpisanie nowej zawartości do liczn. przerywa zliczanie po wpisaniu pierwszego bajtu i rozpoczyna na nowo po wpisaniu drugiego.
Tryb 1: programowalny uniwibrator
OUT=„0” po pierwszym imp. zegar. po narastającym zboczu imp. wyzw. na we GATE. OUT=„0” do momentu gdy liczn.=0. Przeładowanie liczn. w tym czasie nie ma wpływu na długość imp. do chwili nastp. wyzwolenia. Uniwibrator jest wyzw. kazdym narastającym zboczem imp. GATE. Zaw. liczn. można odczytać w każdej chwili bez wpływu na działanie uniwibr.
Tryb 2: programowalny dzielnik częstotliwości
OUT=„0” na czas 1 okresu zeg. we., po czym OUT=„1”. Nast. imp. pojawi się po czasie równym iloczynowi zaw. liczn. i okresu zeg. we. Wpisanie nowych danych do liczn. ma wpływ na nast. imp. Imp. wy może być synchronizowany sygn. GATE lub programowo.
Tryb 3: generator fali prostokątnej
podobnie do trybu 2. OUT=„0” przez połowę czasu zaw. liczn. Jeśli zaw. N jest nieparzysta to OUT=„1” przez (N-1/2) okresów.
Tryb 4: gen. sygn. strob. wyzw. programowo
OUT=„1”. Od chwili załadowania liczn. rozpoczyna się zlicz. imp. zeg. Gdy liczn.=0 OUT=„0” na czas jednego okresu zeg.
Tryb 5: jak 4 wyzw. sprzętowo
jak w 4, z tym, że zliczanie wyzwalane jest narastającym zboczem sygn. GATE. Dodatkowo OUT=„1” dopóki nie upłynie okres rózny pełnemu zliczeniu od ostatniego narastającego zb. sygn. GATE.