**** *** *** *** *** *** * * * * * * * * * * * * * * * * * * **** *** *** * ** * * * * * ** * ** * * * * * * * * * * * * *** ***** *** ***** *** RS-232C sarjaliit„nt„ IBM PC/AT:ssa ja yhteensopivissa Kirjoittanut Tomi Engdahl 26.11.1990 Sivu 1 Sis„llysluettelo Sivu Sis„llysluettelo 1 Standardit 2 PC:ss„ k„ytetyist„ piiriratkaisista 6 PC:ss„ ja AT:ssa k„ytetyt liittimet 8 Yleisesti k„ytetyt liit„nt„johdot 9 Rekisterikuvauksista 12 UART-piirien rekisterien kuvaukset 13 Keskeytystyypeist„ ja k„sittelyst„ 21 BIOS rutiinit sarjaliit„nn„n k„ytt””n 22 DOS rutiinit sarjaliit„nn„n k„ytt””n 24 Keskeytykset ja keskeytyslinjat 25 X00 FOSSIL-ajurin palvelut 26 Esimerkki k„ttelyst„ (XON/XOFF) 27 Ohjelmoitiongelmista 28 UART piirien nastaj„rjestykset 29 Vastuuttomuusjulistus ja l„hdeluettelo 30 Sivu 2 Standardeista RS-232C standardi m„„rittelee er„„n todella yleisesti k„yt”ss„ oleva sarjalii- kenn”imistavan. Kyseinen stanadardi m„„rittelee sek„ synkronisen ett„ asynkro- nisen liikenn”innin, joista useinmiten k„ytet„„n vaan j„lkimm„ist„. RS-232 standardin on esitetty vuonna 1962, mutta tuli julkiseksi vasta 1969. Sit„ on uudistettu vuonna 1972 (RS-232C). Sen j„lkeen ei muutoksia standerdiin ole tullut. Muutamat standardiin kuulumattomat ominaisuudet ovat tulleet de facto standardeiksi (D-25 liitin). Alkuper„inen RS-232C ei m„„rit„ liitti- men mallia vaan ainoastaan se nastojen numeroinnin. Muutama vuosi sitten on julkaistu uusi versio standardista nimell„ EIA-232D, joka on RS-232C t„ydennettyn„ muutamalla de facto standardilla (mm. liitin) sek„ testausta helpottavavilla uusilla signaaleilla. RS-232C-standardin mukaan mink„ tahansa RS-232C-liit„nn„n pinnin saa kytke„ (tai olla kytkem„tt„) mihin tahansa muuhun RS:n pinniin liit„nn„n siit„ rik- koutumatta. PC:n RS-liitimen linjapuskurin pit„isi kyll„ kest„„ se, mutta en kehottaisi kenenk„„n kokeilevan liit„nn„n kest„vyytt„, koska valmistajakohtai- sia eroavaisuuksia suojauksissa saattaa esiinty„. RS-232 liit„nt„tapa on m„„ritelty useassa standardissa. On olemassa RS-232 ja EIA-232, jotka ovat k„yt„nn”ss„ samoja (pieni„ eroja signaalien nimiss„.) Amerikkalaista RS-232C standardia vastaavat euroopassa l„hinn„ suosituk- set CCITT:n V24 ja V28. V24 k„sitt„„ liit„nn„n toiminnalisten osien kuvaukset. Sallittujen j„nnitetasojen m„„ritykset sis„ltyv„t suositukseen V28. PC-koneissa k„ytet„„n RS-232C-liit„nn„ss„ linjavastaanottimina yleens„ piirej„ (esim. MC1489), jotka eiv„t erikseen tunnista signaalin negatiivista osaa. N„ille piireille 0V on looginen ykk”nen ja +3V:ia suuremmat j„nnitteet ovat loogisia nollia. T„st„ johtuen PC:n RS-liit„nt„„n voi kytke„ my”s laitteita, joiden sarjaliit„nn„n l„ht” on TTL-tasoinen tai vain yksipuolisella j„nnitel„h- teell„ varustettu. T„m„ helpottaa joissain tapauksissa PC:n lis„laitteiden suunnittelua. Sivu 3 RS-232C -standardin j„nnitetasojen m„„ritykset: Ulostulo Sis„„nmeno +25V | +15V | | | | Looginen 0 | Looginen 0 | | +5V | | +3V | Siirtym„alue | Siirtym„alue | -3V -5V | | | | Looginen 1 | Looginen 1 | | -15V | | -25V EIA-232-D spesifikaatiot Liitin DTE DB-25 uros Liitin DCE DB-25 naaras Maksimi kaapelin pituus Kapasitanssi rajoittaa (2500pF max.) Maksimi siirtonopeus 20Kbit/s L„hettimi„ 1 l„hett„j„ Vastaanottomia 1 vastaanottaja Linjapuskurin l„ht” +-5V min. +-15V max. Puskurin kuorma 3k to 7k ohmia Ajurin nopeus (slew rate) 30V/mikrosekunti Vastaanottimen resistanssi 3k to 7k ohms Vastaanottimen siirtym„alue +-3V Vastaanottimen j„nnitalue +-30V Pitkill„ ja h„iri”isill„ yhteyksill„ voidaan k„ytt„„ linjapyskureissa l„ht”j„nnitealuetta +-25V. K„yt„nn”n johdotuksissa RS-232C linjan maksimi kaapelin pituus on 20m. Sivu 4 Tiedonsiirtotapa Tieto siirret„„n sarjamuodossa seuraavan loogisia tiloja kuvaavan kaavion mukaisesti (asynkroninen siirto): Looginen tila 1 ______ _______ 1. Aloitusbitit (Start Bits) |_XXXXXXXX 2. Databitit (v„hiten merkitsev„ ensin) 0 1 2 3 3. Loperutbitit (Stop Bits) J„nnitetasot vastaavasti +3V..+15V _ ______| XXXXXXXX_______ -3V..-15V 1 2 3 RS-232C-linja voi olla lepotilassa (looginen 1) stop-bittien j„lkeen vaikka kuinka pitk„„n, jos seuraavaa tavua ei ole tulossa heti. Stop-bittien m„„r„ kertoo v„himm„isajan, jonka linjan on oltava lepotilassa (looginen 1) l„hetetyn datan j„keen. Sanan pituus (databittien m„„r„) on 5, 6, 7 tai 8 bitti„. Aloitusbittej„ on yleens„ yksi. Lopetusbittej„ on joko 1, 1.5 tai 2. 1.5 lopetusbitti„ k„ytet„„n yleens„ 5 bitin sanojen kanssa, ja tarkoittaa, ett„ lopetusbitin pituus on 1.5*yhden bitin aika. PC:ss„ k„ytetyiss„ UART:eissa 1.5 lopetusbitti„ (stop-bitti„) on mahdoliinen vain 5 bitin sanoissa. Linjalle voidaan l„hett„„ my”s BREAK-signaali, jota k„ytet„„n yleens„ yhteyden katkaisemiseen sarjaliikenneyhteydess„ p„„tteelt„. BREAK-signaali on yksinker- taisesti signaalin tila, jossa datalinja menee pitk„ksi aikaa (muuhun liiken- teeseen n„hden) nollaan. T„m„ aika on yleens„ 150-600 ms, eli reilusti niin pitk„ ett„ sit„ ei voi sekoittaa muuhun linjaliikenteeseen. Sivu 5 RS-232C ja EIA-232D:n m„„rittelem„ liitin RS-liit„nn„ss„ k„ytet„„n liittimen„ koneen puolella yleisesti D25-urosliit- timi„. N„iden liittimien nastaj„rjestys on seuraava (D-25 liitin DTE). nasta Signaalin nimi Lyhenne CCITT RS EIA Suomennos --------------------------------------------------------------------- 1 -- Chassis Gound 101 AA - Suojamaa 2 -> Transmit data TxD,TD,SOUT 103 BA BA L„htev„ data 3 <- Receive Data RxD,RD,SIN 104 BB BB Tuleva data 4 -> Request To Send RTS 105 CA CA L„hetyspyynt” 5 <- Clear To Send CTS 106 CB CB L„hetysvalmius 6 <- Data Set Ready DSR 107 CC CC Siirtolaitteen valmius 7 -- Signal Ground SG 102 AB AB Signaalimaa 8 <- Carrier Detect DCD,RLSD 109 CF CF Kantoaaltotunnistus 9 ? + Test Voltage - - Testij„nnite + 10 ? - Test Voltage - - Testij„nnite - 11 unassigned ei kyketty 12 <- High-Speed Indicate SCF CI/SCF Nopeustunnistus 13 <- Secondary CTS SCB SCB 14 -> Secondary TxD STD SBA SBA 15 <- * Sync TX Timing DCE 114 DB DB L„hetyskello DCE 16 <- Secondary RxD SRD SBB SBB 17 <- * Sync RX Timing DCE 115 DD Vastaanottokello DCE 18 <- D Local Loopback LL 19 -> Secondary RTS SRTS SCA SCA 20 -> Data Terminal Ready DTR 108.2 CD CD P„„telaitteen valmius 21 <- Remote Loopback RL CG CG 22 <- Ring Indicate RI 126 CE CE Soiton osoitus 23 ? Data Signal Rate CH/CI CH/CI 24 -> * Sync TX Timing DTE 113 DA DA L„hetyskello DTE 25 <- D Test Mode TM Kaukoluupin ohjaus Standardin (EIA-232D) mukaan DTE:n (esim. tietokone) liitin koiras, ja tiedon- siirtolaitteen DCE (esim. modeemi) liitin naaras. Liittimien numerointi kulkee siten, ett„ t„ydellinen DTE-DCE saadaan aikaan kytkem„ll„ kaikki DTE-liitimen nastata saman numeroisiin DCE-liitimen nastoihin. * merkityt nastat k„yt”ss„ vain synkronisessa siirrossa. N„it„ nastoja ei ole kytketty PC-koneissa asynkronisessa kortissa. ? Signaalista ei tarvittavia tietoja saatavilla D m„„riteltty vasta standardissa EIA-232D Nuolet merkitsev„t signaalien kulkusuuntia. Oikealle osoittava nuoli merkitsee DTE:st„ l„htev„„ signaalia ja vasemmalle osoittava DTE:n sis„„ntuloa. Jos suuntaa ei ole merkitty maajohtoihin, koska niiss„ ei kulje signaalia. Standardimerkint„sarakkeissa (CCITT, RS, EIA) tyhj„ tarkoittaa, ett„ signaalia ei ole m„„ritelty kyseisess„ standissa. Jos kyseisess„ sarakkeessa viiva, niin signaali m„„ritelty mutta ei nimetty omalla kirjainyhdistelm„ll„. Lyhenne sarakkeessa kerrottu yleisesti k„yt”ss„ olevat lyhenteet, jotka eiv„t kuitenkaan ole mitenk„„n suositeltuja vaan ainoastaan k„yt”ss„ yleisty- neit„. CCITT sarakkeessa kerrotaan standardissa V.24 k„ytetyt signaalien nimet. RS sarakkeessa kerrotaan alkuper„isen RS-232C m„„rittelyn signaalien nimet EIA sarakkeessa kerrotaan EIA-232D stanardin signaalien nimet Sivu 6 K„ytetyst„ piiriratkaisuista PC-koneissa k„ytet„„n sarjaportin UART:ina piiri„ 8250 kellotaajuudella 1.8432 MHz, joka saadaan omasta kellokiteest„. Uudemmissa PC:ss„ k„ytet„„n jotain saman piirisarjan uudempaa ohjelmistoyhteensopivaa mallia (esim. 82050, 82510), jolla voidaan saavutta suurempia linjanopeuksia. AT koneissa k„yte- t„„n yleens„ UART tyyppi„ 16450 tai 82450. Ne ovat yhteensopivia 8250:n kanssa ja sis„lt„v„t v„h„n lis„ominaisuuksia. Nyky„„n alkaa yleisty„ UART- tyyppi 16550, joka sis„lt„„ useita lis„ominaisuuksia, kuten 16 merkin FIFOt. Piirin ANS 8250 ominaisuuksia: Valmistaja: National Semicondictor Ltd Databittien m„„r„: 5,6,7 tai 8 Pariteetti: pariton, parillinen tai ei paritteetia Stop-bitit: 1, 1 1/2 tai 2 Liikenn”intinopeus: 50-19200 baudia Piirin UM 8250A ominaisuuksia: Valmistaja: United Microelectronics Corp (UMC) Muut tiedot samat kuin ANS 8250, mutta Liikenn”intinopeus: 0-56000 bps Linjapuskurina k„ytet„„n yleisesti EIA-RS-232C-standardin mukaista piiri„ 1488 ja vastaaottimena piiri„ 1489. Linjapuskuri pystyy PC-koneissa sy”tt„m„„n +/-12V, miss„ -12V vastaa loogista tilaa 1 ja +12V loogista tilaa 0. Vastaanottopuolella yli +3V j„nnitteet vastaavat loogista nolla ja 0V tai sit„ pienemm„t j„nnitteet vastaavat loogista ykk”st„. Piirin MC1488 ominaisuuksia: EIA-RS-232C -standardin mukainen linjapuskuri L„ht”virran rajoitus: +/-10mA Ottoj„nnite: TTL-tasoinen L„ht”: max. +/-15V (k„ytt”j„nnitteen mukaan) K„ytt”j„nnite: max. +/-15V Tehonkulutus: max. 1W Piirin MC1489 ominaisuuksia: Ottoresistanssi: 3.0kOhm - 7.0kOhm Ottoj„nnitealue: +/-30V Sis„inen hystereesi K„ytt”j„nnite: max. 10V Tehonkulutus: max. 1W Sivu 7 Nykysin PC-koneissa k„yt”ss„ olevia UART-piirej„ 8250 Alkuper„isess„ IBM PC:ss„ k„ytetty UART-tyyppi. K„yt”ss„ edelleen PC:ss„ ja joissain AT-koneissa. Alkuper„inen Nationa Semicoductorin piiri ei pystynyt kuin 19200 baudin nopeuksiin saakka ja oli v„yl„lt„„nkin hidas. Nykyisin saa- tavat 8250:pysyv„t hyvin AT-v„yl„n vauhdissa mukana ja tarjoavat nopeuksia 57600 tai jopa 115200 baudiin saakka. xx450 Yleisesti k„ytetty UART-malli AT-koneissa ja nyky„„n. Kehitetty malli 8250:st„. Pinniyhteensopiva 8250:n kanssa. Ominaisuuksia paranneltu hieman kaikin puolin, mutta ei mit„„n havaittavan suuria muutoksi mis„„n ominaisuudessa. Ainut ero ohjelmoinnin kannalta on yksi uusi rekisteri: Scratc Register. Se ei vaikuta itse piirin toimintaan mitenk„„n. Sit„ voidaan k„ytt„„ ohjelmassa v„liaikaisena yhden tavun tallennuspaikkana. Tunnistettavissa ohjelmallisesti Scratc-rekiste- rin avulla. Useissa mykyisin k„ytetyiss„ yhdistelm„piireiss„, joita k„ytet„„n Multi I/O korteissa huolehtimaan sek„ sarja- ett„ rinnakkaisliit„nn„st„, UART-osa on yhteensopiva 82450:n knassa. My”s useissa PC:n korttimodeemeissa UART-osa on 82450 yhteensopiva. AT-koneissa 16450 on yleisesti k„ytetty malli. xx550 Edelleen kehitetty versio xx450:st„. T„m„n hetken kehittyinein UART-piiri, mit„ PC koneisiin saa. L„hes t„ysin pinniyhteensopiva 8250 ja xx450 kanssa, eroa kahden nastan k„yt”ss„. Kuitenkinvoidaan laittaa suoraan 8250:n tai xx450 paikalle, koska kyseisi„ pinnej„ ei k„ytet„ tavallisesti. Suurin ero xx450:een on piirin sis„iset 16 merkin puskurit (FIFO) sek„ tule- valle ett„ l„htev„lle datalle sek„ DMA:n k„ytt”mahdollisuus. Kaksi toimintati- laa, joista toinen t„ysin yhteensopiva xx450 kanssa ja toinen tukee uusia ominaisuuksia. FIFOt ja DMA v„hent„v„t riski„, ett„ markkej„ katoaisi v„list„, kun niit„ ei ehdit„ lukea riitt„v„n nopeasti. Erityisen hy”dyllinen suurilla liikenn”intinopeuksilla ja moniajoymp„rist”iss„. Yksi rekisteri lis„„ xx450:een verrattuna ja uusia bittej„ muista rekistreist„ k„ytt””n. Tunnistettavissa ohjelmallisesti FIFOja k„sittelevien rekisterien avulla. Yll„ olevat xx piirien nimiss„ kuvaavat piirityypin kahta esimm„sit„ numeroa, jotka vaihtelevat valmistajakohtaisesti. Ainakin seuraavia numeroita l”ytyy xx paikalta: 82, 16 tai 73. Joidenkin piirivalmistajien mallinimiss„ on joku kirjain kahden ensimm„isen numeron j„lkeen. Yleens„ my”s piirien numeroidenkin per„ss„ on joku kirjain. N„iden kirjainten k„ytt” vaihtelee valmistajakohtaisesti ja n„ill„ kirjaimilla voidaan erottaa hieman toisistaan eroavat saman piirin eri tyypit. Per„ss„ olevista kirjaimista voidaan mainita sen verran, ett„ A-kirjain tarkoittaa yleens„ nopeinta versiota. Yll„ mainittuja piirej„ l„ytyy nyky„„n todella monella kotelointivaihtoehdolla. PC koneissa k„ytet„„n tavallisesti 40 napaista DIP koteloa. Sivu 8 PC:ss„ ja AT:ssa k„ytetyt liittimet RS-liit„nn„ss„ k„ytet„„n liittimen„ koneen puolella yleisesti D-25 (PC:t) tai D-9 -urosliittimi„ (AT:t). N„iden liittimien nastaj„rjestys on seuraava: D-25 -liitin Signaali D-9 -liitin 1 Suojamaa NC (ei kytketty mihink„„n) 2 L„hetysdata (TxD) 3 3 Vastaanottodata (RxD) 2 4 L„hetyspyynt” (RTS) 7 5 L„hetysvalmius (CTS) 8 6 Siirtolaitteen valmius (DSR) 6 7 Signaalimaa (SG) 5 8 Kantoaaltotunnistus (DCD) 1 20 P„„telaitteen valmius (DTR) 4 22 Soiton osoitus (RI) 9 D-25 -liittimen nastaj„rjestys on RS-232C standardin mukainen. Yll„ olevien tietojen avulla voi tarvittaessa tehd„ sovittimen D-25 ja D-9 liitintyyppien muuttamiseksi toiseksi. N„ist„kin m„„rittelyist„ on valitettavasti poikkeuksia. Er„iss„ kannaettavissa PC:ss„ on urosliit„nn„ sijasta naarasliit„nt„ ja er„iss„ TxD ja RxD ovat vaihtaneet paikkaa. T„ss„ viel„ liittimen nastanumerointi koneen takaa katsottuna urosliitimist„. Liitimiss„ on yleens„ numerointi merkittyn„, mutta t„ss„ kuitenkin se kerrot- tuna, jotta ei j„isi ep„selv„ksi kenellek„„n. D-25 uros nastanumerointi 1 13 --------------------------- | . . . . . . . . . . . . . | \ . . . . . . . . . . . . / ------------------------ 13 25 D-9 uros nastanumerointi 1 5 ----------- | . . . . . | \ . . . . / ------- 6 9 Sivu 9 Yleisi„ laitteiden kytkent„t„poja Tietokoneen ja lis„laitteen v„lille Tavallinen DTE-DCE (esimerkiksi tietokoneen ja modeemin v„lille) DTE (25 napainen) DCE (25 napainen) TxD 2 ------------------------> 2 RxD 3 <------------------------ 3 RTS 4 ------------------------> 4 CTS 5 <------------------------ 5 DSR 6 ------------------------> 6 DCD 8 ------------------------> 8 DTR 20 ------------------------> 20 SG 7 ------------------------- 7 DTE (9 napainen) DCE (9 napainen) TxD 3 ------------------------> 2 RxD 2 <------------------------ 3 RTS 7 ------------------------> 4 CTS 8 <------------------------ 5 DSR 6 ------------------------> 6 DCD 1 ------------------------> 8 DTR 4 ------------------------> 20 SG 5 ------------------------- 7 Kaksijohtoinen DTE-DCE DTE (25 napainen) DCE (25 napainen) TxD 2 ------------------------> 2 RxD 3 <------------------------ 3 RTS 4 ----, ,----- 4 CTS 5 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 8 DTR 20 ----' '----- 20 SG 7 ------------------------- 7 DTE (9 napainen) DCE (25 napainen) TxD 3 ------------------------> 2 RxD 2 <------------------------ 3 RTS 7 ----, ,----- 4 CTS 8 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 1 <---| |----> 8 DTR 4 ----' '----- 20 SG 5 ------------------------- 7 Sivu 10 Kahden tietokoneen v„lille Ns. Nollamodeemi (null modem) DTE-DTE DTE (25 napainen) DTE (25 napainen) TxD 2 ---------\ /------------- 2 RxD 3 <--------/ \------------> 3 RTS 4 ---------\ /------------- 4 CTS 5 <--------/ \------------> 5 DSR 6 <---, ,----> 6 DCD 8 <---+----\ /-------+----> 8 DTR 20 ---------/ \------------- 20 SG 7 ------------------------- 7 DTE (25 napainen) DTE (9 napainen) TxD 2 ---------\ /------------- 3 RxD 3 <--------/ \------------> 2 RTS 4 ---------\ /------------- 7 CTS 5 <--------/ \------------> 8 DSR 6 <---, ,----> 6 DCD 8 <---+----\ /-------+----> 1 DTR 20 ---------/ \------------- 4 SG 7 ------------------------- 5 DTE (9 napainen) DTE (9 napainen) TxD 2 ---------\ /------------- 2 RxD 3 <--------/ \------------> 3 RTS 7 ---------\ /------------- 7 CTS 8 <--------/ \------------> 8 DSR 6 <---, ,----> 6 DCD 1 <---+----\ /-------+----> 1 DTR 4 ---------/ \------------- 4 SG 5 ------------------------- 5 HUOM! Null modem kaapelia voidaan k„ytt„„ my”s DCE-DCE kaapelina. Sivu 11 Kaksijohtoinen DTE-DTE DTE (25 napainen) DTE (25 napainen) TxD 2 ---------\ /------------- 2 RxD 3 <--------/ \------------> 3 RTS 4 ----, ,----- 4 CTS 5 <---' '----> 5 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 8 DTR 20 ----' '----- 20 SG 7 ------------------------- 7 DTE (25 napainen) DTE (9 napainen) TxD 2 ---------\ /------------- 3 RxD 3 <--------/ \------------> 2 RTS 4 ----, ,----- 7 CTS 5 <---' '----> 8 DSR 6 <---, ,----> 6 DCD 8 <---| |----> 1 DTR 20 ----' '----- 4 SG 7 ------------------------- 5 DTE (9 napainen) DTE (9 napainen) TxD 3 ---------\ /------------- 3 RxD 2 <--------/ \------------> 2 RTS 7 ----, ,----- 7 CTS 8 <---' '----> 8 DSR 6 <---, ,----> 6 DCD 1 <---| |----> 1 DTR 4 ----' '----- 4 SG 5 ------------------------- 5 Sivu 12 UART-piirien rekisteriselostuksista Seuraavana tulee tietoa UART-piirien rekisterist„. Seuraavilla sivuilla on selitetty PC koneissa k„yt”ss„ olevien UART-piirien rekisterit. Mukana on selitykset piireist„ 8250, xx450 ja xx550. Koska mukaan on yritetty mahduttaa kaikkien piirien rekisterit, saattaa luettelo n„ytt„„ sekavalta. Rekisteriselitykset, joiden per„ss„ ei ole mit„„n merkint„„, toimivat kaikissa edell„ mainituissa piirityypeiss„. Joidenkin selitysten per„ss„ on mainittu joku tai jotkut piirityypit. T„ll”in kyseinen toiminto toimii vain kyseisiss„ piireiss„. xx550 piiriss„ on kaksi toimtatilaa, jotka erotellaan t„ss„ tekstiss„. Toisessa xx550 emuloi xx450:st„ ja toinen on xx550:n oma tila. Jos selityksen per„ss„ on vain xx550 maininta, niin kyseinen toiminta toimii xx550:n kummas- sakin tilassa, mutta ei muissa UART:eissa. Jos per„ss„ on maininta xx550 tila, niin kyseinen toiminta toimii vain xx550:ss„ kyseisess„ tilassa. Selostukset pytkiv„t kuvaamaan kyseisen rekisterin eri bittien tarkoituksen. Rekisteriselostukset eiv„t pyri olemaan t„ydelllisi„ ohjelmoinnin oppaita, vaan niiden on tarkoitus olla l„hinn„ l„hdeteos ja yhteenveto helpottamaan ohjelmointia. Selostukset on my”s tarkoitettu nopeaksi l„hdeteokseksi, jota voi hy”dynt„„ valmista koodia tutkiessaan. Ohjelmoinnin perusidea on etsitt„v„ muualta, mutta kun idean ymm„rt„„, niin rekisteriselostusten avulla ideasta voi v„s„t„ toimivan rutiinin. Mallia voi ja kannattaa etsi„ yleisesti saatavilla olevista l„hdekoodeista. Sivu 13 UART-piirien rekisterit ja niiden k„ytt” UART-piirin I/O alkuosoitteen saa selville seuraavista muistipaikoista lukemalla 16-bittisen luvun (osoitteet heksana muodossa segmentti:siirros) COM1: 0040:0000 COM2: 0040:0002 COM3: 0040:0004 COM4: 0040:0006 HUOM! N„m„ osoitteet eiv„t toimi OS/2:ssa k„ytett„ess„ COM??.SYS ajureita. Kutsukaamme t„t„ arvoa seuraavaksi nimell„ os. T„ll”in UART:in rekisterit ovat seuraavat: osoite nimi bittien merkitys os TD/RD Kirjoitetaan l„hetett„v„ data/luetaan vastaanotettu data DIVLSB Jos LCR:n bitti D7=1, niin nopeudenvalintarekisterin alempi tavu os+1 IER (Interrupt Enable Register) Keskeytysten valinta DIVMSB Jos LCR:n bitti D7=1, niin nopeudenvalintarekisterin ylempi tavu os+2 IIR (Interrupt Id Register) Keskeytysten tunnistus (vain luettava rekisteri) FIFO (Fifo Control) Sis„isten linjapuskurien ohjaus ** os+3 LCR (Line Control Register) Linjaparametrit, bitti D7 (DLAB) m„„r„„ 2 ensimm„sen rekisterin k„yt”n os+4 MCR (Modem Control Register) DTR, RTS, OUT1 ja OUT2 hallinta os+5 LSR (Line Status Register) Kontrollerin tilarekisteri os+6 MSR (Modem Status Register) Sis„„ntulojen tilarekisteri os+7 SCR (Scratc Register) ylim„„r„inen varastointirekisteri * * Toimii vain UARTeissa xx450 ja xx550. Ei toimi 8250:ss„! ** Toimii vain xx550:ss„ ! Sivu 14 Rekisterin IER k„ytt” [os+1] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 1 -> keskeytys, kun vastaanotettava tavu valmis (Receiver Data Available Interrupt (ERBFI)) Bitti D1: 1 -> keskeytys, kun l„hetett„v„ data l„hetetty linjalle (Transmitter Holding Register Empty Inteerupt(ETBEI)) Bitti D2: 1 -> keskeytys, kun tilarekisteriss„ havainto virheest„ * (Receiver Line Status Interrupt (ELSI)) Bitti D3: 1 -> keskeytys, kun modeemin tilarekisteriss„ muutos ** (MODEM Status Interrupt (EDSSI)) Bitit D4: j„tet„„n nollaksi (ei k„yt”ss„) Bitti D5: j„tet„„n nollaksi (8250 ja xx450) 1 -> aktivoidaan xx550 tila (vain xx550:ss„) Bittit D6-D7: j„tet„„n nollaksi (ei k„yt”ss„) * T„m„n keskeytyksen voi aiheuttaa: Ylivuotovirhe (Overrun Error) Pariteettivirhe (Parity Error) Stop-bitti virheelinen (Framing Error) Katko (Break Interrupt) ** T„m„n keskeytyksen voi aiheuttaa: L„hetysvalmius (CTS) Siirtolaitteen valmius (DSR) Soiton havainto (RI) Kantoaallon tunnistus (DCD)(RLSD) Sivu 15 Rekisterin IIR k„ytt” [os+2] (vain luettava) -------------------------------------------- Reset tila: bitti D0 on ykk”nen ja bitit D1-D7 nollia tavallisesti: Bitti D0: 0 -> keskeytys odottamassa, D1 ja D2 kertovat keskeytyksen 1 -> ei keskeytyst„ odottamassa -> D1=0 ja D2=0 Bitit D1-D2: keskeytyksen tyyppi (jos D0=0) D2 D1 Tyyppi ---------------------- 1 1 tilarekisteri (Receiver line Status) 1 0 vastaanotettava tavu valmiina (Received Data Avilable) 0 1 tavu l„hetetty (Transmitter Holding Register Empty) 0 0 modeemin tila (MODEM STATUS) Bitit D3-D7: pysyv„sti nollia xx550-tilassa: Bitti D0: 0 -> keskeytys odottamassa, D1 ja D2 kertovat keskeytyksen 1 -> ei keskeytyst„ odottamassa Bitit D1-D3: keskeytyksen tyyppi (jos D0=0) Bitti D4: 1 -> l„hetin v„hemm„n kuin t„ysi ja on valmin DMA siirtoon 0 -> l„hetin t„ysi ja ei ole valmis DMA siirtoon Bitti D5: 1 -> vastaanotin ei ole tyhj„ ja on valmis DMA siirtoon 0 -> vastaanotin on tyhj„ ja ei ole valmis DMA siirtoon Bitit D6 ja D7: 1 -> FIFOt laitettu p„„lle (D6=1 ja D7=1) 0 -> FIFOja ei ole laitettu p„„lle (D6=0 ja D7=0) Sivu 16 Piirin keskeytykset ja niiden k„sittely (rekisteri IIR) D2 D1 D0 ------------------------------------------------- 0 0 1 Prioriteetti: - Keskeytystyyppi: ei keskeytyst„ Aiheuttaja: ei ole Keskeytyksen nollaus: - 1 1 0 Prioriteetti: korkein Keskeytystyyppi: vastaanottolinjan tila (LSR) Aiheuttaja: Ylivuoto (Overrun) tai Pariteettivirhe (Parity Error) tai Virheellinen stop-bitti (Framing Error) tai Katko (Break Interrupt) Keskeytyksen nollaus: lue tilarekisteri (LSR) 1 0 0 Prioriteetti: toinen Keskeytystyyppi: vastaanotettava data valmis Aiheuttaja: vastaanotettva data valmis Keskeytyksen nollaus: lue vastaanotettu merkki 0 1 0 Prioriteetti: kolmas Keskeytystyyppi: merkki l„hetetty Aiheuttaja: l„hetyspitorekisteri tyhj„ Keskeytyksen nollaus: luetaan IIR (jos se aiheuttaja) tai kirjoitetaan uusi merkki l„hetysrekisteriin 0 0 0 Prioriteetti: nelj„s Keskeytystyyppi: modeemin tila (MODEM status) Aiheuttaja: L„heysvalmius (CTS) tai Siirtolaitteen valmius (DSR) tai Soitton tunnistus (RI) tai Kantoaallon tunnistus (DCD) Keskeytyksen nollaus: modeemin tilarekisterin lukeminen xx550 UART-piiriss„ xx550 tilassa FIFOt p„„ll„ on lis„ksi yksi uusi keskeytys, jossa k„ytet„„n tunniskuksessa my”s bitti„ D3. Kaikki muut keskeytkset kuin edell„. Niiss„ kaikissa D3=0. D3 D2 D1 D0 ---------------------------------------------------------------- 1 1 0 0 Prioriteetti: toinen Keskeytystyyppi: Character timeout indication Aiheuttaja: Yht„„n merkki„ ei ole luettu vastaanottoFIFOsta tai sen tulosta viimeisen nelj„n merkin aikana ja vastaanottoFIFOssa on ainakin 1 merkki Keskeytyksen nollaus: lukemalla vastaanoton puskurirekisteri Sivu 17 Rekisterin FIFO Control k„ytt” [os+2] (vain kirjoitettava) (vain xx550) ----------------------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 1 -> Laittaa p„„lle sis„iset FIFOt 0 -> FIFOt pois p„„lt„ (xx450 tila p„„lle) FIFOt tyhjentyv„t, kun ne laitetaan pois Bitti D1: 1 -> Tyhjenn„ vastaanotto (RCVR) FIFOn Nollaa vastaanotto FIFOn laskurilogiikan Bitti D2: 1 -> Tyhjenn„ l„hetys (XMIT) FIFOn Nollaa vastaanotto FIFOn laskurilogiikan Bitti D3: 1 -> Laittaa DMA tilan 1 p„„lle (multiple DMA transfers) ** 0 -> Laittaa DMA tilan 0 p„„lle (single DMA transfers) ** Bitit D4-D5: l„hetys (XMIT) FIFOn liipausutaso xx550 tilassa D5 D4 liipaisutaso ---------------------------- 0 0 1 tavu 0 1 4 tavua 1 0 8 tavua 1 1 14 tavua Bitit D6-D7: vastaanotto (RCVR) FIFOn liipaisutaso (trigger level) D7 D6 liipaisutaso ---------------------------- 0 0 1 tavu 0 1 4 tavua 1 0 8 tavua 1 1 14 tavua HUOM! Bittej„ D1-D7 ohjelmoidessa pit„„ D0 olla 1 tai ohjelmointi ei onnistu * DMA siirroissa k„ytet„„n nastoja TXRDY ja RXRDY sek„ IIR rekisterin bittej„ D4 ja D5 Sivu 18 Rekisterin LCR k„ytt” [os+3] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitit D0-D1: databittien m„„r„ D1 D0 Pituus ---------------------- 0 0 5 bitti„ 0 1 6 bitti„ 1 0 7 bitti„ 1 1 8 bitti„ Bitti D2: 0 -> 1 stop-bitti 1 -> 2 stop-bitti„ (1.5 stop-bitti„ jos 5 databitti„) Bitti D3: 0 -> ei pariteettia 1 -> pariteettibitti sallittu (ks. bitti D4) Bitti D4: 0 -> pariton (odd) pariteetti 1 -> parillinen (even) pariteetti Bitti D5: 0 -> tavallinen paritettibitin k„sittely (k„yt„ t„t„) 1 -> pariteettkik„sittely k„„nteisesti Bitti D6: 0 -> tavallinen l„hetys 1 -> l„hett„„ vastaanottajalle BREAK tilan. l„ht” menee loogiseen nollaan * Bitti D7: 0 -> normaalitila (DLAB=0) 1 -> nopeudenvalinta k„yt”ss„ (DLAB=1) * T„ll„ bitill„ voi suoraan ohjata dataulostulon arvoa. Kun mit„„n dataa ei l„hetet„, niin linja on lepostilassa eli ykk”nen. T„ll„ bitill„ voi sitten muuttaa tilan pakolla nollaksi. N„in voi l„hett„„ mit„ tahansa dataa ulos suoraan ohjelmallisesti ohjattuna. Sivu 19 Rekisterin MCR k„ytt” [os+4] (kirjoitettava ja luettava) -------------------------------------------------------- Reset tila: kaikki bitit nollia Bitti D0: 0 -> DTR=0 1 -> DTR=1 Bitti D1: 0 -> RTS=0 1 -> RTS=1 Bitti D2: ulostulo 1 (vapaa ulostulo, ei k„yt”ss„) Bitti D3: 0 -> keskeytykset eiv„t ole k„yt”ss„ 1 -> keskeytyslinjat kytketty ja keskeytykset mahdollisia Bitti D4: 1 -> sis„inen looppi testaustarkoituksiin (loop) * 0 -> sis„inen looppi poissa, normaali toiminta Bitit D5-D6: pysyv„sti nollia Bitti D7: pysyv„sti nolla (8250 ja xx450) 1 -> xx550 tilan kello pois p„„lt„ (vain xx550 tila) (power shut down) * Testaustilassa ulos l„hetett„v„t merkit eiv„t mene ulos, vaan sis„isesti l„hetet„„n vastaanottorekisterin. Sarjaulostulo (TX) on loogisessa ykk”sess„ ja sarjasis„„ntulo (RX) on kytketty pois. Moodemin tilan sis„„ntulot (CTS,DSR,DCD ja RI) on kytketty pois. Modeeminohjausbitit (MCR) D0-D3 on kytketty sis„isesti modeemin tilan sis„„ntuloihin. Moodeminohjausulostulot on kytketty inaktii- viseen tilaan (looginen ykk”nen). Sivu 20 Rekisterin LSR [os+5] k„ytt” (luettava) (kirjoitus sallittu vain testauksen) ---------------------------------------------------------------------------- Reset tila: bitit D0-D4 ja D7 nollia, bitit D5 ja D6 ykk”si„ Bitti D0: 1 -> merkki valmiina luettavaksi (Data Ready) Bitti D1: 1 -> puskurin ylivuoto (Overrun Error) Bitti D2: 1 -> pariteettivirhe (Parity Error) Bitti D3: 1 -> virhellinen stop-bitti (Framing Error) Bitti D4: 1 -> katko (Break Interrupt) Bitti D5: 1 -> l„hetyspitorekisteri tyhj„ (Transmitter Holding Register Empty) Bitti D6: 1 -> l„hetyssiirtorekisteri tyhj„ (Transmitter Shift Register Empty) Bitti D7: pysyv„sti nolla (8250 ja xx450) 1 -> Virhe vastaanotto (RCVR) FIFOssa (vain xx550 tila) Rekisteri on piirin on periaatteessa vaan luettava. Rekisteriin kirjoitus on kuitenkin mahdollista, koska kyseinen ominaisuus on varattu piirin tehdastestausta varten. Kirjoittaminen muussa kuin piirin diagnosointitarkoi- tuksessa ei toivottua. Rekisterin MSR k„ytt” [os+6] (vain luettava) -------------------------------------------- Reset tila: bitit D0-D3 nollia, bitit D4-D7 sis„„ntulojen mukaan Bitti D0: 1 -> muutos CTS:ss„ (DCTS) * Bitti D1: 1 -> muutos DTR:ss„ (DDSR) * Bitti D2: 1 -> soiton ilmaisimen nouseva reuna (TERI) ** Bitti D3: 1 -> muutos kantoaallon tunnistussignaalisssa (DRLSD) * Bitti D4: 1 -> p„„telaitteella CTS ylh„„ll„ Bitti D5: 1 -> p„„telaitteella DSR ylh„„ll„ Bitti D6: 1 -> modeemi ilmoittaa puhelimen soimisesta (RI) Bitti D7: 1 -> kantoaallon tunnistus, yhteys syntynyt (DCD) * Ykk”nen, jos vastaavan sis„„ntulon tila on muuttunut viimeisimm„n rekisterin lukukerran j„lkeen. ** Ykk”nen, kun vastaava sis„„ntulo on muuttunut nollasta ykk”seksi viimeisimm„n rekisterin lukukerran j„lkeen. Rekisterin SCR k„ytt” [os+7] (kirjoitettava ja luettava) (vain xx450 ja xx550) ------------------------------------------------------------------------------ Reset tila: ? T„m„ rekisteri ei vaikuta itse UARTin toimintaan mitenk„„n. T„t„ rekisteri„ voidaan k„ytt„„ v„liaikaisena s„ilytyspaikkana datalle. T„h„n rekisteriin voidaan kirjoitaa jotain tietoa muistiin ja lukea se takaisin. Sivu 21 Linjanopeuden asetus (rekisterit DIVLSB ja DIVMSB, yhteisnimelt„„n DIV) (kirjoitettavia ja luettavia) ----------------------------------------------------------------------- 1. Muutetaan rekisterin LCR bitti D7 ykk”seksi, jolloin saadaan nopeudenvalintarekisterit k„yt””n. 2. Lasketaan nopeusrekisterin tarvittava arvo kaavalla: DIV=115200/NOPEUS, miss„ nopeus on liikenn”intinopeus baudeina. 3. Hajotetaan DIV enemm„n (DIVMSB) ja v„hemm„n (DIVLSB) nerkitsev„„n tavuun. T„ss„ valmiita arvoja yleisimmille linjanopeuksille: (piirin kellotaajuus 1.8432 MHz) Nopeus(bps) DIV DIVMSB DIVLSB Nopeuden virhe ------------------------------------------------------- 50 2304 9 0 - 75 1536 6 0 - 110 1047 4 23 0.026 % 113.5 857 3 89 0.0258 % 150 768 3 0 - 300 384 1 128 - 600 192 0 192 - 1200 96 0 96 - 1800 64 0 64 - 2000 58 0 58 0.69 % 2400 48 0 48 - 3600 32 0 32 - 4800 24 0 24 - 7200 16 0 16 - 9600 12 0 12 - 19200 6 0 6 - * 38400 3 0 3 - * 56000 (57600) 2 0 2 2.86 % ** 115200 1 0 1 - * HUOM! N„m„ suuret nopeudet eiv„t toimi kaikissa (vanhemmissa) piireiss„. ŽLŽ KŽYTŽ SUUREMPIA LINJANOPEUKSIA KUIN KONEESI PIIRI PYSTYY KŽSITTELEMŽŽN. Datakirjat varoittavat ylitt„m„st„ suurinta nopeutta. ** Eritt„in nopea linjanopeus, jota pytyv„t k„sittelem„„n vain harvat piirit. T„h„n nopeuteen pystyv„t jotkut 8250A:at (Harris), jotkut xx450:t ja xx550:et. Piirin alustuksen yhteydess„ nopeuden ja linjaparametrien j„lkeen pit„„ tarkis- taa tilarekisteri, koska tulevan datan rekisteriss„ RD saattaa olla odottamassa roskamerkki. Tilanteesta selvit„„n lukemalla roskamerkki ja hylk„„m„ll„ se. Toinen mahdollisuus, joskin ei suositeltava, on kirjoittaa tilarekisteriin LSR nolla, mik„ on hieman ep„hieno temppu, koska tilarekisteri„ saa periaatteessa vain lukea ! Sivu 22 BIOS-rutiineja RS-liit„nn„n k„ytt”„ varten: (PC, AT ja PS/2) BIOS-rutiinit ovat per„isin ensimm„isen IBM PC:n ajoilta ja ovat suurelta osin k”mpel”it„ ja aajastaan j„lkeen j„„neit„. BIOS-rutiinit eiv„t tue siirtonopeuksia kuin 9600 baudiin saakka, vaikka nykyiset koneet pystyisiv„t paljon parempaan. Ne eiv„t my”sk„„n osaa puskurointia ja ovat muutenkin hitaita ja k”mpel”it„. PS/2 koneissa on muutama lis„ys tavanomaisiin BIOS-rutiineihin. PS/2 koneiden BIOS tukee uusia funktioita k„ytett„ess„ 19200 baudin nopeutta. En kuitenkaan luettele t„ss„ PS/2 koneiden erikoisrutiineita, koska ne ovat vain harvojen k„ytett„viss„ ja eiv„t kuitenkaan tarjoa mit„„n ratkaisevaa uutta. N„m„ samat toiminnot l”ytyv„t my”s FOSSIL-ajureista, jotka korvaavat BIOS- rutiinit RS-portin k„yt”ss„. Lis„ksi ne tarjoavat puskuroinnin ja muita etuja. FOSSIL-ajurit sis„lt„v„t yleens„ my”s muita lis„funktioita. Kun k„ytt„„ omissa ohjelmissa BIOS-rutiineja, niin samat ohjelmat saa toimimaan ilman muutoksia my”s FOSSIL-ajurien kanssa. FOSSIL-ajureireiden tarjoamista palveluista l”ytyy tietoa v„h„n BIOS-rutiineiden kuvauksien j„ljest„. INT 14h funktio 00h: portin initialisointi vaatii: AH=00h AL=portin parametrit D7 D6 D5 D4 D3 D2 D1 D0 nopeus pariteetti stop-bitit sananpituus 000 = 110 X0 = none 0 = 1 bitti 10 = 7 bitti„ 001 = 150 01 = odd 1 = 2 bitti„ 11 = 8 bitti„ 010 = 300 11 = even 011 = 600 100 = 1200 101 = 2400 110 = 4800 111 = 9600 DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa: AH=portin tila (merkitys, jos bitti ykk”nen) D7 timed out huomattu D6 l„htyssiirtorekisteri (transmit shift register) tyhj„ D5 l„hetysrekisteri (transmit holding register) tyhj„ D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 pariteettivirhe (parity error) D1 ylivuoto (overrun error) huomattu D0 vastaanotettava data valmis AL=modeemin tila (merkitys, jos bitti ykk”nen) D7 vastaanottokantoaalto huomattu D6 puhelin soi (ring indicator) D5 DSR (data-set-ready) D4 CTS (clear-to-send) D3 muutos vastaanottokantoaallon tunnistuksessa D2 nouseva reunan soimisen tunnistus (trainling edge RI) D1 muutos DSR:ss„ D0 muutos CTS:ss„ Sivu 23 INT 14h funktio 01h: merkin kirjoitus vaatii: AH=01h AL=kirjoitettava merkki DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa, jos onnistui: AH bitti D7=0 AH bitit D6-D0=portin tila (jos kyseinen bitti ykk”nen) D6 l„hetyssiirtorekisteri (transmit shiht register) tyhj„ D5 l„hetysrekisteri (transmit holding register) tyhj„ D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 paritteettivirhe huomattu D1 ylivuoto (overrun) huomattu D0 vastaanotettava data valmis AL=l„hetetty merkki muuttumattomana paluttaa, jos ei onnistunut: AH bitti D7=1 AL=l„hetetty merkki muuttumattomana INT 14h funktio 02h: luetaan merkki vaatii: AH=02h DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa, jos onnistui: AH bitti D7=0 AH bitit D6-D0=portin tila (jos kyseinen bitti ykk”nen) D4 katko (break) huomattu D3 stop-bitti virheellinen (framing error) D2 paritteettivirhe huomattu D1 ylivuoto (overrun) huomattu AL=luettu merkki palauttaa, jos ep„onnistui: AH bitti D7=1 INT 14h funktio 03h: portin tilan luku vaatii: AH=03h DX=portin numero (0=COM1, 1=COM2, jne.) palauttaa: AH=portin tila (kuten INT 14h funktio 00h:ssa) AL=modeemin tila (kuten INT 14h funktio 00h:ssa) Sivu 24 PC/MS-DOS sis„lt„„ my”s rutiineja sarjaliit„nn„n k„ytt””n INT 21h funktio 03h: lukee (odottottaa tarvittessa) merkin tavallisesta ulkoisesta laitteesta (tavallisesti COM1 tai AUX) vaatii: AH=03h palauttaa: AL=luettu merkki INT 21h funktio 04h: kirjoittaa merkin tavalliselle ulkoiselle laitteelle (tavallisesti COM1 tai AUX) vaatii: AH=04h DL=l„hetett„v„ merkki palauttaa: ei mit„„n HUOM! DOS asettaa aloittessaa AUX:lle (COM1) seuraavat parametrit: 2400 bps 8 databitti„ ei paritteettia 1 stop-bitti Sivu 25 RS-232C keskeytys- keskeytys- I/O BIOS data portti linja numero osoite osoite --------------------------------------------------------- COM1 IRQ4 INT 0Bh 3F8h 0040:0000 COM2 IRQ3 INT 0Ch 2F8h 0040:0002 COM3 IRQ4 INT 0Bh 378h 0040:0004 COM4 IRQ3 INT 0Ch 278h 0040:0006 Olen my”s t”rm„nnyt seuraavia standardista poikkeavia ratkaisuja COM3 IRQ2 INT 0Bh 338h HUOM! BIOS data osoitteet eiv„t toimi OS/2:ssa k„ytett„ess„ COM??.SYS ajureita. HUOM! Tiedot IRQ-linjoista eiv„t pid„ paikkaansa IBM PS/2 koneissa. Taulukossa esitetyt I/O osoitteet ovat yleisesti k„yt”ss„ olevia osoitteita. My”s my”s poikkeavia I/O osoitteita k„ytet„„n. Kunkin portin I/O osoiteen saa selville lukemalla taukossa esitetyst„ muistipaikasta 16 bittisen sanan. Muistipaikkojen osoitteet on esitetty muodossa segmentti:siirros heksadesimaa- limuodossa. COM3 ja COM4 k„ytt„v„t samoja keskeytyslinjoja (COM3:lle IRQ4 ja COM4:lle IRQ3), mik„ saattaa joissain tapauksissa aiheuttaa ongelmia. Varsinkin, jos kummatkin samaa keskeytyslinjaa tarvitsevat portit k„ytt„v„t yht„ aikaa samaa keskeytyslinjaa. (esim. hiiri ja modeemi) Jotkut sarjaliikennekortit tai korttimodeemit voidaan asettaa k„ytt„m„„n my”s normaalista poikkeavia keskeytyslinjoja, esimerkiksi IRQ5, jolloin edell„ kuvatusta ongelmasta p„„st„„n eroon. Ongelmaksi muitenkin saattaa t„ll”in muodostua portin toimimattomuus joidenkin ohjelmien kanssa. Yleens„ 4 linjaa tai enemm„n sis„lt„viss„ RS-232C sarjaliit„nt„korteissa k„ytet„„n "ylimm„„r„isten" linjojen hoitoon omia ratkaisuja, jopa kortilla olevaa omaa mikroprosessoria ja puskurimuistia saatetaan k„ytt„„. N„it„ erikoiskortteja k„ytet„„n vain erikoisratkaisuissa. Keskeytysohjaimen k„yt”st„ IRQ-linjojen p„„ll„oloa ohjataan keskeytysohjaimen maskirekisterist„ portti- osoitteesta 0021h. Seuraavat bitit vaikuttavat RS-piirien keskeytyksiin (0 merkitsee, ett„ keskeytyslinja p„„ll„). D4 -> IRQ4 D3 -> IRQ3 Jokainen kovokeskeytys, kuten RS-linjojen aiheuttamat, on kuitattava suorite- tuiksi keskeytysohjaimelle. Muutoin keskeytysohjain ei l„het„ uusia keskeytyk- si„ prosessorille, mik„ aiheuttaa mm. n„pp„imist”n lukkiutumisen ja koneen kellon pys„htymisen. Keskeytyksen kuittaaminen suoritetuksi tapahtuu kirjoittamalla I/O osoittee- seen 20h arvo 20h. T„m„ kannattaa tehd„ keskeytysrutiinin lopussa tai kohdas- sa, jossa uusi keskeytys ei haittaa. Sivu 26 Lista FOSSIL-ajurin X00 tarjoamista INT 14h palveluista numero palvelu ------------------------------------------------------------------------------- 00h Linjanopeuden ja linjaparametrien asetus (Set Baud Rate) 01h Merkin l„hetys (Transmit character), odottaa tilaa l„hetyspuskurissa 02h Merkin vastaanotto (Receive character), odottaa kunnes merkki saatavilla 03h Tilan luku (StatusRequest) 04h Ajurin intialisointi ja p„„lle laitto (Initialize driver) 05h Ajuri pois p„„lt„ (Deinitialize driver) 06h DTR:n nostaminen/laskeminen (Raise/lower DRT) 07h Palauta systeemin ajastimen parametrit (Return system timer params) 08h Tyhjenn„ l„hetyspuskuri (Flush output buffer) odottamalla, ett„ kaikki merkit puskurista on l„hetetty 09h Nollaa l„hetyspuskurin heti (Purge output buffer immediately) 0Ah Nollaa l„hetyspuskurin (Purge output buffer), mutta huolehtii mahdollisesta k„ttelyst„ 0Bh Merkin l„hetys (Transmit character, no wait) ilman odotusta purkuriin mahtumisesta 0Ch Katsoo merkin vastaanottopuskurista ("Peek ahead" input buffer) mutta ei poista sit„ 0Dh Katsoo merkin n„pp„imist”puskurista ("Peek ahead" KB buffer) mutta ei poista sit„ 0Eh N„pp„imist”n luku (Read Keyboard), odottaa jos merkki„ ei n„pp„imist”- puskurissa 0Fh Madollistaa/laittaa pois (Enable/disable com port flow control) k„ttelyt 10h Mahdollistaa/laittaa pois Ctl-C/Ctl-K tarkistuksen ja l„hetyksen (Enable/disable Ctl-C/Ctl-K check, Enable/disable transmitter) 11h Aseta kursorin paikka ruudulla(Set cursor location) 12h Lue kursorin paikka ruudulla(Read cursor location) 13h Kirjoita merkki ruudulle ANSI:n kautta (Write char ANSI support) 14h Laittaa p„„lle/pois (Enable/disable "watchdog") boottauksen kantoaallon kadotessa 15h Kirjoita merkki ruudulle (Write char re-entrant), vapaasti kutsuttava 16h Lis„„/poista toiminta kellokeskeytyksest„ (Insert/delete function from timer tick) 17h Systeemin boottaus (Reboot system) 18h Lukee useamman merkin k„ytt„j„n puskuriin (Read block) 19h Kirjoittaa useamman merkin k„ytt„j„n puskurista (Write block) 1Ah Aloittaa/lopettaa BREAKin l„hetyksen (Start/stop sending break) 1Bh Lukee ajurista tietoja k„ytt„j„n puskuriin (Get Driver Info) 7Eh Lis„„ k„ytt„j„n palveluja INT 14h:aan (Install user appendage) 7Fh Poist k„ytt„j„n palveluja INT 14h:sta (Remove user appendage) T„m„n listan on tarkoitus antaa vikkej„ palveluista, joita FOSSIL-ajurit tarjoavat. Tietoa palveluiden tarkemmasta k„yt”st„ ja muusta niihin liittyv- „st„ pit„„ etsi„ ja tarkistaa FOSSIL-ajureiden mukana tulevista dokumenteista. T„m„ sivun tiedot ovat per„isin X00 FOSSIL-ajurin dokumenteista. Sivu 27 RS-232C-liit„nn„n k„ttely modeemiyhteydess„ (XON ja XOFF -merkit k„yt”ss„) Vastaanottokeskustelu DTE-laite 1: L„hetyskeskustelu DTE-laite 2: 1. DTR: Aseta DTR. Laite k„ynniss„ 1. DTR: Aseta DTR. Laite 2 k„ynniss„ ja valmis. ja valmis. DSR: Modeemi 1 k„ynniss„. DSR: Modeemi 2 k„ynniss„. 2. RCD: Kantoaalto tunnistettu, 2. DCD: Kantoaalto tunnistettu, vastaanottokanava OK. vastaanottokanava OK. 3. RTS: Aseta RTS. Noin kuunnella, modeemin valmistauduttava vastaanottoon. 4. CTS: Viiv„st„ v„h„n RST:st„, sitten aseta CTS. 5. TxD: L„het„ tieto modeemille, kun se on valmis. Modeemi moduloi tiedon linjalle. 6. RxD: Modeemi demoduloi tiedon ja l„hett„„ RxD linjalle. 7. TxD: L„hett„„ XOFF-merkin. En voi 7. RxD: Vastaanottaa XOFF-merkin. vastaanottaa lis„„. Keskeyt„n kunnes saan XON -merkin. 8. RTS: Nollaa RTS. Modeemi „l„ dekoodaa. 9. RTS: aseta RTS. Modeemi, valmistaudu kuuntelemaaan. 10. CTS: Viiv„st„ hieman RTS:st„, sitten aseta CTS. Modeemi on taas valmis. 11. TxD: L„het„ XON. Voin taas vastnanottaa. 12. RxD: XON vastaanotettu. Voin taas l„hett„„ tietoa kun sit„ on. 13. Jatka kohdasta 5, kunnes yhteys 13. Jatka kohdasta 5, kunnes yhteys p„„tet„„n. p„„tet„„n. Sivu 28 Mahdollisia ongelmia UART-piirin ohjelmoinnissa UART-piirin ohjelmointi ei ole ongelmatonta. Varsinkin jos haluaa tehd„ sarjaliikennerutiininsa t„ysin keskeytyspohjaisiksi, t”rm„„ moniin ongelmiin. Osa n„ist„ ongelmista johtuu UART-piirin 8250 hieman kehittym„tt”mist„ keskeytysominaisuuksista. Valitettavasti n„m„ ongelmat tulevat eteen jopa xx550 UART-piirien kanssa. Ongelmat tulevat ylleens„ esille nopeassa kaksisuuntaisessa siirrossa. Mahdollisesti ongelmia aiheuttavia ominaisuuksia ja puutteita: 1. UART-piiri ei tunnista alemman tason keskeytyst„ kun korkeamman tason keskeytyst„ palvellaan 2. INS8250:n antamat tilarekisterin tilat eiv„t ole aina luotettavia. T„m„ esiintyy varsinkin nopeiden koneiden kohdalla, joissa on hidas 8250 UART-piiri. INS8250 saattaa v„itt„„ l„hetysrekisteri„ tyhj„ksi vaikka se ei olekaan tyhj„. T„st„ aiheutuu helposti merkkien katomisia. Muut UART-mallit eiv„t yleens„ valehtele tilaansa. Ongelmia voi v„ltt„„ k„ytt„m„ll„ apuna seuraavia neuvoja: 1. L„htet„„n keskytyksen kuittaus keskeytysohjaimelle mahdollisimman aikaisessa vaiheessa keskeytysrutiinia, mik„li t„m„ on vain mahdollista. 2. Keskeytysrutiinissa maskataan pois l„hetyskeskeytys ja maskataan se takaisin p„„lle. T„m„ tehd„„n heti ennen korkeampien prioriteetin UART- keskytyspalveluiden suoritusta (vastaanottodata valmis, linjatilakeskytys) Kohdan kaksi ratkaisu perustuu siihen, ett„ UART aiheuttaa l„hetysrekisterin tyhjyydest„ ilmoittavan keskeytyksen aina kun kyseist„ keskeytyst„ vastaava maskibitti on asetettu ja l„hetysrekisteri on tyhj„. Sivu 29 Nasta Suunta K„ytt” 8250 ja xx450 --------------------------------- 1 I/O D0 Databitti (v„hiten merkitsev„) 2 I/O D1 Databitti 3 I/O D2 Databitti 4 I/O D3 Databitti 5 I/O D4 Databitti 6 I/O D5 Databitti 7 I/O D6 Databitti 8 I/O D7 Databitti (eniten merkitsev„) 9 I RCLK Vastaanottokello 10 I SIN Sarjasis„„nmeno 11 O SOUT Sarjaulostulo 12 I CSO Piirin valintasignaali 13 I CS1 Piirin valintasignaali 14 I CS2 * Piirin valintasignaali 15 O BAUDOUT * Baudikellon l„ht” 16 I XTAL1 Kellokidett„ varten 17 O XTAL2 Kellokidett„ varten 18 I DOSTR * Datan kirjoituksen liipaisupulssi 19 I DOSTR Datan kirjoituksen liipaisupulssi 20 Vss Maa 21 I DISTR * Datan luvun liipaisupulssi 22 I DISTR Datan luvun liipaisupulssi 23 O DDIS Ulkoisen ajurin kytkent„ pois 24 O CSOUT Piirin valintasignaalin ulostulo 25 I ADS * Osoitteen liipaisupulssi 26 I A2 Osoitelinja I/O:ta varten 27 I A1 Osoitelinja I/O:ta varten 28 I A0 Osoitelinja I/O:ta varten 29 NC Ei kytketty 30 O INTRPT Keskeytyssignaalin l„ht” 31 O OUT2 * Ohjelmoitava ulostulo (ohjaa PC:ss„ 3-tilapuskuria) 32 O RTS * RTS ulostulo 33 O DTR * DTR ulostulo 34 O OUT1 * Ohjelmoitavan ulostulon l„ht” 35 I MR Piirin retointi 36 I CTS * CTS sis„„ntulo 37 I DSR * DSR sis„„ntulo 38 I RLSD * RLSD sis„„ntulo 39 I RI * RI sis„„ntulo 40 Vdd K„ytt”j„nnite Eroavat nastat xx550:ss„ (ei kytketty yleens„ PC:n sarjaliikennekorteissa) ------------------------ 24 O TXRDY * L„hetys DMA:ta varten 25 O RXRDY * Vastaanotto DMA:ta varten * Kyiseiset signaalit alhaalla aktiivisia. Eli niiss„ k„„nteinen logiikka. I = sis„„ntulo O = ulostulo Sivu 30 DISCLAIMER - VASTUUTTOMUUSJULISTUS T„m„ teksti on kirjoitettu usean l„hteen pohjalle, enk„ ole k„yt„nn”ss„ kokei- lut l„hesk„„n kaikkea tekstiss„ olevaa tietoa. T„ten en pysty takaamaan tekstin t„ytt„ oikeellisuutta. Olen yritt„nyt tarkistaa teksti„ useaan otteeseen ja vertaillut eri l„hteiss„ oleviin tietoihin, mutta kaikesta huolimatta siihen on saattanut eksy„ virheit„. En ota mit„„n vastuuta tekstin sis„ll”st„ tai siin„ olevista virheist„. En katso olevani vastuussa tekstin tai tekstiss„ olevien tietojen mahdollisesti jollekulle tai jollekin aiheuttamasta vahingosta tai haitasta. En ole my”sk„„n velvollinen korjaamaan tekstiss„ mahdollisesti olevia virheit„ tai puutteellisuuksia. L„hteet: IBM ROM BIOS (Microsoft press) MikroBitti 9/87 Archer Semiconductor Reference Guide 1988 Yleiselektroniikka tuoteluettelo 1985 Elektor Electronics June 1989 Elektor Electronics May 1990 Prosessori 8/89 MikroPC 5/90 Copam PC 286C-120 Personal Computer Users Guide User Supported Programming Technical Reference (PROGREF1 ja PROGREF2) FINTRONIC KOMPONENTIT -mainos IBM Personal Computer UMC DATA BOOK 1988-1989 Microcomponent & Memory ICs The Greenleaf Comm Library rutiinit 8088 Assembler Language Programming The IBM PC B-2010 I/O Card User's Guide Harris Product Guide '89 Silicon Systems SSI 73M550/550F datalehdet TECH Help (by Flambeaux Software) X00 fossil ajurin dokumentit Racal-Milgon Racal-Vadic VA3200 modeemin tekniset tiedot National Semiconductor Advanced Peripherals Handbook VIC Revealed SmartLink 2400S/2400BPS MODEM User's Manual MultiModem 224/224E Owner's Manual Radio Electronics Computer Digest November 1988 Radio Electronics June 1988 Lis„ksi l„htein„ useita viestej„ useista elektronisista postilaatikoista sek„ usenetista alueelta comp.sys.ibm.pc sek„ sen alaryhmist„.