Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Folosirea interuperilor la calculatoarele IBM PC

calculatoare



+ Font mai mare | - Font mai mic



Folosirea interuperilor la calculatoarele IBM PC

Procesorul 80x86 are doua linii care pot fi folosite de dispozitivele externe pentru semnale de intrerupere: INTerrupt Request si NonMaskable Interrupt.



Daca linia INTR este activa, unitatea centrala executa diferite operatii in functie de indicatorul de validare a intreruperilor IF. Daca acesta este sters (intreruperile semnalate de INTR sunt mascate sau dezactivate), unitatea centrala ignora intreruperea si executa instructiunea urmatoare. Daca IF este pozitionat, unitatea centrala recunoaste cererea de intrerupere, opreste executia normala a instructiunilor si preda controlul rutinei de tratare a intreruperilor. Indicatorul IF poate fi pozitionat sau sters din program.

Procesorul 80x86 are 256 vectori de intrerupere, numerotati de la 0 la 25 Fiecare vector are un cod de 4 octeti care reprezinta adresa rutinei de tratarea a intreruperii (ISR).

Limbajele de nivel inalt trateaza problema gasirii acestei adrese, pe baza vectorului de intrerupere.

Intreruperile in PC

Familia microprocesorului I8086 foloseste conectarea in paralel a liniilor de intrerupere si dispune de o tabela a vectorilor de intrerupere, care se afla la adresa 0000:0000 si care se extinde pe 1024 octeti. Tabela vectorilor de intrerupere memoreaza adresa rutinelor de tratare a intreruperii (ISR - Interrupt Service Routine), fiecare adresa ocupand 4 octeti.

Unele intreruperi sunt fixate prin conventie in arhitectura PC si la initializare, driverul cere intrerupere. De exemplu, driverul de disc flexibil are intotdeauna asociata intreruperea IRQ6.

Exista insa si situatii in care driverul nu cunoaste aprioric intreruperea pe care o va folosi. Acesta nu e cazul dispozitivelor PCI, dar pentru dispozitivele ISA nu este intotdeauna simplu sa-si identifice intreruperea.

Sistemul de operare Linux de exemplu rezolva aceasta problema permitand driverelor de dispozitiv sa-si testeze intreruperea. Astfel, driverul de dispozitiv executa o actiune care determina dispozitivul sa ceara intrerupere. Apoi, toate intreruperile neatribuite in sistem sunt validate. Ca urmare, controlerul de intreruperi va genera o cerere de intrerupere. Sistemul de operare Linux citeste registrul ISR si trimite rezultatul citirii la driverul respectiv.

In PC se folosesc intreruperile prezentate in Tabelul 1.

Tabel 1. Intreruperile din PC

Tip INT (h)

IRQ

Utilizare

Tratare exceptii

Intrerupere nemascabila

Intrerupere nemascabila (erori de paritate)

Tratare exceptii

IRQ0

Timer Sistem

IRQ1

Tastatura

0A

IRQ2

Redirectare (folosit pentru cascadare)

0B

IRQ3

Port serial

COM2/COM4

0C

IRQ4

Port serial

COM1/COM3

0D

IRQ5

LPT2/

Placa de Sunet

0E

IRQ6

Controler Floppy Disk

0F

IRQ7

Porturi paralele

10-6F

Intreruperi software

IRQ8

Ceas de timp real

IRQ9

IRQ2 redirectat (folosit de unele placi video)

IRQ10

Rezervat

IRQ11

Rezervat

IRQ12

Mouse PS/2

IRQ13

Coprocesor matematic

IRQ14

Hard disc (Primary IDE/ATA adaptor )

IRQ15

Rezervat (Secondary IDE/ATA adaptor)

78-FF

Intreruperi software

Observatii:

Deoarece putine sisteme folosesc doua porturi paralele, IRQ5 este de obicei alocat unei placi de sunet sau unui adaptor de retea.

IRQ10 este folosit de majoritatea placilor de sunet

Al treilea adaptor IDE are adresele de la 01E8 la 01EF si foloseste IRQ 11 sau 12

Al patrulea adaptor IDE are adresele de la 0168 la 016F si foloseste IRQ 10 sau 11

Intreruperile hardware

Intreruperile hardware se trateaza folosind un circuit programabil pentru contolul intreruperilor, PIC- I8259A. Cele mai multe calculatoare PC sunt echipate cu doua astfel de circuite.

Primul circuit, PIC1 (master) are adresa de baza (Base) 20h si are ca intrari intreruperile de la IRQ0 la IRQ7

Al doilea circuit, PIC2 (slave) are adresa de baza (Base) 0Ah si are ca intrari intreruperile de la IRQ8 la IRQ1

Totalul de 15 intreruperi se datoreaza faptului ca al doilea PIC se cascadeaza la primul folosind intreruperea IRQ2.

Observatie: Datorita modului de cascadare, invalidarea intreruperii IRQ2 este echivalenta cu invalidarea intreruperilor dela IRQ8 la IRQ1

Circuitul PIC manipuleaza pana la 8 intreruperi si poate fi cascadat pana la 64 intreruperi folosind circuite aditionale.

Are urmatoarele caracteristici:

Se interfateaza la magistrala de date si la magistrala de control a microprocesorului

Genereaza catre procesor semnalul INT

Primeste de la microprocesor INTA

Primeste cererile de intrerupere pe liniile IR0-IR7

Contine registrele :

Interrupt Request Register (IRR memoreaza cererile de intrerupere );

In Service Register (ISR memoreaza intreruperile in curs de servire ).

Interrupt Mask Register (IMR memoreaza masca de intrerupere).



Observatie. La terminarea rutinei de tratare a intreruperii, bitul corespunzator din ISR se sterge cu EOI.

Pentru PIC1 de exemplu cu instructiunea outportb(0x20, 0x20);, iar pentru PIC2: (outportb(0xA0,0x20);)

Pentru validarea unei intreruperi, se trimite la I8259, printr-o instructiune OUT un cuvant OCW1 (la adresa Base + 1), cu bitul corespunzator negat.

De exemplu, pentru a valida IRQ3, se trimite la PIC1 0xF7 ca OCW1. In plus, pentru a nu afecta alte intreruperi deja validate, se foloseste functia logica AND cu vechiul continut al registrului masca.

Astfel, pentru IRQ3 se poate folosi o secventa in limbaj C de forma:

outportb(0x21, (inportb(0x21) & 0xF7);

Acelasi procedeu se foloseste pentru mascarea (invalidarea) unei intreruperi. In plus, pentru a nu afecta alte intreruperi deja validate, se foloseste functia logica OR cu vechiul continut al registrului masca. Astfel, pentru exemplul dat referitor la IRQ3 se poate folosi o secventa in limbaj C de forma:

outportb(0x21, (inportb(0x21) | 0x08);

Conectarea celor doua circuite PIC este facuta conform figurii 2.

Figura 2.5

Functionarea sistemului in cazul unei intreruperi se face in urmatoarele etape:

Una sau mai multe cereri de intrerupere (IR0-7) trec pe nivelul "high" pozitionand pe '1' logic bitii corespunzatorii din IRR.

8259A evalueaza cererile si trimite INT catre CPU.

CPU accepta intreruperea raspunzand cu INTA.

La primirea lui INTA, se pozitioneaza pe '1' logic bitul din ISR cu prioritatea cea mai mare si se pozitioneaza pe '0' logic bitul corespunzator din IRR.

Pe urmatorul INTA, 8259 trimite vectorul de intrerupere.

Conectarea semnalelor de intrerupure este prezentata schematic in figura urmatoare:

Prioritatea este data in ordinea crescatoare a numarului intreruperii. Deoarece intreruperile de la 8 la 14 sunt inserate intre IRQ1 si IRQ3, prioritatea intreruperilor in PC este urmatoarea:

Tabela vectorilor de intrerupere

Asocierea intre tipul intreruperii si rutina de tratare a intreruperii este facuta prin tabela vectorilor de intrerupere. Aceasta ocupa prima zona din memorie incepand cu adresa fizica 0 si pana la 1K.

Aceasta tabela poate avea pana la 256 de intrari, cate una pentru fiecare intrerupere. Numerotarea se face de la 0 la 255, iar numarul corespunde cu tipul intreruperii.

Fiecare intrare din tabela este un pointer (4 octeti ) ce contine adresa rutinei de tratare a intreruperii pentru tipul respectiv. Cuvantul de la adresa mai mare contine adresa de baza a segmentului care contine rutina, iar cuvantul de la adresa mai mica contine deplasamentul rutinei fata de inceputul segmentului. Deoarece fiecare intrare are lungimea de 4 octeti, microprocesorul calculeaza adresa unei intrari in tabela prin simpla inmultire a tipului cu 4.

La sosirea unei intreruperi, microprocesorul salveaza adresa de revenire in stiva si apoi activeaza rutina de tratare a intreruperii prin executarea unei instructiuni CALL intersegment.

Adresa de la care se face saltul (adresa rutinei ) este adresa continuta in tabela vectorilor de intrerupere la locatia tip*4.

UC salveaza adresa instructiunii urmatoare prin incarcarea registrilor CS si IP in stiva. Acestia sunt inlocuiti apoi cu primul, respectiv cu al doilea cuvant al adresei din tabela.

Sunt initializati indicatorii TF si IF. De aceea, daca se doreste validarea intreruperilor in timpul rutinei de tratare a intreruperii (caz in care o intrerupere poate fi intrerupta de o cerere cu prioritate mai mare), acesti indicatori trebuiesc repozitionati prin program.

Rutinele de tratare a intreruperilor trebuie sa se termine obligatoriu cu instructiunea IRET. Ea va descarca de pe stiva IP, CS si indicatorii de conditii si continua executia programului intrerupt.

2. Circuitul controler de intreruperi I8259 (PIC Programmable Interrupt Controller)

In primele calculatoare XT si AT au existat fizic doua circuite I8259 in capsule DIP cu 28 de terminale. In calculatoarele mai noi, ele sunt integrate in chipset, alaturi de alte circuite.

Schema bloc a unui PIC este prezentata in figura

Figura Schema bloc a unui PIC

Cele 8 intrari de intrerupere de la echipamente periferice (IR0-IR7) trec prin registrul masca IMR unde se testeaza daca ele sunt mascate sau nu. In cazul unei intreruperi mascate, cererea corespunzatoare nu este transmisa spre IRR.

Daca intreruperea nu este mascata, ea se memoreaza in registrul IRR (Interrupt Request Register). Acest registru memoreaza toate cererile de intrerupere nemascate pana la servirea lor. Continutul acestui registru se poate citi de catre microprocesor prin pozitionarea corespunzatoare a unor biti in cuvantul OCW3.

Circuitul de rezolvare a prioritatilor alege cererea cu prioritatea cea mai mare (cele cu numar mai mic: de exemplu IRQ0 are prioritatea mai mare decat IRQ1 etc.).

In continuare, se activeaza linia INT catre procesor. Acesta termina instructiunea in curs si apoi achita cererea de intrerupere prin trimiterea unui semnal INTA (Interrupt Acknowledge).

La primirea primului semnal INTA, cererea de intrerupere curenta, tratata de PIC este memorata in registrul ISR (Interrupt Service Register). De asemenea, se sterge bitul corespunator din registrul IRR, deoarece aceasta intrerupere este in curs de servire si nu mai cere serviciu.

Procesorul emite un al doilea semnal INTA, informand circuitul PIC sa plaseze pe magistrala de date vectorul de intrerupere corespunzator cererii in curs de servire. In cazul in care intreruperea servita este conectata la PIC2, circuitul PIC1 trimite codul de identificare ID al circuitului PIC Slave pe liniile de cascadare si PIC2 va fi cel care plaseaza vectorul de intrerupere pe magistrala de date.

Cei mai semnificativi 5 biti ai vectorului de intrerupere sunt stabiliti de cuvantul de initializare ICW2, astfel:

pentru PIC 1: 00001

pentru PIC2 : 01110

Cei mai putin semnificativi 3 biti sunt stabiliti de intreruperea care este in curs de servire. De exemplu, daca se serveste intreruperea IRQ3, vectorul de intrerupere este 00001011, adica 0x0Bh.

Pentru PIC2 se pastreaza acelasi principiu. Astfel, daca este servita intreruperea IRQ10, vectorul de intrerupere va fi 01110010, unde cei trei biti mai putin semnificativi sunt 010 (IRQ10 este legat la IR2 al celui de-al doilea PIC).

Procesorul foloseste vectorul de intrerupere pentru determinarea adresei rutinei de tratare a intreruperii, folosind tabela vectorilor de intrerupere si face un salt in program la adresa de inceput a acesteia.

La terminarea executiei rutinei de tratare a intreruperii, ea trimite la PIC un cuvant EOI (End Of Interrupt) care sterge registrul ISR. In cazul in care cererea de intrerupere este tratata de PIC2, cuvantul EOI se trimite la ambele circuite PIC.

In continuare, PIC determina cererea de intrerupere curenta cu prioritatea cea mai mare si procesul se repeta.

Observatie. Redirectarea intreruperii IRQ2 are motive istorice. Astfel, primul XT era echipat cu un singur circuit I8259 si putea deci controla doar 8 cereri de intrerupere. Cele 8 cereri de intrerupere s-au dovedit curand insuficiente si a fost necesara adaugarea unui al doilea circuit I8259 prin cascadare, intr-o configuratie Master-Slave, folosind IRQ2.

Pentru a pastra compatibilitatea retroactiva din punct de vedere hardware si software, linia IRQ2 a fost legata la IRQ9 (ceea ce nu a ridicat probleme, deoarece initial nu a existat IRQ9).

Pentru echipamentele care foloseau initial intreruperea IRQ2 s-a folosit intreruperea INT 71h care trimite EOI la PIC2 si apoi apeleaza rutina de tratare a intreruperii IRQ2 (INT 0x0A). Daca se dezasambleaza rutina de tratare a intreruperii IRQ9 se obtine urmatorul cod:

MOV AL, 20

OUT A0, AL ; EOI la PIC2

INT 0A ; Apel rutina pentru IRQ2

IRET

Se observa ca aceasta rutina trimite EOI numai la PIC2, deoarece presupune ca rutina de tratare a intreruperii pentru IRQ2 va trimite EOI la PIC1. In plus, aceasta rutina altereaza continutul registrului AL, si de aceea el trebuie mai intai salvat in stiva.

Deoarece PIC2 este initializat ca Slave pe intrarea IRQ2, orice cerere de intrerupere la PIC2, in loc sa apeleze rutina de tratare a intreruperii IRQ2, va apela o rutina identificata de vectorul de intrerupere emis de PIC2.

Cele doua circuite PIC din PC sunt initializate de BIOS. In Tabelul 1 sunt prezentate adresele pentru PIC1, iar in Tabelul 2 adresele pentru PIC2.

Tabelul 1. Adresele pentru PIC1

Adresa

Citire/Scriere

Functie

20h

Scriere

ICW1 (Initialization Command Word 1)

Scriere

OCW2 (Operation Command Word 2)

Scriere

OCW3 (Operation Command Word 3)

Citire

IRR (Interrupt Request Register)

Citire

ISR (In Service Register)

21h

Scriere

ICW2 (Initialization Command Word 2)

Scriere

ICW3 (Initialization Command Word 3)

Scriere

ICW4 (Initialization Command Word 4)

Citire/Scriere

IMR (Interrupt Mask Register)

Tabel 2. Adresele pentru PIC2

Adresa

Citire/Scriere

Functie

A0h

Scriere

ICW1 (Initialization Command Word 1)

Scriere

OCW2 (Operation Command Word 2)

Scriere

OCW3 (Operation Command Word 3)

Citire

IRR (Interrupt Request Register)

Citire

ISR (In Service Register)



A1h

Scriere

ICW2 (Initialization Command Word 2)

Scriere

ICW3 (Initialization Command Word 3)

Scriere

ICW4 (Initialization Command Word 4)

Citire/Scriere

IMR (Interrupt Mask Register)

Dupa initializare, un circuit PIC trebuie sa primeasca intre 2 si 4 cuvinte de initializare (Initialization Command Word ). In continuare se vor prezenta cele 4 cuvinte de initializare posibile.

Tabelul 3 prezinta cuvantul de initializare ICW1.

Tabelul 3. ICW1

Biti

Functie

Vectori de intrerupere pentru modul MCS-80/85

'1' pentru ICW1

Intreruperi active pe nivel

Intreruperi active pe front

Intervalul adreselor de apel 4

Intervalul adreselor de apel 8

Un singur PIC

PIC-uri cascadate

Va fi trimis si ICW4

Nu e necesar ICW4

Notam ca circuitul I8259 are si facilitati care nu sunt folosite in PC, oferind suport de intreruperi si pentru microprocesoarele MCS-80/8

In modul 8086, este necesar sa trimitem la PIC si cuvantul de initializare ICW4.

Tabelul 4 prezinta cuvantul de initializare ICW2. Acest cuvant stabileste vectorul de informatie care se plaseaza pe magistrala de date in timpul celui de-al doilea impuls INTA. In modul 8086 se folosesc doar bitii de la 7 la 3. ICW2 pentru PIC1 este 0000.1000 (0x08) (de aceea IRQ0 corespunde cu INT8), iar pentru PIC2 este 0111.0000 (0x70). In cazul in care intentionam sa relocatam tabela vectorilor de intrerupere, se modifica cuvantul de initializare ICW2.

In ceea ce priveste cuvantul de initializare ICW3, exista doua tipuri. Astfel, ICW3 este de un anumit tip pentru un PIC master si de alt tip pentru un PIC slave.

Tabelul 5 prezinta cuvantul ICW3 pentru un PIC master.

Tabelul ICW3 pentru un PIC master

Bit

Functie

IR7    conectat la un Slave

IR6    conectat la un Slave

IR5    conectat la un Slave

IR4    conectat la un Slave

IR3    conectat la un Slave

IR2    conectat la un Slave

IR1    conectat la un Slave

IR0    conectat la un Slave

Tabelul 6. ICW3 pentru un PIC slave

Bit

Functie

Rezervat. Stabilit pe '0'

Rezervat. Stabilit pe '0'

Rezervat. Stabilit pe '0'

Rezervat. Stabilit pe '0'

Rezervat. Stabilit pe '0'

ID pentru Slave

Slave 0

Slave 1

Slave 2

Slave 3

Slave 4

Slave 5

Slave 6



Slave 7

In Tabelul 6 se prezinta cuvantul de initializare ICW4. Acest cuvant se refera la unele facilitati suplimentare ale circuitului I8259, care nu sunt folosite in PC. Pentru utilizatori de PC, acest cuvant foloseste doar bitul 0 care stabileste modul 8086/8080.

Tabelul 6

Bit

Functie

'0' pentru PC

Modul 8086/8080

Modul MCS-80/85

Odata trimise la PIC cuvintele de initializare, se pot trimite cuvintele de comanda OCW (Operation Control Words), in orice ordine si in orice moment, de timpul functionarii circuitului PIC.

In continuare se prezinta aceste cuvinte de comanda.

Cuvantul OCW1 este folosit pentru mascarea unor cereri de intrerupere.

Tabelul 7. Cuvantul de comanda OCW1

Bit

PIC2

PIC1

Mascare IRQ15

Mascare IRQ7

Mascare IRQ14

Mascare IRQ6

Mascare IRQ13

Mascare IRQ5

Mascare IRQ12

Mascare IRQ4

Mascare IRQ11

Mascare IRQ3

Mascare IRQ10

Mascare IRQ2

Mascare IRQ9

Mascare IRQ1

Mascare IRQ8

Mascare IRQ0

Cuvantul OCW2 stabileste felul in care functioneaza procedura EOI. In cazul PC, ne intereseaza comanda EOI nespecifica, care trebuie trimisa la sfarsitul rutinei de tratare a intreruperilor. Acesta este bitul 6 care trebuie sa fie '1' logic si din acest motiv cuvantul care se trimite la PIC la sfarsitul rutinei de tratare a intreruperii este 0x20.

Cuvantul OCW3 este important prin bitii 0 si 1 care permit citirea continutului registrelo IRR si ISR. Astfel, un OCW3 cu valoarea 0x02 permite citirea registrului IRR, iar un OCW3 cu valoarea 0x03 permite citirea registrului ISR.

De exemplu, daca se intentioneaza citirea registrului ISR, se trimite la PIC cuvantul 0x03. Urmatoarea operatie de citire din PIC de la adresa registrului de baza (0x20 pentru PIC1 si 0xA0 pentru PIC2) va returna continutul registrului ISR.

3. Programarea intreruperilor in PC

Deoarece adresa fiecarei rutine de tratare a intreruperii se afla in tabela vectorilor de intrerupere din memoria RAM, prin modificarea informatiei din acest tabel, un program poate sa invalideze rutina originala de tratare a intreruperii, prin inlocuirea ei cu propria rutina de tratare a intreruperii.

Borland Turbo C are doua functii de biblioteca pentru citirea si modificarea unui vector de intrerupere. Aceste functii sunt: setvect() si getvect(). ( pentru Microsoft C sunt: _dos_getvect() si _dos_setvect()

getvect() are prototipul:

void interrupt(*getvect(int interrupt_no))();

setvect() are prototipul:

void setvect(int interrupt_no, void interrupt(*func)());

Un program care citeste si salveaza adresa unei intreruperi existente foloseste getvect() astfel:

/* Declaratii pentru intreruperea veche */

void interrupt(*old)(void);

main()

Unde 0x1C este vectorul cautat

Pentru a aloca vectorul de intrerupere la o noua adresa, care este propria noastra functie, folosim setvect():

void interrupt new(void)

main()

Observatii:

Daca intreruperea e apelata de evenimente externe, inainte de a modifica vectorul, este obligatorie invalidarea intreruperilor prin disable() si apoi revalidarea intreruperilor dupa schimbarea vectorului folosind enable()

Inaintea terminarii programului e obligatorie stergerea oricaror modificari facute asupra vectorilor de intrerupere.

Mascarea

Programatorul poate masca sau valida intreruperi, folosind portul 0x21. Pentru a valida o anumita intrerupere, se scrie '0' in bitul corespunzator.

mask=inportb(0x21) & ~0x80;

//Citeste masca curenta. Pune bitul 7 pe '0'

//Lasa ceilalti biti nemodificati

outportb(0x21, mask);

Utilizatorul poate folosi intreruperile si poate scrie propria sa rutina de tratare a intreruperii, dar e obligat sa insereze secventa:

outportb(0x20, 0x20);

(EOI )informand ca intreruperea a fost tratata.

Exemplu

/* ** Program test interfata seriala **

Folosese o rutina de tratare a intreruperii

Intreruperea e determinata de transmisie

Am considerat portul serial COM2, 2F8h si am asociat IRQ3.*/

/* Compilare in model memorie LARGE*/

#include <stdio.h>

#include <bios.h>

#include <dos.h>

#include <conio.h>

#include <string.h>

//#define DATA 0x03F8

#define DATA 0x02F8

#define IER DATA+1

#define IIR DATA+2

#define LCR DATA+3

#define MCR DATA+4

#define LSR DATA+5

#define MSR DATA+6

void close_intserv(void);

void intr_tratat(void);

void open_intserv(void);

void interrupt far intserv(void);

int nivel_intr=0x0B; /* interuperea asociata cu IRQ3 */

int a_fost_intr = 0 ; /*variabila care demonstreaza ca a fost intrerupere*/

void interrupt far (*oldfunc)();

/* Definitii globale */

int main(void)

close_intserv();

return(0);

void interrupt far intserv(void)

/* Este rutina de tratare a intreruperii */

intr_tratat();

a_fost_intr=1;

enable();

void open_intserv(void)

/* valideaza IRQ3. In caz de intrerupere salt la intserv.

** toate intreruperile se invalideaza pe durata acestei functii

Validarea se face la iesire. */

void close_intserv(void)

/* invalideaza IRQ3 */

void intr_tratat(void)

/* EOI */

Variabila a_fost_intr este folosita pentru a demonstra ca a fost o intrerupere. Astfel, ea este initializata cu 0, iar rutina de tratare a intreruperii ii modifica valoarea la 1. Programul principal citeste valoarea acestei variabile si daca ea este 1, ii reface valoarea initiala.

Scrieti programul de test din capitolul precedent, folosind intreruperile.

4. Intreruperile pe magistrala PCI

Adaptoarele PCI sunt mult mai flexibile decat cele pentru magistrala ISA. Multe adaptoare ISA folosesc inca jumpere care stabilesc nivelul de intrerupere pe modulul hardware.

Dispozitivele PCI au alocate intreruperi prin BIOS sau prin subsistemul PCI, de fiecare data cand se porneste sistemul. n dispozitiv PCI trebuie sa foloseasca unul din 4 pini de intrerupere: A, B, C sau D. Pinul folosit este stabilit prin hardware, iar cele mai multe dispozitive folosesc implicit pinul A. Liniile de intrerupere A, B, C si D din fiecare slot al magistralei PCI sunt conectate la circuitul controler de intrerupere. Modul in care sunt conectate aceste linii de intrerupere este specific sistemului si din acest motiv exista un cod de program in Setup, numit PCI Setup, care este destinat topoogiei de intreruperi de pe magistrala PCI.

In cazul calculatoarelor PC acest cod este in BIOS, iar in sistemele fara BIOS acest setup este executat de kernelul Linux.

Programul PCI Setup stabileste intreruperea care va fi folosita de fiecare dispozitiv PCI.

Intr-un sistem pot exista mai multe surse de intrerupere PCI. In cazul in care numarul acestora depaseste numarul intrarilor de cerere de intrerupere ale circuitului controler de intreruperi, dispozitivele PCI pot partaja intreruperile. Astfel, pe o intare de cerere de intrerupere a circuitului controler de intreruperi pot sosi cereri de la mai multe dispozitive PCI.





Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1446
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved