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
Preview document
Conținut arhivă zip
- Comunicatii Date
- CDLab2.doc
- CDLab3.doc
- CDLab4.doc