A PC-k soros portja

Bár a szokványos PC-kben akár összesen 8 aszinkron port beépítésére is van lehetőség, azonban a BIOS szervíz-rutinok csak az első 4 port kezelére képesek. Alapkiépítésben a legtöbb gépben csak két soros port található, ami általában elég szokott lenni a felmerülő igények kielégítésére (ált. egy egér ill. egy modem szokott a géphez kapcsolódni). Amennyiben ez mégis kevésnek bizonyulna, úgy egy multi-I/O kártya beépítésével az elérhető soros portok száma négyre növelhető. További portok kialakítása már csak speciális, erre a célra készült kártyák segítségével lehetséges.
Az első négy adaptert a BIOS meghatározott címeken keresi, de a fennmaradó csatolók a szabad adapter-tartományban bárhol elhelyezkedők.
 
 
 Port
Báziscím
IRQ
COM1
3F8
4
COM2
2F8
3
COM3
3E8
4
COM4
2E8
3

Mint a fenti táblázatból kitűnik a COM1 és COM3, valamint a COM2 és COM4 ugyanazt a megszakításvonalat használja, ez azonban csak a portot közvetlenül kezelő alkalmazói programok számára érdekes, mivel a szabvány BIOS rutinok nem kezeli ezeket a megszakításokat.

A BIOS szervízrutinok adatbájtok küldésére, a vonal-állapot lekérdezésére, valamint adatok polling-jellegű fogadására képesek. (Ez utóbbi azt jelenti, hogy az érkező bájtokat csak a port állandó monitorozásával tudja észlelni és nem képes az adapter által egyébként biztosított megszakítások felhasználására).

A BIOS a gépbe épített soros portok számát a bekapcsolási önteszt során állapítja meg és azok báziscímeit a BIOS adatterületen a 0400h fizikai címen kezdődő 4 darab word-ön tárolja el. Mivel maguk a szervízrutinok az itt tárolt báziscímek felhasználásával kommunikálnak a soros portokkal, így ezen adatterület utólagos módosításával az eredeti sorszám-adapter hozzárendelések tetszőlegesen megváltoztathatók.

Mivel a BIOS rutinok a komolyabb felhasználást nem teszik lehetővé, ismerkedjünk meg az adapter közvetlen programozásával.
 
 

A kommunikációs chip

A kommunikáció vezérlését a PC-kben egy i8250, vagy azzal kompatibilis UART áramkör látja el. Az újabb adapterekben általában már csak 16450, ill. 16550-es, vagy azok funkcióit (is) magukban foglaló integrált áramköröket alkalmaznak. A 16550-es chipek 16 bájtos FIFO-val (belső puffer) is rendelkezik, amiben küldés ill. fogadás esetén a szokásos eggyel szemben akár 16 bájtot is eltárolhatnak, ezáltal a CPU-t az időrabló várakozástól megszabadítva. Az áramkörök természetesen felülről kompatibilisek egymással.
Az UART nyolc porton (itt már természetesen a CPU port értendő) keresztül kommunikál a számítógéppel. Az egyes portok felhasználása a következő (B az adott soros port báziscímét jelenti):
 
 
Cím  Típus  Jelentés 
B+0  Csak írható  Adó adat-regiszter (DLA=0), vagy frekvenciaosztó alacsony helyiérték? bájtja (DLA=1) 
B+0  Csak olvasható  Vev? adat-regiszter 
B+1  Írható-olvasható  Megszakítás-engedélyez? regiszter (ha DLA=0), vagy frekvenciaosztó magas helyiérték? bájtja (DLA=1) 
B+2  Csak olvasható  Megszakítás-azonosító regiszter 
7-3 
:
nem használt (0) 
2-1 
:
megszakítás azonosító: 
11 
-
vonal állapot-változása 
10 
-
bájt vétele 
01 
-
bájt elküldve 
00 
-
modem állapotváltozása 
B+3  Írható-olvasható  Parancsregiszter 
7 
:
regiszter-kiválasztó (DLA): 0 - adat-regiszter, 1 - frekvenciaosztó) 
6 
:
BREAK, adási adatvonal szintjének 0-ra húzása 
5 
:
ha 1, a paritás-bit fixen a 4.bit invertáltja lesz 
4 
:
paritás kiválasztása, ha 5. bit 0: 
1 
-
páratlan (odd) paritás 
0 
-
páros (even) paritás 
3 
:
0: tiltja a paritás, 1 : a paritást az 5.-4. bitek határozzák meg 
2 
:
stop-bitek számának meghatározása: 0 - 1 stop bit, 1 - 2 stop bit 
1-0 
:
adatszó hosszának (adatbitek számának) meghatározása 
11 
-
8 adatbit 
10 
-
7 adatbit 
01 
-
6 adatbit 
00 
-
5 adatbit 
B+4  Írható-olvasható  Modem-vezérl? regiszter 
7-5 
:
nem használt (0) 
4 
:
diagnosztikai mód bekapcsolása 
3-2 
:
OUT2 ill. OUT1 (ált. nem bekötött vezetékek) invertált vezérlése 
1 
:
RTS jel vezérlése (invertált) 
0 
:
DTR jel vezérlése (invertált) 
B+5  Csak olvasható  Vonal állapot-regiszter 
7 
:
nem használt (0) (16650+: a FIFO-ban legalább egy hibásan érkezett bájt található) 
6 
:
nincs adás folyamatban 
5 
:
az adó adatregisztere üres 
4 
:
a vonal BREAK állapotban (lásd B+3 6. bit) 
3 
:
keret-hiba történt (vételkor hiányzott a stop-bit) 
2 
:
paritás-hiba történt 
1 
:
ráfutás történt (adat veszett el a vezetéken, mert az el?z? bájt nem lett id?ben kiolvasva) 
0 
:
a vev? adat-regiszterében érvényes adat van 
B+6  Csak olvasható  Modem állapot-regiszter 
7 
:
adatátviv? jelen (Data Carrier Detect) 
6 
:
csengés felfutó ágban (Ring Indicator) 
5 
:
az adatátviteli berendezés kész (Data Set Ready) 
4 
:
Adásra kész (Clear To Send) 
3 
:
A DCD megváltozott az utolsó olvasás óta (Delta DCD) 
2 
:
az RI inaktív állapotra váltott az utolsó olvasás óta (Delta RI) 
1 
:
a DSR megváltozott az utolsó olvasás óta (Delta DSR) 
0 
:
a CTS megváltozott az utolsó olvasás óta (Delta CTS) 
B+7  Írható-olvasható  Scratch register 
Csak 16450 v. újabb UART-on létez? általános célú regiszter. Általában nem használt. 
A kommunikáció megkezdése előtt a chipet a kommunikációs paramétereknek (átviteli ráta, paritás, stop- ill. adatbitek száma) megfelelően fel kell programozni. A baudráta beállításához előszőr a DLA-t 1-re kell állítani a [B+4] címre történő 80h érték kiírásával, majd az osztó értékének alsó és felső bájtját a [B+0] ill. [B+1] portokra kell írni. Ez után a paritás, stop- ill. adatbitek beállításával párhuzamosan a DLA-t 0-ra állítjuk a [B+3] port írásával.
Ezek után az adapter már kész a kommunikációra. Amennyiben megszakítás-vezérelt kommunikációt szeretnénk úgy a megszakításvezérlő megfelelő felprogramozása után a [B+1] portra történő írással választhatjuk ki, hogy mely események bekövetkeztekor kérünk megszakítást. A megszakítás-kezelő rutin a [B+2] olvasásával állapíthatja meg a megszakítás okát.

A következő részben megismerkedünk a modemmel történő kommunikációval, valamint egy teljes megszakítás-vezérelt gyűrű-pufferes kommunikációs unitot is közlünk.
 

- STING -
eMail:PC-XUser@IDG.HU, Subject: "Modems rovat"