CATEGORII DOCUMENTE | ||
|
||
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.
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 |
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 |
Vizualizari: 1446
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved