Você está na página 1de 16

Controller-ul programabil de intreruperi

1.Generalitati.
Intreruperile in procesarea datelor
Majoritatea componentelor unui calculator necesită schimburi de
informaţii cu microprocesorul şi aşteaptă atenţia acestuia când se doreşte un
transfer de date. Microprocesorul are de monitorizat transferurile de date ale
diferitelor componente astfel încât să nu apară pierderi de date. Uzual sunt
două moduri prin care microprocesorul poate face acest lucru, prin:

• Polling (interogare)
Microprocesorul testează pe rând toate dispozitivele care pot
necesita un serviciu şi il serveşte pe cel care a cerut ”atenţie”.
Acest mod este folosit uneori in anumite aparate sau instalaţii cu
microprocesor,dar nu şi in PC din cauză că este prea lent.Se pierd
mulţi cicli procesor din motivul că de ce le mai multe ori răspunsul
interogării este “nu”.De asemenea diferitele dispozitive necesită
transferuri sau “atenţie”cu frecvenţe mult diferite,spre exemplu un
“mouse” necesită de departe mult mai rar “atenţie”decat un hard-
disk când este activate pentru un transfer de date.

• Întrerupere
Este un alt mod de abordare a transferului de date care constă în
a lăsa dispozitivele să ceară când au nevoie,în rest
microprocesorul poate realiza alte sarcini şi nu mai risipeşte
timpul ca in cazul interogării.Când apare o intrerupere
microprocesorul abandonează programul aflat în derulare şi
serveşte corespunzător dispozitivul care l-a întrerupt .

Microprocesoarele au în general un singur pin pentru cererile de întrerupere


, iar sursele de întrerupere externe pot fi mai multe.De obicei în cazul că
sistemul are nevoie de mai multe întreruperi între sursele de întrerupere si
microprocesor se pune un circuit numit controller de întrerupere care
îndeplineşte anumite sarcini. Printre acestea se pot aminti:

1
- multiplexarea întreruperilor de la diferitele surse la pinul
corespunzător al microprocesorului
- rezolvarea prioritătilor în cazul aparitiei întreruperilor simultane
- generarea unui vector (adresă) care să indice adresa programului
(rutinei) de tratare al respectivei întreruperi
La unele procesoare (cum ar fi Z80) sarcinile de sus sunt soluţionate într-
un alt mod.Sistemul de întreruperi generate de diversele surse sunt date de
poziţia pe care o ocupă respectivul circuit într-un lanţ de priorităţi numite
“daisy-chain”.Respectivele circuite furnizează şi vectorul de întrerupere
corespunzător.În figura de mai jos se poate observa că circuitul PIO Z80 are
prioritatea maximă,fiind situat primul în lanţul de priorităţi format prin
conectarea circuitelor prin semnalele IEI (Interrupt Enable Input) si IEO
(Interrupt Enable Output).În cazul PC-urilor se utilizeză circuitul PIC
(Programmable Interrupt Controller) I8259A.

Figura 1.Lanţul de priorităţi ”daisy-chain”

2.Prezenatarea circuitului I8259A


Circuitul I8259A iniţiala fost realiyat în tehnologie NMOS, în capsulă de
28 de pini, fiind compatibil cu controllerul I8259(folosit cu I8080) şi având
funcţii suplimentare pentru a fi utilizat în sisteme cu microprocesoare din
familia I80X86
Permite cereri de întreruperi active pe front crescător sau pe nivel logic
“1”şi poate fi conectat în sistem singur,caz în care poate gestiona 8 nivele de
întrerupere, iar cascadat până la 64
Pe baza unei reguli de tratare a întreruperilor,care se poate
programa,controllerul determină dacă există cel puţin o cerere de întrerupere
şi pune semnalul INT pe “1”.Dacă microprocesorul acceptă întreruperea, el
generează o secvenţă de acceptare a întreruperii formată dintr-o serie de

2
cicluri maşină de tip /INTA(două în mod I8088 /I8086 şi trei în mod I8080)
pentru recunoaşterea întreruperii.Pe durata acestor cicluri,controllerul
”pune” pe magistralade date informaţiile necesare microprocesorului pentru
determinarea şi execuţia unei rutine asociate nivelului de întrerupere
acceptat.

2.1 Arhitectura controller-ului I8259A

În schema bloc a circuitului PIC se evidenţiaza următoarele blocuri


funcţionale:
• Registrul cererilor de întrerupere
(IRR-Intrerrupt Request Register)

Are rolul de a memora toate cererile de întrerupere primite din exterior

• Registrul întreruperilor în service


(ISR-IN Service Register)

Are rolul de a memoratoate cererile de întrerupere aflate în servire la un


moment dat.La terminarea deservirii unei întreruperi bitul corespunzător din
ISR trebuie resetat.Resetarea se poate face prin program sau automat.

• Comparatorul de priorităţi (CP)


Compară conţinutul registrului cererilor de întreruperi (IRR) cu cel al
registrului întreruperilor în servire (ISR),determinând apariţia unei cereri
mai prioritare decât cea în servire, caz în care se generează o nouă cerere de
întrerupere.Acest lucru este evideţiat prin setarea bitului corespunzător din
ISR pe durata primului ciclu/INTA.

• Registrul de măşti
(IMR- Interrupt Mask Register)

Permite invalidarea unor nivele de întreruperi prin setarea biţilor


corespunzători din registru.

• Amplificatorul bidirecţional de date

Are linii ”three-state” bidirecţionale care realizează interfata controller-ului


la magistrala de date .Prin amplificator se transferă cuvintele de
control,informaţiile de stare şi tipul vectorului

3
Figura 2.Schema bloc a circuitului I8259A

Logica de cascare

Pentru extinderea numărului de întreruperi se recurge la conectarea în


cascadă a mai multor controllere I8259A,unul dintre controllere fiind
master ,iar restul fiind slave (maxim 8 circuite slave).Controller-ele slave
generează cererile de întreruperi la intrările Iri ale controller-ului master prin
intermediul controller-ului slave conectat la respectivele intrări.La
controllerul master semnalele CAS0-CAS2 sunt ieşiri şi prin intermediul lor
masterul tarnsmite spre slave-uri codul slave-ului cel mai prioritar, dintre
cele care au cerut întrerupere spre master.În cazul controller-ului
slave,semnalele CAS0-CAS2 sunt intrări şi prin intermediul lor circuitele
slave recepţioneaza un cod de la master. Slave-ul care işi recunoaşte codul
(este cel mai prioritar) va transmite spre microprocesor, pe durata ciclurilor

4
/INTA, datele pentru determinarea şi execuţia rutinei de deservire a cererii
de întrerupere acceptate.

Logica de citire/scriere

Procesorul vede controller-ul ca un set de porturi de I/O.Cu ajutorul


semnalelor A0, / WR, /CS şi D0-D7 programează controller-ul prin
cuvintele înscrise , iar prin A0 , /RD , /CS, DO-D7 se citesc registrele de
stare.

Logica de comandă

Asigură protocolul de cerere-acceptare întrerupere dintre procesor şi


controller prin intermediul semnalelor INT şi /INTA.

2.2 Regiştri interni


La programarea controller-ului de întreruperi I8259A adresa de bază este
20H (la PC-XT) iar adresele porturilor asociate sunt date în tabelul de mai
jos:

Adresa de bază pentru PIC slave este 0A0H (în PC-AT)

5
Registrul IRR(Interrupt Request Register): (in al,20H)
7 6 5 4 3 2 1 0
IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 IRQ1 IRQ0

IRQi= 0 nu a fost cerere de întrerupere pe linia ”i”


= 1 cerere de întrerupere pe linia ”i”

Registrul ISR(In Service Register ) : (in al, 20H)

Registrul CP (Comparatorul de Priorităţi)

Nu avem acces la acest registru.El compară nivelul de prioritate al


întreruperii curente cu cel scris îm ISR.

2.3 Pinii circuitului I8259A

Circuitul este ansamblat într-o capsulă de 28 de pini ,care au semnificaţia


dată în tabelul de mai jos.

6
Fig.3.Pinii circuitului I8259A

7
Nume I/0 PIN Funcţia
Nebufferat SP=1 pentru MASTER şi SP=0 pentru
SLAVE
INT 0 17 INTerrupt-ieşire conectată la intrarea INT a
procesorului , prin intermediul căreia se transmit
cererile de întrerupere
IR0- I 18-25 (Interrupt Request)- intrări asincrone care sunt
IR7 conectate la perifericele care pot genera întreruperi
la procesor prin intermediul PIC I8259A
/INTA I 26 (Interrupt Acknowledge) – utilizat pentru achitarea
cererii de întrerupere şi de citire a vectorului de
întrerupere

3.Programarea PIC
Circuitul având doar două adrese de port pentru programare sau citire
stare va trebui respectată o anumită ordine la trimiterea cuvintelor de
comandă spre PIC.Există două tipuri de cuvinte pentru lucrul cu I8259A:

-cuvinte de iniţializare : ICW1, ICW2, ICW3,ICW4


-cuvinte de operare : OCW1, OCW2,OCW3.

Ordinea de trimitere a cuvintelor spre controller este reprezentată în


diagrama din fig.4.
Structura cuvintelor ICW şi OCW sunt prezentate în cele ce urmează:

8
ICW3(OUT 21 H,AL):pentru master
7 6 5 4 3 2 1 0
S7 S6 S5 S4 S3 S2 S1 S0

Si=1există slave conectat la linia ”i”

ICW3(OUT A1H,AL):pentru slave


7 6 5 4 3 2 1 0
1 X X X X ID2 ID1 ID0
ID2,ID1,ID0:codul de identificare al PIC slave (corespunde cu numărul
liniei IR de la master pe care este conectat).Se comapară cu codul emis de
master pe CASO.......2.

ICW4 (OUT 21H,AL)

7 6 5 4 3 2 1 0
0 0 0 SFIM BUF M/S AEOI PROC

PROC=0 mod 8080 ,=1 mod 8086


AEOI=1 auto EOI,=o EOI manual

BUF M/S Semnificaţie


0 X Mod de lucru fără buffer de date extern
1 0 Mod cu buffer date extern .PIC este slave

9
1 1 Mod cu buffer date extern.PIC este master

SFNM(Special Fully Nested Mode)


= 0 Mod de lucru pentru priorităţi. Nu se acceptă decât îmtreruperi mai
prioritare celei din ISR
= 1 Mod special pentru priorităţi .Se acceptă şi alte întreruperi, indiferent
de prioritatea lor, mai puţin o întrerupere identică cu cea în curs de tratare

10
Fig.4.Secvenţa de iniţializare a controller-ului

R SL EOI Semnificaţie
0 0 0 Roteşte în modul AEOI- Clear
0 0 1 EOI nespecific
0 1 0 Fără efect
0 1 1 EOI specific
1 0 0 Roteşte în modul AEOI-Set
1 0 1 Roteşte la AEOI nespecific
1 1 0 Setează prioritate
1 1 1 Roteşte la AEOI specific

OCW3 (OUT 20 H,AL):modul de mascare , selecţie citire regiştri


7 6 5 4 3 2 1 0
- ESMM SMM 0 1 P RR RIS

11
ESMM(Enable Special Mask Mode) =1:validare mod de mascare
special
SMM(Special Mask Mode)=1:mod de mascare special
ESMM SMM Semnificaţie
0 X -
1 0 Reset mască special
1 1 Setează mască specială

RR,RIS:selecţia regiştrilor care vor fi citiţi de următoarea instrucţiune

RR RIS Semnificaţie
0 X Selecţie IMR
1 0 Selecţie IRR
1 1 Selecţie ISR

P=0 Mod polling(lucru cu pseudo-întreruperi: nu validează INT spre


microprocesor .Se baleiază prin program registrul IRR)
P=1 Mod normal

4.Modurile de lucru ale controller-ului


Modul de imbricare totală ( fully nested mode)
Acest mod se instalează după iniţializare,dacă nu se programează alt
mod.Nivelul 7 de întreruperi devine cel mai puţin prioritar, iar nivelul 0,cel
mai prioritar.În ciclul de recunoaştere a întreruperii se determină cererea cea
mai prioritară,vectorul asociat ei este plasat pe magistrala de date.În acelaşi
timp bitul corespunzător din ISR se setează.
În mod EOI acest bit rămâne pe ”1” şi trebuie dată o comandă explicită
pentru stergerea sa înainte de terminarea rutinei de servire a întreruperii , iar
în mod AEOI bitul rămâne pe ”1”,până la terminarea ultimului ciclu /INTA
de recunoaştere a întreruperii.Cât timp bitul din ISR este setat,orice alte
întreruperi de acelaşi nivel sau nivele inferioare nu seiau în considerare dar
cererile mai prioritare se servesc (dacă microprocesorul este setat pentru
acceptarea cererilor de întrerupere).

Modul EOI

12
Bitul din ISR corespunzător întreruperii în servire poate fi resetat automat în
modul AEOI(fără o comandă anume ) sau printr-un cuvânt de comandă dat
înaintea revenirii din rutina de deservire a întreruperii ,în modul EOI.În
cazul în care se lucrează în mod cascadat, ştergerea bitului corespunzător
întreruperii în servire trebuie să se facă atât la nivelul master-ului, cât şi la
nivelul slave-ului.

Modul AEOI
Automatic End of Interrupt- se instalează la iniţializare prin bitul
AEOI=”1” din ICW4 şi este echivalentcu o comandă EOI nespecifică care s-
ar da la sfârsitul ciclului de recunoaştere a întreruperii (al 3-lea în I8080 şi al
2-lea în mod I8086).
• Rotirea automată ( nespecifică) a priorităţilor
Există cazuri în care un dispozitiv periferic după ce a fost servit
poate să fie tercut ultimul în lista de priorităţi şi nu va mai intra în
servire decât după ce şi celelalte 7 dispozitive periferice cu care
este legat în lista de priorităţi au fost servite în acelaşi mod ca şi el.
• Rotirea specifică a priorităţilor
Utilizatorul poate schimba ordinea priorităţilor din program în mod
dinamic.Se poate fixa nivelul inferior de prioritate şi astfel se vor
modifica priorităţile în concordanţă cu acest nivel inferior.

Mascarea întreruperilor
Fiecare intrare de cerere de întrerupere poate fi mascată prin registrul de
măşti IMR programabil prin OCW

Modul de mascare specială


În acest mod cererile de întrerupere cu aceeaşi prioritate ca şi întreruperea
în servire sunt invalidate şi se iau în considerare întreruperile mai prioritare
sau mai puţin prioritare ca cea în serviciu.Acest mod este programabil prin
ESMM=”1” şi SMM=”1” în OCW3.

Modulde tratare al întreruperilor prin interogare


În acest mod sistemul de întreruperi este invalidat la nivelul
microprocesorului,iar cererile de întreruperi sunt explorate prin
program.Modul ”polling” este setat prin P=”1” în OCW3.Controller-ul
I8259A tratează primul ciclu de citire (/RD şi /CS) ca pe primul ciclu maşină

13
din secvenţa de acceptare a întreruperii.În ISR se va înscrie bitul
corespunzător cererii mai prioritare.

Modul de imbricare totală specific


Acest mod ete necesar în sistemele care au mai multe controllere I8259A
în cascadă şi se programează la nivelul masterului (prin SFNM=”1” în
ICW4).Este similar cu Fully Nested Mode cu unele excepţii.Când se execută
o cerere de întrerupere venită de la un slave oarecare, acest slave nu este
invalidat la nivelul master-ului.
Astfel,cereri mai prioritare de la acelaşi slave pot fi servite.În modul normal
(FNM), la servirea unei întreruperi provenite de la controller slave, intrarea
corespunzătoare din master este invalidată şi în consecinţă nu mai pot fi
acceptate alte cereri mai prioritare decât cea în serviciu controlată de acelaşi
slave.

Modul bufferat
În cazul în care controller-ul I8259A este cascadat, iar modul nu este
bufferat, semnalul /SP//EN se foloseşte ca şi semnal de intrare şi controlează
tipul circuitului (master sau slave).Există configuraţii de sistem care necesită
neapărat o comunicaţie a controller-ului I8259A cu magistrala prin
intermediul unui amplificator (buffer) bidirecţional.În acest caz semnal
/SP//EN se foloseşte ca şi semnalul de ieşire având rolul de a stabili sensul
de transfer al amplificatoarelor bidirecţionale.

/EN=”0” transfer de la controller la microprocesor


/EN=”1” transfer de la microprocesor la controller
Din această cauză în modul bufferat tipul controller-ului se stabileşte prin
programare. Bitul 3 din ICW4 programează modul bufferat, iar bitul 2 din
ICW4 programează tipul master/slave.

14
Figura 5.Cascadarea controller-elor în PC-AT

Modul cascadat
Un controller I8259A funcţionând în mod master , poate fi interconectat
cu până la 8 controllere slave pentru a implementa un sistem de întreruperi
cu 64 de nivele de prioritate.Masterul controlează slave-urile prin
intermediul celor 3 linii de cascadare CASO......CAS2.Într-o configuraţie
cascadată ieşirile INT ale slave-urilor se leagă la intrările Iri ale master-
ului.Dacă există o cerere activă a unui slave şi dacă această cerere este mai
prioritară,masterul va valida slave-ul corespunzător prin liniile de cascadare
pentru ca aceasta să pună adresa rutinei de întrerupere sau tipul întreruperii
pe magistrala de date.

5.Aplicaţii pe sistemul de întreruperi


5.1.Prezentarea schemei şi aplicaţiei

Aplicaţia de mai jos reprezintă un model de utilizare a sistemului de


întreruperi care evidenţiază principalele aspecte, cum ar fi redirectarea unei
întreruperi, achitarea întreruperii şi dezvoltarea unei rutine de întrerupere,
prezentate în limbajul C şi asamblare.
Pe intrarea IRQ7 (cea mai puţin prioritară,destinată portului paralel, LPT)
a controller-ului 8259A (master) avem următoarele posibilităţi de a genera

15
întreruperi: de la un întrerupător deparazitat (1) de la unul fără deparazitare
(2) şi de la canalul 2 al unui circuit I8253 (3), cu adresa de bază 100h
( fig.6).
Selectia sursei de intrerupere se face cu un comutator.

Fig.6.Schema aplicaţiei

16

Você também pode gostar