Documente Academic
Documente Profesional
Documente Cultură
- 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
( 1,1,1)
( 1,1,1 )
( 1,1,1)
( 0,0,1 )
( 0,0,1 )
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
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
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
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?
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.
D7D0
INTA
INT
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 .
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
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
1 1
S7
S6
Master S1 S0
ICW3M ICW3S
1 1
S7
S6
Nu Da
IC4=1 ?
a)
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
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
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.
A0 0
D7
D6
D5
D4 D3 D2 1 P
D1
D0
ESMM SMM 0 0 1 1 0 1
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.
A8
A15
A14A12
A8
8085 + 8212
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
max.
Prioritate
min.
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).
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.
;...........
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.
; 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
; 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)