Descriere generala
Comunicaþiile seriale se utilizeaza pe distanþe mici de
ordinul zecilor de metri cat ºi pe distanþe mari (interlocalitaþi),
prin intermediul sistemului telefonic. Transformarea paralel-serie a cuvintelor
de date asociate cu transmisia pe o singura linie (in general un
singur canal), elimina sarcina dificila a asigurarii la
recepþie a sincronismului, intre mai multe semnale electronice transmise
in paralel pe linii fizic diferite. l5h23hb
Comunicaþiile serie in cazul PC-urilor se incadreaza
in principiu in modelul general al unei comunicaþii de date
serie intre doua echipamente de prelucrare a datelor (terminale,
calculatoare). O astfel de comunicaþie este formata din urmatoarele
componente :
- echipamente terminale (?C, calculator, terminal de date, etc) sunt surse ºi/sau
destinaþii ale datelor. Ele sunt interfaþate paralel cu unitaþile
de comunicaþii serie
- unitaþile de comunicaþie serie (numite ºi controlere
de comunicaþie sau interfeþe de comunicaþie cu funcþiuni
de control al comunicaþiei. In principal, unitatea serie executa
conversia paralel-serie ºi serie-paralel de la ºi catre ?procesor.
In plus tot la acest nivel se executa ºi detecþia ºi
corecþia erorilor
- echipamente de adaptare electrica (ETCD - echipament terminal pentru
comunicaþii de date) cu linia fizica (canalul) pe care se realizeaza
legatura, numite in general modem-uri. In cazul in
care mediul de transmisie este analogic, modemul executa conversia digital/analogica
ºi cea inversa ºi modularea/demodularea unui semnal purtator,
corespunzator cu largimea de banda a canalului utilizat
ºi a vitezei de transmisie
- linia de comunicaþie, reprezinta mediul fizic prin care se face
comunicaþia. In practica aceasta "linie"
poate lua o diversitate de forme (linii fizice dedicate, linii telefonice din
reþeaua telefonica publica, canale din sisteme mutiplex
cu diviziune in frecvenþa sau in timp)
Comunicaþiile de date sunt subiectul a numeroase standardizari
internaþionale. In aceste standardizari, unitatea de prelucrare
ºi cea de comunicaþie serie formeaza impreuna
echipamentul terminal de prelucrare a datelor (EPTD), vazut dinspre ETCD
(modem) printr-o interfaþa mecanica ºi electrica
standard de comunicaþie serie care asigura compatibilitatea diverselor
ETPD ºi ETCD.
Circuitul de date este porþiunea cuprinsa intre doua
ETPD. El asigura comunicaþia serie a datelor la nivelul ETPD, fara
ca ETPD sa fie nevoit sa "cunoasca" detaliile
implementarii legaturii fizice pe linie. Se observa ca
in cazuri particulare, cele doua ETPD pot fi legate direct prin
linii fizice cu cuplaj in curent continuu pe distanþe de ordinul
zecilor de metri, caz in care circuitul de date degenereaza in
aceasta linie. Citeva exemple tipice sunt: conectarea unui terminal
de tip consola printr-o legatura serie cu un ?C sau conectarea
serie a doua ?C aflate la o distanþa relativ mica.
Legatura de date include circuitul de date ºi unitaþile
de comunicaþie serie. La nivelul acesteia, protocoalele de date asigura
stabilirea, menþinerea, asigurarea corectitudinii mesajelor transmise
ºi deconectarea legaturii intre doua staþii de
date. Prelucrarile implicate de realizarea protocoalelor sunt de nivel
logic ºi nu electric. In afara canalului principal de transmisie,
poate exista ºi un canal secundar de intoarcere, utilizat pentru
confirmari de recepþie.
Parmetrii legaturii de date in serie
Debitul binar (viteza de transmisie) = numarul maxim de simboluri binare
transmise pe secunda:
D=1/T abiþi/si unde T este perioada de timp alocata transmisiei unui nivel logic 1 sau
0 (aºa numita perioada de "bit").
Viteza reala efectiva de transmisie a datelor este inferioara
lui D deoarece:
- in afara informaþiei propriu-zise, exista porþiuni
redundante ale mesajelor (identificatori, comenzi, biþi pentru detecþia
ºi corecþia erorilor etc.)
- in mai multe cazuri transmisia este de tip asincron, caz in care
in interiorul unui mesaj exista "pauze variabile" care
nu poarta informaþie
- in cazul apariþiei erorilor se procedeaza de obicei (la
nivelul legaturii de date) la retransmiterea mesajelor eronate, ceea
ce conduce la micºorarea vitezei efective
Viteza de modulaþie = numarul de schimbari pe secunda
a starii electrice la ieºirea modemului (inversul intervalului de
modulaþie) ºi se masoara in bauds :
V(m)=1/* abaudsi
Relaþia intre D ºi V(m) este:
D=V(m) ? log2n abiþi/si
unde n este numarul starilor electrice utilizate in modem.
Vitezele ºi debitele standardizate pe plan internaþional sunt: 75,150,
300, 600, 1200, 2400, 4800, 9600, 19200. Vitezele mai mari pot ajunge la 14400,
28800, 38400, 57600, 96000, 115200.
Codurile utilizate in comunicaþii de date
In comunicaþia de date, informaþia se transmite sub forma
de caracter, un caracter reprezentind litere, cifre, semn speciale, sau
informaþii pentru comanda comunicaþiei (caractere neafiºabile).
In funcþie de codul utilizat, un caracter se reprezinta prin
5 pina la 8 biþi.
Codurile mai utilizate sunt:
- codul Baudot (CCITT nr.2 sau AI nr.2), sau codul CCITT nr.2. Este utilizat
pentru transmisiile telegrafice cu viteze mici pe reþelele telegrafice
comutate (TELEX), avand 5 biþi/caracter (32-combinaþii)
- codul CCITT NR.5 (ASCII) cu 7 biþi/caracter (128-combinaþii)
- codul BCD cu lungimea de 7 biþi (6 biþi plus un bit pentru paritate).
Acest cod permite obþinerea a 64 combinaþii de cod distincte pentru
reprezentarea informaþiei vehiculate pe canal ºi a fost utilizat
in sistemele de calcul de generaþia a 2-a
- codul EBCDIC cu 8 biþi/caracter, ce constituie o extindere a codului
BCD, neavind control al paritaþii, oferind 256 de combinaþii
Blocul reprezinta un ansamblu de biþi, caractere sau cuvinte (cuvant
este un octet - byte sau multioctet de date, in general egal ca dimensiune
cu cuvintul de date al UCP).
Mesajul reprezinta o succesiune de unul sau mai multe blocuri, incadrate
de delimitatori.
Detecþia ºi corecþia erorilor
Problema esenþiala in comunicaþia de date, detecþia
ºi corecþia erorilor se face la nivelul funcþional al legaturii
de date. Metoda general utilizata care permite detectarea erorilor este
adaugarea la transmisie a informaþiei de control (redundanta),
aflata in corespondenþa stricta cu conþinutul
informaþional propriu-zis al mesajului. Acest lucru permite efctuarea
la recepþie a unor verificari asupra corectitudinii elementului
protejat (caracter, mesaj, bloc).
Metodele de protejare mai uzuale sunt urmatoarele :
- verificarea de tip vertical (VRC=Vertical Redundancy Check), in care
fiecare caracter este prevazut la transmisie cu un bit suplimentar de
paritate. Acesta asigura o anumita paritate fixata (para
sau impara) a caracterului completat, verificabila la recepþie
- verificarea longitudinala (LRC=Longitudinal Redundancy Check) in
care se adauga la sfirºitul unui bloc un caracter reprezentind
suma modulo doi a tuturor caracterelor din bloc
- utilizarea codurilor detectoare ºi corectarea de erori. De obicei sunt
utilizate coduri ciclice, cu polinoame generatoare standardizate (CRC-Cyclic
Redundancy Check)
Corectarea erorilor detectate se poate face automat (daca codul utilizat
este ºi corector) sau prin retransmiterea mesajului (blocului) eronat.
Corecþia prin retransmitere este de trei tipuri :
- cu oprire ºi aºteptare ARQ-ACK (Automatic ReQuest for Repeat-ACKnowledge)
in care transmitatorul transmite blocul n de informaþie ºi
aºteapta apoi semnal de confirmare. In cazul confirmarii
pozitive (ACK) se transmite blocul n*1 iar in caz contrar, se transmite
blocul n
- cu transmisie continua (ARQ-NACK) - in care transmitatorul transmite
continuu blocurile ...n, n*1, n*2,... fara a aºtepta semnalul
de confirmare pozitiva (ACK). Daca se primeºte o confirmare
negativa (NACK) de la receptor, atunci se reia transmisia incepind
de la blocul recepþionat eronat de catre corespondent
- cu transmitere selectiva - asemanatoare cu ARQ-NACK,
cu deosebire ca se retransmite doar blocul eronat.
Transmisia asincrona ºi transmisia sincrona
O legatura de date poate fi utilizata in trei moduri
:
- simplex - transmisie intr-o singura direcþie
- semi-duplex - transmisie in ambele sensuri dar succesiv
- duplex - transmisie simultana in ambele sensuri.
Modul de utilizare depinde de implementarea fizica a circuitului de date
ºi de protocolul de date folosit. Citirea ºi interpretarea corecta
a datelor recepþionate de catre unitatea de comunicaþie serie
presupune o sincronizare intre transmiþator ºi receptor.
Exista doua tipuri de transmisii (referitor la sincronizare) :
asincrona ºi sincrona.
Transmisia asincrona (START-STOP)
In transmisia asincrona, caracterele se transmit ca entitaþi
distincte delimitate de bitul de START (nivel"0") ºi debitul
(sau biþii) de STOP (nivel "1") ca in fig 1 :
fig 1 - caracter in transmisie seriala
Intervalul dintre doua caractere poate fi oarecare, linia fiind menþinuta
in acest caz pe nivelul electric corespunzator situaþiei
de repaus ("1" logic). Lungimea unui caracter variaza in
funcþie de codul folosit, intre 5 ºi 8 biþi/caracter.
Durata (minima) a STOP-ului este T, 2T sau 1,5T (valori standard).
Receptorul trebuie sa cunoasca: viteza de transmisie (1/T), numarul
de biþi/caracter ºi daca exista sau nu bit de paritate
ºi tipul acestuia, durata STOP-ului. Recepþia unui caracter este
declanºata de frontul anterior negativ al bitului de START. Receptorul
porneºte o baza de timp locala, decalata cu T/2 faþa
de frontul de lucru negativ al START-ului ºi care furnizeaza momentele
de eºantionare a biþilor caracterului. Recepþia unui caracter
se termina dupa achiziþionarea tuturor biþilor acestuia.
Procesul se repeta caracater cu caracter.
Transmisiunile de tip asincron se utilizeaza curent pentru viteze mici
(* 1200 biþi/s), in legaturile de date prin modem-uri. Pentru
legaturi directe, binare pe distanþe mici se pot utiliza ºi
viteze mai mari: 2400, 4800, 9600 ºi valori foarte mari dar care nu sunt
garantate ºi nici documentate: peste 9600: 19200, 28800, 38400, 57600,
115200.
Transmisia sincrona
Transmisia sincrona se utilizeaza pe legaturile de date
de viteza mare, fiind preferata datorita eficienþei (majoritatea
protocoalelor de date sunt construite pentru transmisii sincrone). Informaþia
este transmisa sub forma de blocuri de caractere sau biþi
(102-105 biþi) succesivi (fara biþi de START ºi
STOP intre caractere), incadrate de caractere speciale de sincronizare,
delimitare ºi comanda.
In receptorul sincron exista trei nivele de sincronizare:
- sincronizarea pe bit, obþinuta prin bucle cu calare de faza
(PLL) pe baza tranziþiilor existente in semnalul recepþionat
- sincronizarea pe caracter realizata prin recunoaºterea a unul
sau doua caractere de fazare (numite caractere SYN ). Receptorul sesizeaza
caracterele SYN ºi iºi fazeaza logica sa recunoasca
prin numararea biþilor, inceputul ºi sfarºitul
fiecaruia dintre caracterele urmatoare. Pentru a asigura menþinerea
sincronizarii, se insereaza caractere SYN suplimentare in
mesajul transmis, la intervale de una sau doua secunde. Daca recptorul
nu mai recepþioneaza corect SYN (intr-un interval limitat
de timp), el rejecteaza mesajul ºi reincepe cautarea
lui SYN
- sincronizarea de bloc sau mesaj dependenta de protocolul de date (DLC=Data
Link Control) folosit
Numarul de staþii de date interconectate printr-un canal de telecomunicaþii
poate fi de doua feluri (legaturi point-to-point) sau mai mult
de doua (legaturi multipoint), acest numar avand
implicaþii asupra procedurilor de exploatare (adresare, explorare).
Protocoale de date
Funcþiunile de baza ale unui protocol de date denumit pe scurt
DLC (Data Link Control) sunt :
- stabilirea si intreruperea legaturii intre doua
staþii
- asigurarea integritaþii mesajelor prin detecþia erorilor,
cerere de retransmisie ºi confirmari de recepþie (pozitive sau negative)
- identificarea transmiþatorului ºi receptorului prin explorare
ºi selecþie
- asigurarea umor funcþii de comanda speciale, cum ar fi : cererea
transmiterii starii, resetarea unei staþii, confirmarea resetarii, start,
confirmarea startului, deconectare
In cadrul modelului arhitectural al comunicaþiei de date, DLC se
gaseste pe nivelul 2. Clasificarea protocoalelor de date se face in principal
dupa modul cum raspund la sincronizare. Exista protocoale
orientate pe caracter (BCP - Byte Control Protocols) ºi protocoale orienrate
pe bit (BOP - Bit Oriented Protocol).
Protocolul BCP
Mesajul consta intr-or succesiune de octeti, delimitaþi
printr-o secvenþa de sincronizare (doua sau mai multe caractere
SYN). Mesajul propriu-zis estecompus din unul sau mai multe blocuri. Pentru
funcþionarea corecta. a legaturii de sunt prevazute
caractere de comanda care fac parte din codul utilizat (ASCII, EBCDIC,
etc). Un bloc se compune dintr-un camp de comanda (header), un
cimp de text ºi un cimp pentru detectarea erorilor (LRC sau
CRC ). Exemple de caractere de comanda sunt : SOH (Start of Header),
STX (Start of TeXt), ETB (End of Intemediate Transmission Block), ETX (End of
TeXt), EOT (End Of Trasmission).
Protocolul BOP
In acest protocol unitatea de transmisie este cadrul, delimitat de doua
flaguri (01111110). In interiorul unui cadru se gasesc : cimpurile
de comanda, de informaþie, de detectare a erorilor. In aceste
protocoale, mesajul propriu-zis este tratat ca o succesiune de biþi situata
intre cele doua flaguri. Protocoalele BOP sunt mai flexibile decat
BCP in asigurarea “transparenþei” (transparenþa=posibilitatea
de a transmite ºi caractere de comanda in interiorul blocului
de informaþie, fara ca acestea sa fie interpretate
la recepþie drept comenzi ). Exemple de protocoale BOP : SDLC (Synchronous
Data Link Control), HDLC (High Level Data Link Control-ISO), ADCCP (Advanced
Data Communication Control Procedure-ANSII), etc.
Circuite specializate pentru comunicaþia serie
Comunicaþia serie in PC-uri este realizata de catre
circuite programabile specializate, care comunica paralel cu UC ºi
serie cu exteriorul. Circuitele specializate pentru comunicaþia serie
(numite ºi intefeþe de comunicaþie serie) se intalnesc
in practici in doua variante :
- circuite transmiþator-receptor asincron (UART=Universal Asincron
Receiver/Transmitter) sau transmiþator/receptor asinancron (USART
- permite ºi realizarea sincronizarii in cazul protocoalelor
sincrone)
- circuite transmiþator/receptor ºi realizare a funcþiilor
protocoalelor de date. Avantajul acestei specializari este eliberarea
UC de efectuarea sarcinilor privitoare la protocolul de date.
Strutura unui transmiþator/receptor elementar (T/R)
Funcþiile de baza ale T/R sunt conversia serie/paralel la recepþie
ºi paralel/serie la transmisie.
Transmiþatorul (T) conþine un registru paralel in care
primeºte un cuvant in mod paralel de la UC. Codul paralel se
transfera in registrul de deplasare pentru conversia paralel/serie,
generandu-se semnalul serie pe o ieºire notata TxD, la momente
de timp furnizate de un semnal de tact pentru transmisie notat TxC. Acest ceas
poate fi primit din exterior (modem) sau este obþinut prin divizarea ceasului
sistemului. In funcþie de modul de lucru, asincron sau sincron,
logica de comanda adauga biþii de START, paritate, STOP
(pentru asincron) sau caracterele de sincronizare, LRC, CRC, SYN (pentru sincron).
Programarea transmiþatorului implica setarea regiºtrilor logicii
de comanda (porturi), prin cuvinte de mod ºi comanda prin
care se stabilesc caracteristicile funcþionale ale circuitului. Transmiþatorul
poate fi controlat prin cuvantul de stare. Acesta este reprezentat. pe
acest model de semnalele TxRDY (TxRDY=1, cand buferul de transmisie este
vid, deci poate primi un nou caracter) ºi TxE (TxE=1, cand convertorul
paralel - serie este vid deci s-a terminat transmisia efectiva a caracterului).
Informaþiile datorate acestor biþi se pot obþine :
- citirea cuvantului de stare al transmiþatorului
- intreruperi generate de semnalele electrice asociate la TxRDY ºi
TxE
Receptorul (R) conþine un caracter serie - paralel in care se
achiziþioneaza in mod serie biþii semnalului pe intrarea
RxD, la eºantionarea cu ceasul RxC. Dupa terminarea recepþiei
unui caracter, acesta este transferat in buferul de recepþie. Acest
lucru este reflectat prin setarea RxRDY=1. Se poate citi un cuvant de
stare sau se genereaza o intrerupere. Cuvantul de stare poate
conþine ºi alte informaþii legate de recepþie.De exemplu,
pentru modul de lucru asincron, cuvantul de stare conþine in
mod tipic urmatorii biþi indicatori : eroare de paritate, eroare de recepþionare
a bitului de STOP (daca este un o in loc de 1), eroare de suprapunere
(overrun), cand un caracter a fost recepþionat ºi transferat
de receptor in buffer peste cel precedent.
Programarea receptorului (la fel ºi a transmiþatorului) se
face prin scrierea in registrele logicii de comanda a cuvintelor
de mod ºi de comanda corespunzatoare modului ºi parametrilor
de lucru doriþi.
Porturi seriale intr-un PC
Intr-un PC se pot gasi pana la 4 porturi seriale,
adresabile prin servicii BIOS sau DOS. Pentru BIOS primul port serial este 0,
urmatorul este 1, etc. Pentru DOS primul port serial este COM1, al doilea
este COM2, etc. In modul de funcþionare sincrona se presupune
sincronizarea ca operaþie prealabila recepþionarii
ºirului de caractere ce constitue mesajul. Circuitul intra in
modul "cautare" (HUNT) in care biþii recepþionaþi
pe linia RxD sunt inscriþi unul cate unul in tamponul
datelor recepþionate. Dupa fiecare bit anscris are loc compararea
intre conþinutul acestui tampon ºi conþinutul unui registru
incarcat prin program cu caracterul de sincronizare. Cand
cele doua registre au conþinuturi diferite, se aºteapta
recepþionarea bitului urmator ºi operaþia continua
astfel pana ce tamponul datelor recepþionate conþine
caracterul SYN. Daca protocolul de comunicaþie prevede sincronizarea
cu un singur SYN, circuitul iese din modul HUNT ºi SYNDET=1. Trebuie remarcata
necesitatea ca cele doua caractere sa fie caractere succesive,
fara biþi sau caractere straine intercalate intre
ele. Intrarea in modul "cautare" se face in urma
iniþializarii funcþionarii sau in urma conmenzii
prin program a acestui regim. In modul asincron sunt adaugaþi biþii
de START, de paritate (daca este cazul) ºi bitul (biþii) de
STOP. In acest mod un semnal de 0 pe linia RxDpoate semnifica un bit de START.
Daca linia este gasita in starea 0, se trece la recepþia
caracterului, constand din biþi de paritate ºi bit (biþi)
de STOP. Cand intreg caracterul a fost recepþionat, linia
RxRDY indica disponibilitatea acestuia in tamponul datelor recepþionate.
In conformitate cu specificaþiile CCITT V.24 respectiv EIA RS 232-C
nivele electrice corespunzand nivelelor logice pentru interfaþa
seriala sunt :
- pentru "0" logic : +3 - +12V
- pentru “1” logic : -3 - -12V
Programarea interfeþei seriale
Interfata seriala poate fi programata in trei moduri :
- servicii DOS
- servicii BIOS
- programarea directa a interfeþei seriale prin controlul regiºtrilor
Programarea prin intermediul serviciilor DOS se face folosind funcþia
0x4b cu INT 21h. Programarea prin servicii BIOS permite o viteza maxima
de 9600 bauds, dupa care se pot pierde caractere. Acest fapt se datoreaza
modului cum se desfaºoara comunicaþia in PC (de
exemplu, la afiºare se face ºi scroll al ecranului care consuma
timp).
Serviciul 0, INT 14H
Acest serviciu seteaza parametrii de comunicaþie : viteza de transmisie,
paritatea, numarul de biþi de stop ºi lungimea cuvantului.
Paramatrii sunt introduºi in registrul AL :
Dupa execuþie intreruperea este dezactivata ºi
registrul AX conþine informaþii ce vor fi descrise la serviciul
3.
Serviciul 1, INT 14H
Acest serviciu este utilizat pentru transmisia unui caracter. Caracterul ce
urmeaza a fi transmis este incarcat in registrul AL,
DX este incarcat cu numarul portului utilizat (este valabil
pentru toate serviciile). Dupa transmisie, registrul AH conþine
informaþii despre cum s-a transmis caracterul : daca bitul 7 este
setat inseamna ca nu s-a putut transmite octetul. In
caz contrar registrul conþine primii 7 biþi de stare (fara
bitul de Time-out error).
Serviciul 2, INT 14H
Cu acest serviciu se face recepþia unui caracter in registrul AL.
Daca bitul 7 al registrului AH este setat inseamna ca
recepþia a eºuat. In caz contrar, biþii 4, 3, 2,1 sunt
biþiicorespunzatori ai registrului de stare.
Serviciul 2, INT 14H
Acest serviciu returneaza starea portului serial. Registrul AH raporteaza
starea liniei de comunicaþie, iar registrul AL starea modemului.
Registrul AH (comanda liniei) Registrul AL (comanda modemului) bit 7 = time-out error received line signal detect bit 6 = transmitter shift register empty ring indicator bit 5 = transmitter holding register empty data set ready bit 4 = break detect clear to send bit 3 = framing error delta receive line signal detect bit 2 = parity error trailer edge ring detector bit 1 = oevrrun error delta data set ready bit 0 = data ready delta clear to send
Programarea directa a interfeþei seriale
Interfaþa seriala este vazuta de programatori ca
fiind compusa din 10 regiºtri accesibili ca porturi de intrare sau
iesire. Regiºtrii sunt prezentaþi in continuare : nume abreviere adresa in/out transmitter holding register THR xF8h out receiver data register RDR xF8h in baud rate divisor (LSB) BRD (LSB) xF8h out baud rate divisor (MSB) BRD (MSB) xF9h out interrupt enable register IFR xF9h out interrupt ID register IIR xFAh in line control register LCR xFBh out modem control register MCR xFCh out line status register LSR xFDh in modem status register MSR xFEh in
Se observa ca prima litera de la adresa este notata
cu x. Ea va fi inlocuita cu cifra corespunzatoare portului
serial pe care se doreºte a se face comunicaþia. Astfel, daca
se utilizeaza COM1, cifra va fi "3", iar daca se foloseºte
COM2, cifra va fi "2". Adresa cartelei seriale se afla in
zona de date BIOS la adresa 0040:0000H. La offseturile 0002H, 0004H ºi
0006H se afla adresele celor trei cartele ce pot exista in sistem.
Recomandarea este ca dupa fiecare citire/scriere din/in port sa
se faca o mica bucla de intarziere. Intreruperile
hard generate la recepþia/transmisia unui caracter sunt : 0x0C pentru
COM1 ºi 0x0B pentru COM2, respectiv IRQ4 ºi IRQ3.
Registrul THR (xF8h)
Conþine caracterul ce va fi transmis. Primul bit transmis este 0.
Registrul RDR (xF8h)
Este buferul in care se va regasi caracterul recepþionat
Registrul LSB (xF8h) ºi MSB (xF9h)
Pentru a accesa aceste registre trebuie ca bitul 7 al registrului LCR sa
fie setat. Aceste registre folosesc la programarea ratei de divizare, deci a
vitezei de transmisie.
viteza MSB (hexa) LSB (hexa)
50 09 00
75 06 00
110 04 17
134,5 03 59
150 01 00
300 00 80
600 00 C0
1200 00 60
2400 00 30
4800 00 18
9600 00 0C
14400 00 08
19200 00 06
28800 00 04
38400 00 03
57600 00 02
115200 00 01
Se observa ca multe din aceste rate nu sunt accesibile BIOS-ului.
Registrul IER (xF9h)
Controllerul I8259 permite ca numai patru intreruperi sa fie activate
sau dezactivate in mod independent. Intreruperile ce pot fi setate
respectiv resetate in acest registru sunt codate in primii patru
biþi ai registrului.
Prin setarea bitului corespunzator se activeaza intreruperea,
iar prin resetare se dezactiveaza. Pentru a avea acces la acest registru
trebuie ca bitul 7 (DLAB) LCR sa fie resetat.
Registrul.IIR (xFAh)
Pot fi programate patru tipuri de intreruperi prin registrul IER. Daca
mai mult decat una a fost activata, rutina de intrerupere
trebuie sa ºtie datorita carei cauze s-a produs ºi
sa acþioneze in consecinþa. Daca numai
o singura intrerupere este activa, atunci acest lucru nu
mai este necesar. Biþii 1 ºi 2 codeaza tipul de intrerupere
pe baza de prioritate
bit 2 bit 1 nivel prioritate tipul intreruperii ºi cum se reseteaza
1 1 1 activata prin setarea bitului 2 din IER, semnifica eroare
de overrun, paritate sau framing. Se reseteaza prin citirea LSR (xFDh)
1 0 2 activata prin setarea bitului 0 din IER. Semnifica caracter
recepþionat. Se reseteaza prin citirea RDR
0 1 3 activata prin citirea bitului 1 din IER. Semnifica caracter
recepþionat. Se reseteaza prin citirea RDR
0 0 4 activata prin setarea bitului 3 din IER. Semnifica starea
modemului schimbata. Se reseteaza prin citirea RDR
Registrul LCR (xFBh)
Acest registru programeaza parametrii transmisiei
Registrul MCR (xFCh)
Acest registru permite setarea unui protocol de comunicaþie cu un dispozitiv
extern (modem). Bitul 0 controleaza semnalul Dtata Terminal Ready (active
pe 1). Bitul 1 controleaza semnalul Request To Send. Bitul 3 controleaza
semnalul 2 de la ieºire (TxD). Acesta permite intreruperii generate
de interfaþa sa fie plasata pe bus-ul sistem pentru
a fi recepþionata de controllerul de intrerupere. Bitul 4
permite realizarea unei bucle de testare pentru verificarea corectitudinii unei
porþiuni din programul de comunicaþie seriala. Iniþializarea
obiºnuita a acestui registru arata astfel :
Registrul LSR (xFDh)
Acesta este registrul de stare. El conþine informaþii privitoare
la transferul de date. Bitul 0 semnifica Data Ready, deci caracterul
a fost recepþionat. Registrul este resetat prin citirea caracterului din
portul xFBh. Bitul 1 este pentru eroare de overrun, bitul 2 pentru eroare de
framing iar bitul 4 pentru eroare de intrerupere BREAK. Citirea registrului
LSR reseteaza biþii de eroare. Bitul 5 arata ca registrul
de transmisie este gata sa primeasca un nou caracter. Bitul 6
arata acelaºi lucru ºi suplimentar ca ºi registrul
de deplasare este gol. Bitul 7 este nefolosit (=0).
Registrul MSR (xFEh)
Acest registru conþine informaþii cu privire la starea liniilor
modemului. Patru din biþi sunt setaþi daca linia de intrare
a interfeþei ºi-a schimbat starea de la ultima citire a registrului
de stare.
Probleme
1. Analizaþi programele din fiºierul seriala.c. Primul program permite
interconectare intre doua calculatoare pe seriala prin COM2,
al doilea implementeaza protocolul XON-XOFF, al treilea corupe intreruperea
de ceas, recepþie pe seriala ºi tastatura iar al patrulea
permite comunicarea prin programarea directa a porturilor.
2. Construiþi un program mai amplu ce permite un transfer de fiºiere
ºi programarea flexibila a serialei din meniu.