Comunicații date

Previzualizare laborator:

Extras din laborator:

Comunicatia seriala – standardul RS232

Tematica laborator

Se va prezenta mecanismul intreruperilor. Se va scrie un program C ce foloseste intreruperi si realizeaza un canal de comunicatie serial intre 2 PC-uri : ceea ce este tastat la PC1 va fi afisat pe ecranul PC2 si viceversa (functional identic cu cel realizat prin metoda polling in cadrul laboratorului precedent).

Comunicarea cu portul serial bazata pe intreruperi

Primul pas consta in determinarea intreruperii corespunzatoare portului serial folosit. Adresele de baza ale porturilor seriale (COM1-4) si intreruperile asociate fiecaruia sunt in general urmatoarele:

Name Address IRQ

COM 1 3F8 4

COM 2 2F8 3

COM 3 3E8 4

COM 4 2E8 3

Cunoscand numarul intreruperii, urmatorul pas este aflarea numarului vectorului de intrerupere. Vectorul are 4 bytes si reprezinta adresa la care se gaseste subrutina de tratare a intreruperii respective (Interrupt Service Routine – ISR). Vectorii asociati cu intreruperi hardware sunt :

INT (Hex) IRQ Common Uses

08 0 System Timer

09 1 Keyboard

0A 2 Redirected

0B 3 Serial Comms. COM2/COM4

0C 4 Serial Comms. COM1/COM3

0D 5 Reserved/Sound Card

0E 6 Floppy Disk Controller

0F 7 Parallel Comms.

70 8 Real Time Clock

71 9 Reserved

72 10 Reserved

73 11 Reserved

74 12 PS/2 Mouse

75 13 Maths Co-Processor

76 14 Hard Disk Drive

77 15 Reserved

De exemplu daca folosim COM1 care are IRQ4, vectorul de intrerupere corespunzator este 0C in hexa. Folosind C putem schimba vectorul cu ajutorul instructiunii setvect(0x0C, PORT1INT); unde PORT1INT este adresa de inceput a functiei de tratare a intreruperii (scrisa de noi). In cazul nostru, aceasta functie va citi datele primite prin interfata seriala si le va stoca intr-un buffer intermediar (de unde vor fi afisate pe ecran de catre bucla principala).

Este important ca la sfarsitul acestei rutine de tratare sa anuntam Programmable Interrupt Controller (PIC) ca am terminat cu ajutorul instructiunii outportb(0x20, 0x20);, astfel incat eventualele intreruperi de prioritate mai mica sa poata fi tratate in continuare.

Acest PIC se ocupa de intreruperile hardware. Majoritatea calculatoarelor au doua asemenea controller-e : unul se ocupa de IRQ 0 pana la 7 iar celalalt de IRQ 8 – IRQ 15. Majoritatea intreruperilor legate de comunicatia seriala sunt sub 7, deci PIC 1 este folosit ( adresa PIC 1 este 20 hexa).

Bit Disable IRQ Function

7 IRQ7 Parallel Port

6 IRQ6 Floppy Disk Controller

5 IRQ5 Reserved/Sound Card

4 IRQ4 Serial Port

3 IRQ3 Serial Port

2 IRQ2 PIC2

1 IRQ1 Keyboard

0 IRQ0 System Timer

PIC1 Control Word (0x21)

Bit Disable IRQ Function

7 IRQ15 Reserved

6 IRQ14 Hard Disk Drive

5 IRQ13 Maths Co-Processor

4 IRQ12 PS/2 Mouse

3 IRQ11 Reserved

2 IRQ10 Reserved

1 IRQ9 IRQ2

0 IRQ8 Real Time Clock

PIC2 Control Word (0xA1)

Mare parte din initializarea PIC-urilor este facuta de BIOS. Din punctul de vedere al programului de comunicatie, tot ce trebuie facut este activarea intreruperii corespunzatoare (IRQ4 pentru COM1) cu ajutorul instructiunii outportb(0x21,(inportb(0x21) & 0xEF);. Folosim AND binar pe valoarea deja existenta pentru a nu suprascrie setarile altor programe.

Registrii UART-ului sunt accesibili la urmatoarele adrese :

Base Address DLAB Read/Write Abr. Register Name

+ 0 =0 Write - Transmitter Holding Buffer

=0 Read - Receiver Buffer

=1 Read/Write - Divisor Latch Low Byte

+ 1 =0 Read/Write IER Interrupt Enable Register

=1 Read/Write - Divisor Latch High Byte

+ 2 - Read IIR Interrupt Identification Register

- Write FCR FIFO Control Register

+ 3 - Read/Write LCR Line Control Register

+ 4 - Read/Write MCR Modem Control Register

+ 5 - Read LSR Line Status Register

+ 6 - Read MSR Modem Status Register

+ 7 - Read/Write - Scratch Register

Interrupt Enable Register (IER) (Base+1)

Bit Notes

Bit 7 Reserved

Bit 6 Reserved

Bit 5 Enables Low Power Mode (16750)

Bit 4 Enables Sleep Mode (16750)

Bit 3 Enable Modem Status Interrupt

Bit 2 Enable Receiver Line Status Interrupt

Bit 1 Enable Transmitter Holding Register Empty Interrupt

Bit 0 Enable Received Data Available Interrupt

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • Comunicatii Date
    • CDLab2.doc
    • CDLab3.doc
    • CDLab4.doc
Alte informații:
Tipuri fișiere:
doc
Nota:
6/10 (1 voturi)
Nr fișiere:
3 fisiere
Pagini (total):
15 pagini
Imagini extrase:
15 imagini
Nr cuvinte:
2 637 cuvinte
Nr caractere:
18 418 caractere
Marime:
33.37KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Laborator
Domeniu:
Comunicare
Predat:
la facultate
Materie:
Comunicare
Profesorului:
Voicu Ionel
Sus!