MIKRO4i5, Instytut Informatyki Gliwice 23.03.92r


Instytut Informatyki Gliwice 23.03.92r

Zakład Mikroinformatyki

i Teorii Automatów Cyfrowych

LABORATORIUM MIKROINFORMATYKI

Temat: Interfejs szeregowy i równoległy.

Układ przerwań.

Cel ćwiczenia:

1. Nauka programowania elementów interfejsu szeregowego i równoległego komputera typu IBM PC.

2. Nauka programowania układu przerwań komputera typu IBM PC.

Wymagania sprzętowe:

Dwa komputery typu IBM PC (w sieci NOVELL ) połączone kablem interfejsu szeregowego i równoległego.

Wymagania softwerowe:

assembler TASM, linker TLINK oraz TURBO DEBUGGER f-my Borland, edytor tekstu, program HELP (opis przerwań DOS).

Wprowadzenie:

Komputery typu IBM XT, AT, 386 i 486 posiadają wbudowane systemy transmisji szeregowej i równoległej. W wyposażeniu standardowym zaopatrzone są w dwa łącza szeregowe COM1 i COM2 (w standardzie RS232) oraz w zależności od karty graficznej jeden bądź dwa łącza transmisji równoległej (Centronics) LPT1 i LPT2. BIOS komputerów zawiera odpowiednie procedury ich obsługi. Konstrukcja płyty głównej komputera zapewnia rozbudowę łącza szregowego do czterech (COM1..COM4) oraz łącza równoległego (LPT1..LPT3).

Łącza szeregowe i równoległe z reguły umieszczone są na osobnej karcie (Multi I/O).

Typowa karta zawiera dwa gniazda 9-pin i 25-pin dla łączności szeregowej, jedno gniazdo 25-pin dla łączności równoległej (Centronics printer port) oraz jedno gniazdo specjalne we/wy równoległych analogowych (Game port) do podłączenia joystick'a.

Karty video HERCULES zawierają dodatkowo łącze równoległe Centronics i dlatego istnieje konieczność konfigurowania kart Multi I/O oraz HERCULES tak aby adresy portów LPT nie pokrywały się.

Konfigurowanie Karty Multi I/O polega na odpowiednim ustaleniu adresu bazowego portu LPT, odblokowaniu/zablokowaniu sygnałów przerwań generowanych przez porty oraz odblokowaniu/zablokowaniu portów. Włączanie i wyłączanie odbywa się poprzez odpowiednie przełączanie zworek (jumpers) opisane w instrukcji dla danej karty.

Obsługa interfejsu szeregowego i równoległego może być zrealizowana na dwa sposoby:

• programowe odpytywanie buforów danych transmitowanych w pętli programowej (tzw. pooling),

• poprzez wykorzystanie układu przerwań do nadawania lub odbioru danych.

Połączenie komputerów poprzez interfejs szeregowy realizowane jest przy pomocy kabla łączności szeregowej asynchronicznej 3-żyłowego. Jego konstrukcja jest następująca:

Pin:

2-TxD 3-RxD

3-RxD 2-TxD

4-RTS 4-RTS

5-DTR 5-DTR

6-CTS 6-CTS

20-DSR 20-DSR

7-GND 7-GND

gdzie:

TxD - Transmit Data,

RxD - Receive Data,

CTS - Clear To Send,

RTS - Request To Send,

DTR - Data Terminal Ready,

DSR - Data Set Ready,

GND - Ground,

Adresy portów szeregowych:

COM1: 3F8h..3FFh przerwanie IRQ4 obsługiwane przez wektor INT 0Ch

COM2: 2F8h..2FFh przerwanie IRQ3 obsługiwane przez wektor INT 0Bh

Obsługa portów szeregowych zaimplementowana jest w BIOSie poprzez INT 14h, możliwe jest także bezpośrednie sterowanie interfejsem szeregowym poprzez oprogramowanie odpowiednich rejestrów karty Multi I/O.

Funkcje rejestrów interfejsu szeregowego:

Port Znaczenie

3F8h zapis: bufor nadawczy (8 bitowy),

odczyt: bufor odbiorczy (8 bitowy),

dla DLAB=1 dzielnik częstotliwości (młodszy bajt dzielnika)

częstotliwość dzielnik

110 1040

150 768

300 384

600 192

1200 96

2400 48

4800 24

9600 12

3F9h zapis: starszy bajt dzielnika dla DLAB=1

zapis: rejestr blokady przerwań

bit:

0: 1 - odblokuj intr. dla danych odbieranych,

1: 1 - odblokuj intr. gdy bufor nadawczy jest pusty,

2: 1 - odblokuj intr. na odbiorczej linii statusu

3: 1 - odblokuj intr. dla stsusu modemu (CTS,DSR,RI,RLSD),

4..7 = 0.

3FAh odczyt: rejestr identyfikacji przerwania,

bit:

0: 1 - nie ma przerwań (np. pooling)

1..2 00 - status intr. odbiornika

przepełnienie, błąd odczytu, parzystość ,

01 - dane odebrane ważne, wyzerowanie po odczycie 3F8h

10 - bufor nadawczy pusty, zerowanie poprzez zapis do 3F8h

11 - modem status, wykrywanie stanów CTS,DSR,RI,RLSD

3FBh odczyt/zapis: rejestr kontroli linii,

bit:

0..1: długość słowa 00 - 5, 01 - 6, 10 - 7, 11 - 8,

2: bity stopu 0 - 1, 1 - 2,

3..4: parzystość: x0 - brak, 01 - odd, 11 - even,

5: nie używane przez BIOS

6: odblokowanie sterowania przerwań 1 - start wysyłania spacji,

7: DLAB 1 prędkość transmisji, 0 - normalny

3FCh zapis: rejestr sterujący modemem,

bit:

0: 1 - uaktywnienie DTR, 0 - blokada,

1: 1 - uaktywnienie RTS, 0 - blokada,

2: 1 - uaktywnienie OUT1 (wyjscie użytkownika)

3: 1 - uaktywnienie OUT2

4: 1 - uaktywnienie pętli diagnostycznej

3FDh odczyt: rejestr statusu linii,

bit:

0: 1 - dane gotowe /DR/ reset poprzez odczyt,

1: 1 - błąd /OE/ poprzedni znak zostaje utracony,

2: 1 - błąd parzystości /PE/ reset poprzez odczyt linii statusu,

3: 1 - błąd ramki /FE/ zły bit stopu,

4: 1 - wykrycie przerwy /BI/ odebranie podtrzymania,

5: 1 - bufor nadawczy pusty, OK dla następnego znaku do nadania,

6: 1 - nadajnik pusty, brak danych do wysłania,

7: 0,

3FEh odczyt: rejestr statusu modemu,

bit:

0: 1 - DCTS zmienił stan,

1: 1 - DDSR zmienił stan,

2: 1 - TERI aktywny,

3: 1 - DDCD zmienił stan,

4: 1 - CTS aktywny,

5: 1 - DSR aktywny,

6: 1 - RI aktywny,

7: 1 - DCD aktywny,

Opis INT 14h.

Przerwanie BIOSa obsługi portów transmisji szeregowej (praca w poolingu; nie korzysta z przewań !!!)

AH: Obsługa:

00h inicjalizacja parametrów transmisji,

wejście: DX - numer portu 0..1,

AL - parametry inicjalizujące

0..1: długość słowa

10 - 7 bitów,

11 - 8 bitów,

2: bit stopu,

0 - 1,

1 - 2,

3..4: kod parzystości,

x0 - brak,

01 - odd,

11 - even,

5..7: prędkość transmisji,

000 - 110,

001 - 150,

010 - 300,

011 - 600,

100 - 1200,

101 - 2400,

110 - 4800,

111 - 9600,

wyjście: AH COM status,

01h wysłanie znaku,

wejście: DX - nr portu,

AL - znak do wysłania,

wyjście AH - status:

bit 7: 1 - błąd,

0..6: - status linii,

02h odebranie znaku,

wejście: DX - nr portu,

wyjście: AL - znak odebrany,

AH - różny od zera błąd,

03h pobierz status portu,

wejście: DX - nr portu,

wyjście: AX - status portu,

AH - status linii, AL - status modemu,

Treść ćwiczenia:

1. Napisać program transmisji znaków poprzez interfejs szeregowy, wykorzystując funkcje INT 14h oraz rejestry karty Multi I/O bez wykorzystania przerwań.

2. Napisać program transmisji znaków poprzez interfejs szeregowy, wykorzystując układ przerwań komputera,

Przykład programu transmisji znaków z wykorzystaniem układu przerwań w j. Pascal:

uses Dos,Crt;

const

COM = 01; {COM1 = 00, COM2 = 01}

COM_INT = $0B; {COM1 = $0C, COM2 = $0B}

COM_BAS = $200; {COM1 = $300, COM2 = $200}

var

IntSave : Pointer;

procedure Init_COM;

begin

{ inicjacja portu }

Odblokowanie kontrolera przerwań 8259:

INT0..INT7 - bit 0..7 rej. maski przerwań,

adres rej. maski $21,

ustawienie parametrów transmisji:

prędkość, parzystość, l.bitów danych, l bitów stopu,

odblokowanie przerwań dla danych odbieranych (port COM_BAS+$F9)

aktywacja OUT2, DTR, RTS (port COM_BAS+$FC),

odczyt bufora danych (port COM_BAS+$F8)

end;

procedure Send_Message (Snd_Buffer : string);

begin

.... { wysłanie znaków }

end;

procedure Recv_Message;interrrupt;

begin

{ odbiór znaków do bufora odczytu }

odblokowanie układu przerwań port $20,

Port[$20,] := #20;

sti

odczyt danych z bufora (port COM_BAS+$F8)

sprawdzenie statusu,

....

aktywacja OUT2, DTR, RTS,

end;

begin

GetIntVec (COM_INT,IntSave);

SetIntVec (COM_INT,Addr (Recv_Message));

Init_COM;

.....

pętla główna programu

....

zablokowanie układu przerwań dla INT3, INT4,

SetIntVec (COM_INT,IntSave));

end.

Łącze równoległe.

Wprowadzenie:

Port równoległy z założenia jest dwukierunkowy. Istnieje możliwość sterowania 12-ma liniami. Jest on jednym z najprostszych komponentów komputera. Składa się z czterech podstawowych bloków:

• dekodera adresów,

• bufora magistralowego danych,

• rejestru we/wy danych na złącze 25-pin,

• układu sterującego zapisem i odczytem portu,

W przeciwieństwie do portu szeregowego nie ma prostej możliwości synchronizacji transmisji ponieważ nie przewidziano żadnych linii synchronizacyjnych transmisję danych. Do synchronizacji można wykorzystać pin1 STROBE, ale nie wszyscy producenci kart Multi I/O wykonują je podobnie i istnieją rozbieżności w parametrach elektrycznych. Dlatego rozwiązaniem bezpiecznym jest przesyłanie danych oraz towarzyszących im sygnałów sterujących na liniach 2..9. Dane przesyłane muszą być połówkowo. Odczyt portu 37Ah daje możliwość pobierania danych z linii 1, 14, 16, 17. Protokół transmisji musi zapewniać synchronizację danych niezależnie od stosowanego komputera (różne częstotliwości taktowania magistral) i określenie które połówki danych są aktualnie przesyłane.

Protokół jest następujący:

NADAJNIK

• wyślij starszą połówkę danych i sygnał synchronizacji do odbiornika,

ODBIORNIK

• czekaj w pustej pętli dopóki sygnał synchronizacji linii jest ustawiony na 1,

• odpowiedz sygnałem synchronizacji odebranie danych,

NADAJNIK

• czekaj w pustej pętli na potwierdzenie przyjścia danej poprzez odczyt bitu kontrolnego w rej.STATUS

• Wyślij młodszą połówkę danych po zgaszeniu bitu kontrolnego,

ODBIORNIK

• czekaj w pętli dopóki bit kontrolny = 0, odczytaj młodszą połówkę danych,

• odpowiedz na odebranie danej poprzez ustawienie bitu kontrolnego na 0 i wysłaniu pustego bajtu danych na linię,

NADAJNIK

• czekaj na odpowiedź odbiornika poprzez odczyt bitu kontrolnego odbiornika,

• powtórz operację.

Połączenie kablowe pomiędzy portami:

Pin:

1 ------------------- 1 - GND

2 ------------------- 15

3 ------------------- 13

4 ------------------- 12 Data Out

5 ------------------- 10

6 ------------------- 11

10 ------------------- 5

11 ------------------- 6

12 ------------------- 4 Data In

13 ------------------- 3

15 ------------------- 2

Adresy portów równoległych:

LPT1: 378h..37Ah przerwanie IRQ7 obsługiwane przez wektor INT 0Fh

LPT2: 278h..27Ah przerwanie IRQ5 obsługiwane przez wektor INT 0Dh

LPT3: 3BCh..3BEh dla karty HERCULES,

Obsługa portów równoległych zaimplementowana jest w BIOSie poprzez INT 17h, możliwe jest także bezpośrednie sterowanie interfejsem równoległym poprzez oprogramowanie odpowiednich rejestrów karty Multi I/O.

Funkcje rejestrów interfejsu równoległego:

Port Znaczenie

378h zapis: bufor nadawczy /8 bitowy/,

odczyt: odczyt ostatnio wysłanego znaku,

379h odczyt: printer status,

bit:

0..2 0,

3: 0 - ERROR ,

4: 1 - SLCT,

5: 1 - PE,

6: 0 - ACK,

7: 0 - BUSY,

37Ah zapis/odczyt

0: 1 - strob po wysłaniu danej,

1: 1 - auto LF CR,LF

2: 0 - Init reset printer,

3 1 - Select printer,

4 0 - IRQ enable,

5..7 0,

Treść ćwiczenia:

Napisać program transmisji znaków poprzez interfejs równoległy, wykorzystując rejestry karty Multi I/O, (bez wykorzystania przerwań)

Przykładowe procedury transmisji znaku łączem równoległym w j. Pascal:

procedure Send_Char;

begin

cx <- kwant czasu oczekiwania (zależy od danego komputera)

dx <- 378h adres rej. danych

al <- znak do przesłania

....

ASM

mov AH,AL

inc dx

in al,dx ;odczyt rej STATUS

shl al,1

jc go_home

dec dx

mov al,ah

shr al,1

shr al,1

shr al,1

shr al,1

and al,0Fh

out dx,al ;wyślij starszą połówkę

inc dx

ET1: in al,dx

shl al,1

jc ET2 ;czy odbiornik gotów ?

loop ET1

jmp go_home

ET2: dec dx

mov al,ah

or al,10h ;ustaw bit kontrolny dla odbiornika

out dx,al ;wyślij znak

inc dx

mov cx,tim_const

ET3: in al,dx ;czekaj na ACK

shl al,1

jnc go_home

loop ET3

go_home:dec dx

mov al,10h

out dx,al

xor ah,ah

stc

END

end;

procedure Recv_Char;

begin

cx <- kwant czasu oczekiwania (zależy od danego komputera)

dx <- 378h adres rej. danych

al <- znak odebrany

....

ASM

inc dx

ET1: in al,dx ;odczyt rej. STATUS

shl al,1

mov ah,al ;czy nadajnik gotów ?

jc ET2

loop ET1

clc ;time out

jmp go_home ;błąd koniec

ET2: and ah,0F0h ;tylko starsza część bajtu

dec dx

mov al,0

out dx,al ;wyślij ACK do nadajnika

inc dx

mov cx,time_const

ET3: in al,dx

shl al,1 ;czekaj na potwierdzenie

jnc ET4

loop ET3

dec dx

mov al,10h

out dx,al ;brak łączności koniec

clc

jmp go_home

ET4: in al,dx ;pobierz następną połówkę

shr al,1

shr al,1

shr al,1

and al,0Fh

or ah,al

dec dx

mov al,10h

out dx,al ;wyślij ACK do nadajnika

mov al,ah

stc

go_home: ;koniec

END;

end;

{ program główny }

begin

......

end.

0x01 graphic

mgr inż. Oleg Antemijczuk.



Wyszukiwarka

Podobne podstrony:
19 03 23 03
Fundusze inwestycyjne i emerytalne wykład 6 23 03 2015
23 03 pediatria
3 Sieci komputerowe 23 03 2013 [tryb zgodności]
2015 Diagnoza 2 ST amnezje itp 23 03 15 do pdf odblokowanyid 28580
PMI 23 03 2011 wykład
Konspekt zajęć zintegrowanych dla klasy II 23.03, Scenariusze i konspekty
3 Oceany Sedymentacja morska (23 03)
23 03 2012 Logistyka wygkłady
Teoria kształceniaw, 5 23.03.09
23 03 2012 Podstawy państwa i prawa
NLPZ wykład z 23 03 2004
Hakin9 23 (03 2007) PL
23.03-7.04 antro, wykłady, antropologia kulturowa
ginekologia giełda 23.03 15.50 (wersja robocza - nieopracowana do końca)
23 03 2012 TEST KOŃCOWY GASTROLOGIA ppt
23 03 2011 id 29948 Nieznany
23 03 2011
t informatyk 132 03 wsk ok

więcej podobnych podstron