Sunteți pe pagina 1din 31

Curs 5

Sincronizarea programului cu evenimente externe


5.1. ntreruperile microprocesorului 8085A - 4 linii de ntrerupere mascabile: INTR, RST 5.5, RST 6.5, RST 7.5 - o linie de ntrerupere nemascabil - TRAP 5.1.1. Linii de ntrerupere mascabile Linia INTR (INTterrupt Request) intrare de ntrerupere, activ pe nivel ridicat. Este testat la sfritul ultimului ciclu main al fiecrei instruciuni (cu unele excepii). ntreruperea se consider valid dac bistabilul intern IE (Interrupt Enable) este setat. Bistabilul IE - resetat odat cu microprocesorul (ntreruperile pe linia INTR sunt iniial inhibate); - poate fi setat prin program - instruciunea EI Enable Interrupts - poate fi resetat prin program - instruciunea DI Disable Interrupts - este resetat automat odat cu acceptarea unei cereri de ntrerupere (echivalent DI). - ntreruperile pe linia INTR nu sunt acceptate la sfritul instruciunilor EI i DI. O ntrerupere valid este acceptat odat cu urmtorul ciclu main ciclu INA: - este resetat CBB IE (chiar dac solicitarea rmne activ, nu mai este valid); - se seteaz CBB INTA se activeaz semnalul INTA

- se inhib incrementarea automat a registrului PC - reine adresa instruciunii urmtoare - la activarea INTA , dispozitivul solicitant furnizeaz codul operaie al instruciunii urmtoare de executat. Teoretic - orice instruciune poate fi teoretic furnizat microprocesorului Practic - aceast instruciune trebuie s ndeplineasc o serie de cerine pentru a fi util: - s asigure saltul la adresa de tratare a solicitrii de ntrerupere - s permit revenirea n programul ntrerupt i reluarea fluxului normal de instruciuni. Exist doar dou instruciuni care pot ndeplini aceste cerine: - o instruciune de apel necondiionat CALL addr permite apelarea rutinei de tratare amplasat oriunde n spaiul de memorie are 3 octei, deci dispozitivul solicitant trebuie s fie capabil s furnizeze succesiv cei trei octei ai instruciunii (utilizat de controlerele de ntreruperi), la activarea de trei ori succesiv a liniei INTA . - o instruciune de apel scurt RST n (Restart) (n=07) are un singur octet, fiind uor de furnizat pe MD la activarea semnalului INTA ; codului operaie include un cmp de 3 bii (n) pentru codificarea celor 8 adrese posibile de tratare. Execuia instruciunii inserate de dispozitivul solicitant: - se salveaz n stiv coninutul registrului PC (adresa instruciunii urmtoare din programul ntrerupt) - se ncarc n PC adresa rutinei de tratare: 8 n (RST) sau addr (CALL)

M1 (INA) T1 CLK T2 T3 T4 T5 T6 T1

M2 (INA) T2 T3 T1

M3 (INA) T T3 T1

M4 (MW) T2 T3

M5 (MW) T1 T2 T3

INTA IO/M, S1, S0 ALE

( 1,1,1)

( 1,1,1 )

( 1,1,1)

( 0,0,1 )

( 0,0,1 )

A15A8 OUT AD7AD0


PCL

PCH IN
CALL

PCH OUT
PCL

PCH IN OUT
PCL

(SP-1)H IN OUT
(SP-1)L).

(SP-2)H OUT
(SP-2)L).

OUT
PCH

OUT
PCL

ADL LOW (ADDR)

ADH HIGH (ADDR)

RD WR

Acceptarea solicitrii de ntrerupere pe linia INTR (instruciunea CALL addr) Rutina de tratare: - amplasat la adresa corespunztoare instruciunii de apel furnizat de solicitant; cu ajutorul directivelor de asamblare - conserv starea programului ntrerupt salvarea pe stiv a registrelor care urmeaz a fi modificate i refacerea lor la final - trateaz solicitarea de ntrerupere; operaii de I/E specifice dispozitivului solicitant; - informeaz solicitantul dup tratare pentru ca acesta s-i dezactiveze cererea; dialog cu dispozitivul solicitant n spaiul de I/E; - revalideaz ntreruperile pe linia INTR IE=1 dup execuia instruciunii EI Enable Interrupts - revine n programul apelant la terminarea tratrii cu o instruciune de revenire (RET RETurn) Liniile RST 5.5, RST 6.5 i RST 7.5 - linii de ntrerupere mascabile - pot fi mascate individual, prin bii suplimentari fa de IE; - mascarea/demascarea liniilor RST - instruciunea SIM (Set Interrupt Mask); - citirea strii biilor de mascare - instruciunea RIM (Read Interrupt Mask); - nu necesit o confirmare extern a acceptrii solicitrilor; - P 8085 execut automat instruciuni de tip RESTART implementate n hardware; - adresele rutinelor de tratare: 85.5=44=002Ch, 86.5=52=0034h i 87.5=60=003Ch; - nu se suprapun peste adresele folosite de INTR prin RST n (n=07)

Solicitri simultane ordinea prioritilor (maxim) RST 7.5, RST 6.5, RST 5.5 (minim) Liniile RST au prioritate mai mare dect linia INTR. Liniile RST 6.5 i RST 5.5 sunt active pe nivel logic 1, la fel ca i INTR. Linia RST 7.5 - activ pe front cresctor: cererea este memorat ntr-un bistabil intern, care este resetat dup servire, printr-o mascare software sau la resetarea P. Instruciunea SIM (Set Interrupt Mask) ieire serial (SOD CBB SOD, dac SOE=1 - Serial Output Enable); resetarea bistabilului care reine cererea de ntrerupere aprut pe RST 7.5 (R7.5=1) mascarea/demascarea liniilor de ntrerupere RST (M7.5, M6.5 i M5.5), dac MSE=1 (Mask Set Enable). Ex.: MSE=1, M5.5=1, M7.5=0 linia de ntreruperi RST 5.5 este mascat, iar linia RST 7.5 este demascat. Dup acceptarea unei ntreruperi pe oricare din liniile RST, toate ntreruperile mascabile sunt dezactivate automat (IE=0) i ele trebuie revalidate cu o instruciune EI. EI i DI nu afecteaz starea mtilor pentru liniile RST. 7 6 5 4 3 2 1 0

SOD

SOE

R7.5

MSE

M7.5

M6.5

M5.5

Instruciunea RIM (Read Interrupt Mask) intrare serial (SID SI); - citirea strii bistabililor de validare (IE) i mascare a ntreruperilor (M7.5, M6.5, M5.5) - citirea solicitrilor de ntrerupere pe liniile RST n curs de servire (I7.5, I6.5, I5.5).

SID

I7.5

I6.5

I5.5

IE

M7.5

M6.5

M5.5

5.1.2. Linia de ntrerupere nemascabil Linia TRAP nu poate fi mascat prin program - nu necesit o confirmare extern a acceptrii solicitrilor; - P 8085 execut automat o instruciune RST 4.5 implementat n hardware; - adresa rutinei de tratare: 84.5=36=0024h; - nu se suprapune peste adresele folosite de liniile INTR i RST; - activ att pe front pozitiv ct i pe nivel; - o solicitare e acceptat numai dac se menine pe nivel ridicat pn la testare; - conserv starea sistemului de ntreruperi mascabile (bitul de validare general IE i biii de masc ai liniilor RST); - rezervat pentru situaii catastrofale- iminenta dispariie a tensiunii de alimentare. Linia de ntrerupere TRAP RST 7.5 RST 6.5 RST 5.5 INTR Adresa de salt 0024h 003Ch 0034h 002Ch dat de instruciunea RST n sau CALL addr Nivelul de prioritate 1 (max) 2 3 4 5 (min) Modul de activare front i nivel front pozitiv nivel logic 1 nivel logic 1 nivel logic 1 Tipul ntreruperii nemascabil mascabil mascabil mascabil mascabil

8085A are integrat un controler de gestionare a cererilor multiple de ntrerupere. Funcionarea n timp real rspuns rapid la apariia unor evenimente externe, asincrone: - scurgerea unui interval de timp msurat de un dispozitiv I/E (ceas); - controlul fluxului de date transferate; Soluia - regimul de ntreruperi. Sursele de evenimente externe mai numeroase dect liniile de ntrerupere. Surse de ntrerupere: dispozitive de I/E diferite; - mecanisme (cauze) distincte din cadrul aceluiai dispozitiv de I/E. 5.2. Tratarea solicitrilor multiple de ntreruperi Probleme principale: - arbitrarea cererilor selectarea uneia din mai multe cereri active; - recunoaterea solicitantului stabilirea rutinei de tratare a cererii de ntrerupere. Arbitrarea cererilor - sistem de prioriti: - fixe tratare preferenial sistematic a unor cereri n detrimentul altora; - ciclice tratare echilibrat a cererilor pe termen lung. Recunoaterea solicitantului: - interogare (polling); - tratare vectorizat (vectoring)

5.2.1. Interogarea surselor de ntrerupere Mai multe surse de ntrerupere conectate la aceeai linie de ntrerupere a P Rutina de tratare: - este comun pentru toate sursele; - asigur interogarea tuturor potenialelor surse pentru a detecta cauza ntreruperii; Prioritatea de tratare - ordinea de interogare. Exemplu: 3 dispozitive de I/E, care pot genera ntreruperi pe aceeai linie - RST 5.5. D1, D2 cte o surs fiecare (#1, #2), fr registre interne de stare pentru memorarea solicitrilor; D3 - cu dou surse (#3, #4), dispune de un registru intern de stare care poate preciza cauza ntreruperii. Adresa rutinei de tratare este fix i comun pentru toate cele 3 surse: 85,5=44=002Ch. Starea cererilor de la sursele #1 i #2 poate fi citit cu ajutorul unui port de intrare extern, format din dou amplificatoare (drivere) cu 3 stri. Cauza ntreruperii generate de D3 (#3, #4) poate fi identificat citind portul intern de stare.

A15A8

M/IO

E Port de stare cereri #1, #2

DMUX I/E

8085
AD7AD0 RD RST 5.5 WR

#1

I/E D1
#2

I/E D2

I/E D3
Port de stare D5 D2 #4 #3

Sistem de tratare a ntreruperilor prin interogare

RST 5.5
Citire port de stare cereri de la #1, #2 Cerere de la #1? Tratare cerere de la #1

Cerere de la #2?

Tratare cerere de la #2 Tratare cereri de ntrerupere

Citire port de stare cereri de la #3, #4 Cerere de la #3? Tratare cerere de la #3

Cerere de la #4?

Tratare cerere de la #4

RET
Secvena de interogare

Dezavantaje: prioritate fix n servire timp de rspuns relativ ridicat - inacceptabil de mare pentru o funcionare n timp real. tratarea unei solicitri nu poate fi ntrerupt nici de o cerere mai prioritar. 5.2.2. ntreruperi vectorizate - permite tratarea eficient a unui numr mare de solicitri; - dispozitive de I/E specializate - controlere de ntreruperi. Vector de ntrerupere: adresa de tratare a ntreruperii specifice unei anumite surse. 5.3. Controlerul de ntreruperi programabil PIC 8259/8259A PIC Programmable Interrupt Controller - accept cereri pe 8 linii de ntrerupere; - determin cererea de prioritate maxim; - ntrerup activitatea unitii centrale la apariia a cel puin unei solicitri; - informeaz P, prin instruciuni CALL addr (la 8085) sau INT n (la 8086), asupra adresei de start a rutinei care deservete linia de ntrerupere; - se pot utiliza pentru realizarea de sisteme de tratare a ntreruperilor cu pn la 64 de linii de ntrerupere, prin conectarea lor n cascad, pe dou niveluri (Master-Slave). 8259A - o versiune mbuntit a circuitului 8259 poate lucra i cu P de 16 bii.

5.3.1. Structura intern i funcionarea

D7D0

Tampon magistral de date

INTA

INT

Logic de comand Magistral intern

RD WR A0 CS CAS0 CAS1 CAS2 SP/EN

Logic de citire/ scriere

Registrul ntreruperilor n servire (ISR)

Rezolvitor de prioriti (PR)

Registrul cererilor de ntrerupere (IRR)

IR0 IR1 . . IR7

Logic de comparare /cascadare

Registrul de mascare ntreruperi (IMR)

Schema bloc a circuitelor PIC 8259/8259A IR0IR7 - linii de cerere de ntrerupere active pe nivel sau pe front, la alegere.

IRR (Interrupt Request Register) memoreaz cererile i le transmite ctre blocul de arbitrare a cererilor n funcie de prioritile acestora PR (Priority Resolver).

O cerere este valid dac nu este mascat n registrul IMR (Interrupt Mask Register). La apariia cel puin a unei cereri valide, logica de comand activeaz linia INT de cerere ctre microprocesor. La 8085, aceasta se conecteaz la linia INTR. La sosirea cofirmrii ( INTA =0), cererea cea mai prioritar n acel moment din IRR este servit, fiind nscris i n registrul cererilor n curs de servire (ISR - In Service Register). Tamponul magistralei de date - amplificator bidirecional cu trei stri - asigur transferul datelor ntre P i registrele interne ale 8259. Logica de citire/scriere controleaz transferul prin amplificatorul bidirecional de date: A0 adreseaz registrele interne ale controlerului. CS - selecie circuit valideaz transferul prin amplificatorul bidirecional de date. RD , WR - stabilete sensul de transfer prin amplificatorul bidirecional de date. Logica de comparare/cascadare asigur recunoaterea sursei ntreruperii n sisteme cu dou sau mai multe controlere conectate n cascad, pe dou niveluri (master-slave), printr-un dialog ntre acestea pe liniile CAS2 CAS0.

SP/ EN - Slave program / Enable linie a crei funcie la 8259A este stabilit prin program: SP - Slave Program intrare - stabilete prin hardware modul de lucru al controlerului: Slave ( SP =0) sau Master ( SP =1) EN - Enable ieire - valideaz transferul de informaii de la PIC printr-un buffer, n sistemele complexe, care necesit bufferizarea magistralei de date.
CAS2 CAS0 Cascade linii prin care controlerul master informeaz un controler slave c trebuie s furnizeze instruciunea CALL addr la acceptarea unei cereri de ntrerupere. La 8259 este prezent numai funcia SP .

P 8085 INTR INTA AD7AD0

Vcc D7 D 0 INT INTA CAS2 SP/EN PIC Master CAS1 CAS0 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 #1 D7 D 0 INTA #12 #13 #14 #10 #11 INT CAS2 CAS1 CAS0 INTA D7 D0 PIC Slave 2 SP/EN IR0 IR7 #1522

INT CAS2 PIC Slave 1 CAS1 SP/EN CAS0 IR0 IR7 #29

Fig.5.4. Conectarea n cascad a controlerelor de ntreruperi PIC 8259/8259A

5.3.2. Iniializarea PIC 8259/8259A PIC 8259/8259A - dispozitive I/E programabile trebuie iniializate nainte de a le utiliza

A0 0 1

D7 D6 D5 D4 D3 A7 A6 A5 1 0

D2 F

D1 D0 S 0

ICW1 ICW2

A0 0 1

D7 A7

D6 A6

D5 A5

D4 D3 D2 D1 D0 1 LTM ADI S IC4 A11 A10 A9 A8

A15 A14 A13 A12 A11 A10 A9 A8 Da Singur ? (S=1) Nu S5 S4 S3 S2

A15 A14 A13 A12 Da

1 1

S7

S6

Master S1 S0

Singur ? (S=1) Nu S5 S4 S3 S2 ID2

ICW3M ICW3S

1 1

S7

S6

Master S1 S0 ID1 ID0 Slave

ID2 ID1 ID0 Slave

Modul cu prioriti fixe ICW4 1

Nu Da

IC4=1 ?

1 0 0 SFNM BUF M/S AEOI PM Modul cu prioriti fixe

a)

b)

Iniializarea controlerelor de ntreruperi PIC 8259 (a) / 8259A (b)

Iniializare: - secven de maxim trei (la 8259) sau 4 (la 8259A) cuvinte de comand de iniializare - ICW Initialization Command Word ICW1 se nscrie n registrul intern de comand selectat cu A0=0 ICW2 se nscrie n registrul intern de comand selectat cu A0=1 A15A5 cei mai semnificativi bii ai adresei utilizate de instruciunea CALL addr, furnizat de controler n ciclul de acceptare a ntreruperii i utilizat de P pentru recunoaterea sursei ntreruperii i apelarea rutinei de tratare specifice. Intervalul dintre dou adrese succesive, corespunztoare la dou linii succesive, poate fi stabilit cu bitul F (Four) sau ADI (call ADdress Interval): F=1 sau ADI=1 interval de 4 octei F=0 sau ADI=0 interval de 8 octei Rezult o zon de 48=32=25 octei sau de 88=64=26 octei denumit tabela cu vectori de ntrerupere (TABVI), amplasat la o adres multiplu de 32 sau de 64. Vectorii de ntrerupere (adresele de tratare) se regsesc n TABVI la adrese multiplu de 4, respectiv de 8. Atunci cnd controlerul furnizeaz codul instruciunii CALL addr, cmpul de adres indic adresa rutinei de tratare amplasat n TABVI specific unei anumite linii de ntrerupere cea pentru care este nregistrat cererea valid cea mai prioritar la momentul respectiv. Pentru un interval de 4(8) octei: biii A15A5(A15A5) sunt furnizai de controler aa cum sunt primii n ICW1 i ICW2. biii A4A2(A5A3) ai adresei reprezint codul liniei de ntrerupere. biii A1 i A0 (A2, A1 i A0) sunt forai pe 0 - vector de ntrerupere multiplu de 4(8).

F=1 sau ADI=1 (intervale de 4 octei) Linia de ntrerupere IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 F=0 sau ADI=0 (intervale de 8 octei, A5 este ignorat n ICW1) Linia de ntrerupere IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 Din ICW2 Din ICW1 Vector de ntrerupere (addr) A15 A8 A7 A6 A5 A4 A3 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 A2 A1 A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Din ICW2 Din ICW1 Vector de ntrerupere (addr) A15 A8 A7 A5 A4 A3 A2 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 A1 A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

S Single exist un singur controler n sistem (S=0 mai multe controlere, n cascad) LTM Level Triggered Mode programabil numai la 8259A stabilete forma de prezentare a cererilor pe liniile IR0IR7: LTM = 0 cereri active pe front cresctor (Edge Triggered Mode) existent la 8259; LTM = 1 cereri active pe nivel ridicat. Cererile trebuie meninute active cel puin pn cnd P obine adresa rutinei de tratare. n caz contrar, se genereaz o ntrerupere implicit pe linia IR7, fr a se seta bitul ISR7. Se pot astfel detecta i rejecta perturbaiile care pot s apar pe liniile IRi. IC4 indic, numai la 8259A, dac ICW4 se folosete (IC4=1) sau nu (IC4=0). ICW1 i ICW2 sunt suficiente pentru ca un sistem format dintr-un singur controler s funcioneze n modul cu prioriti fixe (Fully Nested Mode). ICW3 utilizat numai n sisteme cu mai multe controlere conectate n cascad Formatul ICW3 difer pentru master fa de slave: ICW3M indic prin Si=1 liniile IRi la care sunt conectate controlere slave. ICW3S indic, prin ID2ID0, codul i al liniei IRi de la master la care este conectat. ICW4 - numai la 8259A, dac IC4=1 n ICW1. Opiuni suplimentare: PM (Microprocessor Mode) - tipul de microprocesor: dac D0=0 P de 8 bii CALL addr dac D0=1 P de 16 bii INT n

AEOI (Automatic End Of Interrupt) achitare automat a ntreruperii: AEOI=1 - resetarea automat a bitului din ISR corespunztor cererii n curs de servire, n momentul cnd microprocesorul recepioneaz adresa complet a rutinei de tratare. AEOI=0 - pentru resetarea bitului din ISR este necesar un cuvnt special de operare de la microprocesor, EOI (End Of Interrupt). BUF=1 magistral de date bufferizat, caz n care linia SP/ EN are rolul de validare a bufferului: este activat de ndat ce controlerul depune o dat valid pe MD.

M/S - cnd BUF=1, preia cealalt funcie a liniei SP/ EN i stabilete tipul controlerului.
SFNM - Special Fully Nested Mode masterul ia n considerare o cerere de ntrerupere de la un PIC slave, chiar i atunci cnd exist deja o cerere n curs de servire, primit anterior, de la acelai controler. SINT se comport ca i cum ar fi format dintr-un singur controler, cu 15 linii de ntrerupere - sistem de prioriti global. La revenirea din rutina de tratare a unei cereri de la PIC-slave, se achit mai nti ntreruperea de la PIC-slave i, numai dac nu mai este o alta n curs de tratare la slave, se achit i la PIC-master. n mod normal (SFNM=0), o nou solicitare de la un slave este blocat de master pn la achitarea celei n curs de servire. SINT lucreaz cu sisteme de prioriti locale, la nivelul fiecrui controler. La revenirea din rutina de tratare a unei cereri de la PIC-slave, se achit mai nti ntreruperea de la PIC-master i apoi la PIC-slave. IC4=0 n ICW1 este echivalent cu ICW4=00h.

5.2.3. Moduri de lucru La iniializare: se terg registrele IMR, IRR i ISR (odat cu nscrierea ICW1); se intr n modul cu prioriti fixe; Se poate trece ntr-un alt mod de lucru printr-un cuvnt de operare specific. Modul de lucru cu prioriti fixe (Fully Nested mode): liniei IR0 i se atribuie prioritate maxim, iar liniei IR7 prioritate minim; ordinea prioritilor rmne nemodificat n timpul funcionrii; la apariia mai multor cereri de ntrerupere, acestea sunt tratate n ordinea prioritii; dup acceptarea unei ntreruperi pe o linie: - la primul impuls INTA este ters bitul din IRR i este setat bitul din ISR corespunztor cererii servite; - nu mai sunt luate n considerare alte cereri pe aceeai linie sau pe linii de prioritate mai mic pn la achitarea ntreruperii n curs (resetare bit corespunztor din ISR). - sunt ns acceptate ntreruperi pe liniile mai prioritare, chiar i nainte de achitarea celei n curs. Modul de lucru cu rotirea prioritilor (Rotating mode): asigur o tratare echiprioritar a liniilor de ntrerupere pe termen lung; cu rotire normal (Auto mode): - dup tratarea ntreruperii pe o linie, aceasta capt automat prioritate minim; cu rotire specific (Specific mode): - se precizeaz prin program linia de prioritate minim.

Modurile de mascare - determin, pentru liniile mascate cu OCW1, inhibarea cererilor ulterioare aprute pe acele linii; Modul de mascare normal (Normal Mask mode) - la servirea unei ntreruperi, inhib solicitrile de pe nivelul respectiv i de pe cele inferioare, indiferent dac acestea sunt mascate sau nu. Modul de mascare special (Special Mask mode) - valideaz solicitrile de pe oricare din celelalte niveluri care nu sunt mascate, indiferent dac sunt superioare sau inferioare celui n curs de tratare. Modul de lucru cu interogare (Polled mode): se poate realiza tratarea prin interogare, renunndu-se la tratarea vectorizat, prin ntreruperi. P nu mai primete cereri de ntrerupere, ci trebuie s interogheze periodic controlerele de ntreruperi din sistem, prin comenzi OCW3 cu P=1. controlerul devine un simplu sistem de nregistrare a cererilor de ntrerupere furnizeaz - numai la cererea microprocesorului - informaii despre existena solicitrilor de ntrerupere, ntr-un cuvnt de forma urmtoare:

D7 I

D6 -

D5 -

D4 -

D3 -

D2

D1

D0

W2 W1 W0

Dac exist o solicitare de ntrerupere, I=1, activarea semnalului RD ( RD =0, A0=0): este interpretat de 8259/8259A ca i un rspuns la cerere ( INTA ); determin setarea n ISR a bitului corespunztor cererii de prioritate maxim, avnd codul precizat de biii W2W0. ntreruperile de la controler trebuie ignorate de ctre P.

Cuvintele de operare OCW1, OCW2 i OCW3 identice pentru 8259 i 8259A OCW1 - asigur mascarea uneia sau mai multor linii de ntrerupere:

A0 1

D7 M7

D6 M6

D5 M5

D4 M4

D3 M3

D2 M2

D1 M1

D0 M0

Mi=1 (i=70) asigur mascarea liniilor de ntrerupere IRi OCW2 conine urmtoarele informaii:

A0 0

D7 R 0 0 1 1 0 1 1 0

D6

D5

D4 0

D3 L2

D2 L1

D1 L0

D0 codul liniei, n Specific mode

SL EOI 0 0 1 0 0 0 1 1 1 1 1 1 0 0 1 0 0

Resetarea bitului 1 de prioritate maxim din ISR Resetarea bitului 1 din ISR specificat de L2 L1 L0 Rotire odat cu resetarea bitului 1 de prioritate maxim din ISR Setare mod rotire n Automatic EOI Resetare mod rotire n Automatic EOI Rotire odat cu resetarea bitului 1 din ISR specificat de L2 L1 L0 Stabilire nivel de prioritate minim (cel specificat de L2 L1 L0) Nici o operaie

Achitare ntrerupere Rotire automat Rotire specific

AEOI=1 n ICW4, n modul cu prioriti fixe, OCW2 nu este necesar; OCW2 poate fi totui folosit pentru intrarea/ieirea n/din modul cu rotire automat a prioritilor. AEOI=0 n ICW4 sau dac nu se utilizeaz ICW4 (8259): bitul din ISR corespunztor cererii de ntrerupere n curs de servire trebuie resetat explicit, nainte de revenirea din ntrerupere; aceasta se poate face cu un cuvnt OCW2 avnd bitul EOI=1. - n modul cu prioriti fixe sau cu rotirea automat a prioritilor, bitul care trebuie resetat este identificat automat ca fiind bitul 1 de prioritate maxim din ISR. - n modul cu rotire specific a prioritilor(Specific End Of Interrupt), rutina de tratare trebuie s precizeze explicit care este bitul din ISR ce trebuie resetat, prin liniile L2L0, cu ajutorul unui cuvnt OCW2 cu SL=1 (Select Line) i EOI=1. Comenzile de achitare a ntreruperilor (EOI) se pot da independent sau mpreun cu comenzile de rotire a prioritilor: R=1 (Rotating mode). Dac R=1, SL=0 i EOI=1, rezult varianta de rotire normal, cnd se reseteaz bitul 1 avnd prioritate maxim n ISR. Dac R=1, SL=1 i EOI=1 se obine cea de-a doua variant, de rotire i achitare specific: se reseteaz bitul 1 din ISR corespunztor liniei avnd codul precizat de L2L0, care totodat capt prioritate minim. Prioritile pot fi rotite i fr achitarea ntreruperii, dar numai specific: R=1 i SL=1, EOI=0, fac ca linia L2L0 s devin cea mai puin prioritar.

OCW3 are urmtoarea structur:

A0 0

D7

D6

D5

D4 D3 D2 1 P

D1

D0

ESMM SMM 0 0 1 1 0 1

RR RIS 0 1 1 0 1 fr efect urmeaz citirea IRR urmeaz citirea ISR

fr efect Reset Set

Special Mask Mode

Polling mode

SMM (Special Mask Mode) ESMM (Enable SMM) - setarea sau tergerea modului special de mascare. P - asigur trecerea la modul cu interogare (P=1) a cererilor. P =1 - este prioritar fa de RR=1. OCW3 - permite citirea de ctre microprocesor a coninutului registrelor IRR sau ISR. Citirea IRR i ISR se realizeaz cu A0=0 i trebuie precedat de nscrierea unui cuvnt OCW3 cu RR=1 (Read Register): RIS = 0 urmeaz citirea IRR. RIS = 1 urmeaz citirea ISR. Registrul IMR poate fi citit n orice moment, cu A0=1.

5.4. Realizarea unui sistem de ntreruperi (SINT) cu 8259A Se cunoate: numrul surselor de ntreruperi; prioritatea relativ de tratare a acestora; forma de prezentare a cererilor (nivel, front); tipul de microprocesor (8/16 bii); spaiul de memorie rezervat pentru amplasarea tabelului cu vectorii de ntreruperi; intervalul dintre doi vectori de ntrerupere succesivi; spaiul de I/E disponibil pentru adresarea controlererului / controlerelor; Se cere: numrul de controlere necesare i interconectarea acestora; schema de conectare a sistemului de ntreruperi n sistemul cu P; programarea controlerelor (iniializarea i stabilirea modului de lucru). organizarea tabelei de ntreruperi; rutinele de tratare a cererilor de la sursele de ntrerupere. Exemplu: S se organizeze un SINT cu 15 niveluri pentru un sistem cu P 8085, folosind 8259A. Se cunoate c tabelul cu vectorii de ntreruperi va fi amplasat n memorie cu ncepere de la adresa 1000h, i va avea intervale de 4 octei. Spaiul de I/E ocupat este definit, prin decodificare, de adresele A15A12. Se dorete o tratare cu prioriti fixe, cu arbitrare a acestora la nivel global (SFNM). Nu se utilizeaz bufferizarea magistralei de date. 15 linii - sunt necesare dou controlere, interconectate ntr-o structur master-slave. Dispozitivul slave se conecteaz la master pe una din intrrile IRi (i=70). PIC-master - cererile de prioritate ridicat, PIC-slave conectat la PIC-master pe linia IR7.

5.4.1. Structura hardware i funcionarea SINT

A15A0 Magistrala de adrese IO/M INTR

A8

A15

A14A12

A8

8085 + 8212

E3 E1 A 2 A 1 A 0 E2 DCD I/E (8205) 0 1 2 3 4 5 6 7

D7D0
INTA RD WR

Magistrala de date

Extensie SINT

VCC

INT INTA A0 D7D0 CS RD CAS2 PIC-M WR CAS1 SP / EN CAS0 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

INT INTA A0 D7D0 CS RD CAS2 PIC-S WR CAS1 SP / EN CAS0 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7

#1 #2 #3 #4 #5 #6 #7

#8 #9 #10 #11 #12 #13 #14 #15

max.

Prioritate

min.

Fig.5.6. Structura hardware a SINT cu 15 niveluri

5.4.2. Programarea SINT - iniializarea PIC-M i PIC-S; - mascarea nivelurilor neutilizate; - stabilirea modului de operare; - organizarea tabelului de ntreruperi; - scrierea rutinelor de tratare. CSEG ; INIIALIZARE PIC-M ICW1M EQU 00010101b ICW2M EQU 10h ICW3M EQU 10000000b ICW4M EQU 10010000b PIC_M EQU 50h MVI OUT MVI OUT MVI OUT MVI OUT A,ICW1M PIC_M A,ICW2M PIC_M+1 A,ICW3M PIC_M+1 A,ICW4M PIC_M+1 ; ; ; ; ; 4 octei/interval, master-slave, TABVIM la adresa 1000h TABVIM la adresa 1000h PIC-S conectat pe IR7 la PIC-M. SFNM=1 Adresa de baz a PIC-M (de la DCD 8205)

; Se nscrie ICW1 n PIC-M (cu A0=0). ; Se nscrie ICW2 n PIC-M (cu A0=1). ; Se nscrie ICW3M n PIC-M (cu A0=1). ; Se nscrie ICW3M n PIC-M (cu A0=1).

; INIIALIZARE PIC-S ICW1S EQU 00110100b ICW2S EQU 10h ICW3S EQU 00000111b PIC_S EQU 60h

; 4 octei/interval, master-slave, TABVIS la adresa 1020h ; TABVIS la adresa 1020h ; PIC-S conectat la PIC-M pe linia IR7. ; Adresa de baz a PIC-S (de la DCD 8205)

MVI A,ICW1S OUT PIC_S ; Se nscrie ICW1 n PIC-S (cu A0=0). MVI A,ICW2S OUT PIC_S+1 ; Se nscrie ICW2 n PIC-S (cu A0=1). MVI A,ICW3S OUT PIC_S+1 ; Se nscrie ICW3S n PIC-S (cu A0=1). ; PROGRAMARE MTI - Implicit, dup iniializare, toate nivelurile sunt validate. ; Dac se dorete ca unele linii s fie mascate, se folosesc cuvinte de tip OCW1: OCW1M EQU 01000000b ; Se mascheaz linia IR6 de la master OCW1S EQU 11110000b ; i liniile IR7IR4 de la slave. MVI OUT MVI OUT A,OCW1M PIC_M+1 A,OCW1S PIC_S+1 ; Se nscrie OCW1 n PIC-M (cu A0=1). ; Se nscrie OCW1 n PIC-S (cu A0=1).

; ORGANIZAREA TABELULUI DE NTRERUPERI DSEG ORG 1000h ; TABVIM ncepe la 1000h.

TABVIM: JMP NOP

trat0

; Tratare ntrerupere pe linia IR0 de la PIC-M. ; JMP trat0 are 3 octei, NOP are 1 octet, n total sunt 4 octei.

JMP trat1 ; Se ajunge aici ca urmare a faptului c n ciclurile INA, NOP ; PIC-M furnizeaz microprocesorului instruciunea CALL trat1. ;................. JMP trat6 ; Salt la rutina de tratare a solicitrii pe linia IR6 de la master. NOP JMP NOP TABVIS: eroare ; EROARE: la o solicitare pe linia IR7 de la master nu se ajunge aici, ; ci n TABVIS (adresa de apel e furnizat de PIC-S, nu de PIC-M). ; TABVIS=TABVIM+84; TABVIM i TABVIS sunt multiplu de 32.

JMP trat7 ; Salt la rutina de tratare a solicitrii pe linia IR0 de la slave. NOP JMP trat8 ; Salt la rutina de tratare a solicitrii pe linia IR1 de la slave. NOP ;.................. JMP trat14 ; Salt la rutina de tratare a solicitrii pe linia IR7 de la slave ; STRUCTURA UNEI RUTINE DE TRATARE A NTRERUPERII DE LA PIC-M (trat0trat6) EOI trati: PUSH PUSH PUSH PUSH PSW B D H EQU 00100000b ; Definete un cuvnt de comand OCW2 de tip EOI. ; trat1 trat6 ; Salveaz pe stiv acumulatorul, flag-urile, ; precum i coninutul celorlalte registre modificate de subrutin.

;...........

; Tratare specific sursei (seciune nentreruptibil).

EI ;........... MVI DI OUT POP POP POP POP EI RET trati: PUSH PSW PUSH B PUSH D PUSH H MVI A,EOI OUT PIC_M ;............... EI ;............... MVI A,EOI DI OUT PIC_S POP H POP D POP B POP PSW A,EOI PIC_M H D B PSW

; Validare ntreruperi pe linia INTR ; Tratare specific sursei (seciune ntreruptibil). ; ; ; ; Invalidare ntreruperi - intrare n seciunea critic. Achit ntreruperea - numai la PIC-master. Reface de pe stiv contextul programului ntrerupt, salvat la intrare.

; Revalideaz ntreruperile. ; Revine n programul ntrerupt. ; trat7 trat14 ; Salveaz pe stiv acumulatorul, flag-urile, ; precum i coninutul celorlalte registre modificate de subrutin.

; STRUCTURA UNEI RUTINE DE TRATARE A NTRERUPERII DE LA PIC-SLAVE (trat7trat14)

; Achit ntreruperea - mai nti la PIC-master. ; Tratare specific sursei (seciune nentreruptibil). ; Tratare specific sursei (seciune ntreruptibil). ; ; ; ; Invalidare ntreruperi - intrare n seciunea critic. Achit ntreruperea - i la PIC-slave. Reface de pe stiv contextul programului ntrerupt, salvat la intrare.

EI RET

; Revalideaz ntreruperile. ; Revine n programul ntrerupt.

; STABILIREA MODULUI SPECIAL DE MASCARE ; n rutina de pe nivelul 10 se vor accepta i solicitri de pe nivelurile 1114. ;.............. MVI A, 00001000b ; Mascare nivel 10 (IR3 de la PIC-slave) OUT PIC_S+1 ; nscrie comanda de mascare (OCW1). MVI A, 01101000b OUT PIC_S ; Comand intrarea n modul special de mascare (OCW3). ;............. ; CITIREA REGISTRULUI ISR DIN PIC-M MVI A, 00001011b ; Comand citire ISR. OUT PIC_M ; nscrie OCW3 n PIC_M. IN PIC_M ; (A) (ISR) ;............. ; CITIREA REGISTRULUI IRR DIN PIC-S MVI A, 00001010b ; Comand citire ISR. OUT PIC_S ; nscrie OCW3 n PIC_S. IN PIC_S ; (A) (ISR) ;............. ; CITIREA REGISTRULUI IMR DIN PIC-M IN PIC_M+1 ; (A) (IMR)

S-ar putea să vă placă și