Circuitul pentru comanda prioritara a intreruperilor (8259A)
Sistemul de intreruperi al unui calculator este dependent de circuitul PIC 8259A (Programmable Interrupt Controller), a carui schema bloc este prezentata in Fig. 3.7.
FFig.3.7 Structura interna a circuitului 8259A
D7 D0 linii bidirectionale, utilizate pentru a comunica cu microprocesorul pe magistrala de date
INT iesire, de cerere intrerupere de la PIC (8259A) catre
microprocesor
(INTerrupt Acknowlege) intrare, recunoastere cerere de intrerupere
intrare, determina PIC 8259A sa depuna la iesirile D7 D0, continutul unuia din registrii IMP (Interupt Mask Register - registru masca intrerupere), sau ISR (In Sevice Register - registru intreruperi servite) sau IRR (Interrupt Request Register - registru cerere intrerupere)
intrare, determina PIC 8259A sa primeasca date pentru
registrii interni
(chip select) intrare de selectie a circuitului
A0 linie de adresa ce ajuta pentru selectia unuia din registrii interni
IR7 IR0 intrari, linii cereri de intrerupere
CAS2 CAS0 iesiri, folosite pentru a identificarea unui circuit PIC 8259A
are doua functii determinate de starea unui bit dintr-un registru intern.
a) Functie e intrare, utilizata pentru atribuirea ponderii circuitului.
Daca , circuitul este "MASTER"
Daca , circuitul este "SLAVE".
b) Functie de iesire, situatie in care circuitul comanda registrul bidirectional de pe magistrala de date a sistemului.
Conectarea lui A0
Pinul de adresa "A0" al circuitului PIC8259A, se va conecta la linia A1 a magistralei de date a sistemului, deoarece transferul de date intre PIC si mP se realizeaza pe 8 biti. Aceste date trebuie sa circule pe octetul LOW a magistralei de date. Pentru a se asigura acest lucru adresa la care se realizeaza transferul trebuie sa fie para (adica linia de adresa "A0" a sistemului trebuie sa aiba valoarea "0"). Daca nu se respecta acest lucru , atunci la transferul cu o adresa impara (linia de adresa "A0" a sistemului are valoarea "1"), datele vor fi preluate sau transmise pe liniile D15 D8 in timp ce PIC 8259A este cuplat pe liniile D7 D0
Din Fig.3.7, se mai observa ca PIC 8259A contine 7 registri interni care sunt grupati in doua categorii:
Initialization Commmand Words (ICWS) - cuvinte de comanda pentru initializare
Operation Command Words (OCWS) - cuvinte de comanda pentru operare
ICWs sunt inscrise la pornirea sistemului si nu sunt modificate
OCWs sunt folositi pentru controlul dinamic al intreruperilor
IRR (Interrupt Request Register), Priority Resolver si ISR (In Service Register) sunt folositi pentru a prelua cererile de intrerupere venite pe liniile IR0 IR7.
IRR preia (esantioneaza) intrarile (IR0 IR7), stabileste care linie solicita o intrerupere, apoi impreuna cu IMR (Interrupt Mask Register - echivalent cu OCW1) verifica daca linia corespunde unei intreruperi nemascate. Daca acest lucru este satisfacut, atunci IRR plaseaza pe 1L in celula corespunzatoare liniei respective. Aceasta inscriere este citita si preluata de blocul urmator, Priority Resolver. Functie de prioritatea intreruperii curente (daca exista), Priority Resolver genereaza sau nu cererea de intrerupere la iesirea INT a circuitului PIC8259A. Priority Resolver este modificat de cate ori se termina deservirea unei intreruperi.
Fig.3.8. Ciclu de recunoastere a unei intreruperi
Microprocesorul raspunde cererii de intrerupere lansate de circuitul 8259A (doar daca intreruperile sunt validate adica, indicatorul IF -Interrupt enable Flag- din PSW are valoarea 1 logic), dupa terminarea executiei instructiunii curente, in modul urmator (Fig.3.8):
Genereaza doua cicluri de magistrala (nu de magistrala ISA) de acceptare a intreruperii ( cycles) care se materializeaza prin doua pulsuri negative pe linia (semnalul este generat de controlerul de magistrala 82288).
Din momentul generarii cererii de intrerupere si pana la sfarsitul celui de-al doilea puls pe linia , IRR nu mai esantioneaza liniile IR7÷IR0 si astfel vor fi ignorate eventualele noi cereri de intrerupere.
Primul puls negativ (pe ) va inscrie in ISR "1" logic in locatia corespunzatoare liniei pentru care s-a cerut intreruperea, si totodata va sterge din IRR pe "1" din locatia corespunzatoare sceleasi linii
Al doilea puls va plasa la iesirea D7 D0 a PIC 8259A a continutului registrului ICW2. Continutul acestui registru este preluat de microprocesor si cu ajutorul lui se calculeaza adresa unde se gaseste vectorul de intrerupere al liniei respective. Vectorul de intrerupere este un cuvant pe 32 de biti cu ajutorul caruia se calculeaza adresa fizica la care se afla subrutina ce deserveste linia de intrerupere activa.
Octetul din ICW2 se mai numeste "interrupt type"-numarul de ordine al intreruperii (se va vedea mai tarziu).
Functie de starea bitului AEOI (Automatic End Of Interrupt) din registrul ICW4, linia care a solicitat intreruperea este stearsa din ISR, fie la sfarsitul celui de-al doilea puls de pe linia (AEOI =1) fie prin inscrierea de catre o instructiune finala a subrutinei, a unei comenzi EOI (End Of Interrupt) in registrul OCW2.
Initialization command words (ICWs)
Sunt inscrise la punerea in priza a calculatorului. Modul de selectie este urmatorul:
Cand circuitul este pentru prima oara selectat, A0=0 si data este adresata registrului ICW1
La a doua selectie circuitul 8259A trebuie sa aiba la intrarea de adresa A0=1 si el preia data si o transfera in registrul ICW2. La urmatoarele selectii comportarea circuitului este dictata de ce s-a inscris in ICW1. Astfel fie nu se mai selecteaza nici un registru de tip ICWs (Initialization Command Words), fie se mai selecteaza ICW3 sau ICW4 (in acest caz A0 trebuie sa fie "1" logic), fie se selecteaza succesiv ICW3 si ICW4 (in acest caz trebuie realizate doua accesari succesive cu intrarea de adresa A0=1).
Structura registrului ICW1
A0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
LTIM |
SNGL |
IC4 |
Bitii B7÷B5 si B2nu sunt folositi.
B4 , impreuna cu A0=0 semnifica faptul ca octetul de date este adresat lui ICW1
B3 LTIM =1 Level Triggered Mode - indica faptul ca intreruperile
sunt active pe palier.
=0 Edge Triggered Mode - indica faptul ca intreruperile
sunt active pe front.
B1 SNGL =1 SINGLE - exista un singur circuit 8259A in sistem si ca
urmare nu se va mai incarca registrul ICW3.
=0 CASCADE MODE - sunt mai multe circuite 8259A in
sistem si ca urmare se va transmite si octetul
corespunzator lui ICW3.
B0 IC4 =1 In secventa de initializare nu se va transfera un octet si
pentru ICW4
=0 Nu se va mai transfera un octet si pentru ICW4
Structura registrului ICW2
Registrul ICW2 trebuie sa genereze octetul cu ajutorul caruia microprocesorul va calcula adresa vectorului de intrerupere ( numarul de ordine al intreruperii).
ICW2 are doua campuri. Primul camp format din 5 biti mai semnificativi sunt transferati de pe linia de date (sunt inscrisi la pornirea programului) iar ceilalti sunt inscrisi de PIC 8259A, in functie de linia care cere intreruperea. Ca urmare numarul de ordine al intreruperii va fi:
IR |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 |
|
|||
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 | ||||
T7 |
T6 |
T5 |
T4 |
T3 |
Initial in ICW2 se va inscrie octetul:
T7 |
T6 |
T5 |
T4 |
T3 |
Daca B1 (SNGL) din ICW1 este 0, atunci urmatorul acces pentru care A0 =1 se refera la ICW3 (daca sunt mai multe circuite 8259A).
Daca B1 (SNGL) din ICW1 este 1, atunci urmatorul acces se refera la ICW4 daca si bitul B0 (IC4) este pe 1 logic (in acest caz in sistem este un singur circuit 8259A).
Structura registrului ICW4
Registrul ICW4 este selectat doar daca bitul IC4 (din ICW1) este 1 logic. In caz contrar ICW4 este sters. Selectia se face prin intermediul lui A0=1 si prin faptul ca ICW4 este incarcat la a treia (daca in ICW1 bitul SNGL=1) sau la a patra (daca in ICW1 bitul SNGL=0) selectie a circuitului 8259A. Structura registrului este urmatoarea:
A0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
SFNM |
BUF |
M/S |
AEOI |
mPM |
B4 SFNM - Special Fully Nested Mode (cu mentinerea ordinii
prioritatilor)
=0 - Non SFNM (fara mentinerea ordinii prioritatilor).
Acest bit ajuta la stabilirea modului de atribuire a prioritatilor.
B3 BUF - indica faptul ca iesirea este folosita pentru
tamponul bidirectional.
- indica faptul ca iesirea este folosita ca pin de
intrare ( pentru un circuit "master" si
pentru un circuit "slave").
B2 M/S Daca BUF=0, atunci M/S (Master/Slave) este ignorat
Daca BUF=1 atunci: M/S pentru "master", si
M/S pentru "slave".
B1 AEOI - Automatic End Of Intrerrupt (Iesire automata dintr-o
intrerupere).
=0 - Normal End Of Intrerrupt (Iesire normala dintr-o
intrerupere).
B0 μPM - pentru sisteme cu 80*86
- pentru sisteme cu 8080/8085
Daca se considera ca intrarea A0 a lui 8259A se cupleaza la magistrala de adrese a unui sistem pe linia A0, o secventa tipica pe program ce utilizeaza registrele ICWs este:
MOV AL, 13H 13H 0 0 0 1 0 0 1 1 ICW1
OUT 80H, AL
MOV AL, 18H 18H 0 0 0 1 1 0 0 0 ICW2
OUT 81H, AL
MOV AL, ODH ODH 0 0 0 0 1 1 0 1 ICW4
OUT 81H, AL
Adresele ce acceseaza registrii circuitului 8259A sunt 80H si 81H.
Primele doua instructiuni incarca 13H in ICW1. Circuitul 8259A recunoaste acest lucru deoarece:
A0=0 (Intrarea A0 a lui 8259A)
B4=1 (Bitul B4 este 1)
Data cu care se incarca registrul ICW1, (13H) semnifica faptul ca:
B1=SNGL=1 este un singur circuit 8259A in sistem
B0=IC4=1 indica faptul ca in secventa de comanda se va inscrie si registrul ICW4
Urmatoarele doua instructiuni vor incarca registrul ICW2. Circuitul 8259A recunoaste acest lucru deoarece:
anterior a fost incarcat ICW1
A0=1
Data cu care se incarca ICW2 reprezinta bitii corespunzatori vectorului de baza asociat intreruperilor generate de circuit (cei mai semnificativi 5 biti).
18H 0 0 0 1 1 0 0 0
Ultimile doua instructiuni sunt pentru inscrierea in ICW4. Circuitul 8259A isi da seama de acest lucru deoarece:
Anterior au fost incarcati registrii ICW1 si ICW2
Deoarece SNGL=1 inseamna ca ICW3 nu va fi inscris
Deoarece IC4=1 inseamna ca ICW1 va fi inscris
A0=1
Data inscrisa in ICW4 (0DH 00001101 B), are urmatoarea semnificatie:
B0=μP=1 circuitul 8259A se afla intr-un sistem PC
B1=AEOI(Automatic End Of Intrerrupt)=0, indica faptul ca bitul din ISR (In Sevice Register) corespunzator liniei de intrare accesate sa fie sters prin incarcarea unui 1 logic in celula EOI (End Of Intrerrupt) din OCW2. Acest lucru este realizat de o instructiune plasata la sfarsitul subrutinei de intrerupere.
B3=BUF=1, indica faptul ca terminalul al circuitului 8259A va fi utilizat ca iesire, adica semnalul de la iesirea acestui terminal va valida tamponul bidirectional de pe magistrala de date a sistemului, atunci cand microprocesorul nu acceseaza circuitul 8259A.
B2=M/S=1 nu conteaza. El este luat in consideratie doar cand B3=BUF=0 si atunci M/S=1 ar "instiinta" circuitul 8259A, ca este "master", si M/S=0 ar "instiinta" circuitul 8259A, ca este "slave".
OBS: In situatia in care ICW3 si/sau ICW4 nu sunt incarcate la initializarea sistemului, ele vor contine "0" in toate locatiile.
Operation command words (OCWs)
Sunt trei registri ce pot fi selectati de oricate ori dupa terminarea secventei de initializare. Structura lor este urmatoarea:
Structura registrului OCW1
Acest registru se mai numeste si IMR (Interrupt Mask Register), si este folosit pentru a masca intreruperile.
A0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
M7 |
M6 |
M5 |
M4 |
M3 |
M2 |
M1 |
M0 |
Mi =1 Inseamna ca intreruperea IRi este mascata (nu e luata in consideratie).
Mi =0 Inseamna ca intreruperea IRi este nemascata (este luata in consideratie).
Circuitul 8259A isi da seama de transferul datei catre OCW1 deoarece:
A0=1
Anterior nu s-a realizat un transfer in ICW1,(secventa de incarcare a registrilor ICWs este terminata).
Structura registrului OCW2
A0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
R |
SL |
EOI |
L2 |
L1 |
L0 |
Circuitul 8259A isi da seama ca transferul datei trebuie efectuat catre registrul OCW2 prin:
Ao=0
B3=0
Bitii A0, B4 si B3 selecteaza de fapt unul din registri ICW1, OCW2, OCW3 .
Modul de selectie este urmatorul:
A0 |
B4 |
B3 | |
ICW1 |
|||
OCW2 |
|||
OCW3 |
Registrul OCW2 are rolul de a controla care linie de intrerupere are cea mai mica prioritate si de a comanda modul in care se pot modifica prioritatile liniilor de intrerupere.
B5 EOI (End Of Intrerupt) are un rol in situatia in care AEOI (Automatic End Of Intrerupt) din ICW4 este 0. In aceast caz, stergerea din ISR (In Service Register) a bitului corespunzator intreruperii servite, se face inscriind in OCW2 un octet care sa aiba B5=EOI=1. Ce se intampla, depinde de valorile celorlalti biti si anume:
B7 R (Rotate),
B6 SL (Set Level) si
B2 B0 L2 L0 (care determina adresa unei linii de intrerupere).
Bitii B7 (R) si B6 (SL) pot fi:
R |
SL |
ACTIUNE |
Nu se specifica modul de atribuire a prioritatilor (Non specific,normal priority mode) |
||
Se sterge din ISR bitul ce corespunde liniei de intrerupere specificate de adresa inscrisa in celulele L2 L0 |
||
Se rotesc prioritatile astfel incat. dispozitivului care a fost servit sa i se atribuie prioritatea cea mai mica |
||
Se rotesc prioritatile pana cand linia specificata de adresa inscrisa in celulele L2 L0 sa aiba prioritatea cea mai mica |
Dupa inscrierea octetului in OCW2, acesta va ramane inscris doar pana se executa comenzile care au fost transmise prin octetul respectiv, dupa care OCW2 se anuleaza, asteptand o noua inscriere.
In mod obisnuit, linia IR0 are prioritatea cea mai mare si IR7 are prioritatea cea mai mica
IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7
Rotirea nivelelor de prioritate se face astfel: Se ia linia cu prioritate maxima (din stinga) si se pune la dreapta.
IR0 IR1 IR6 IR7 IR1 IR2 IR7 IR0
IR2 IR3 IR4 IR5 IR6 IR7 IR0 IR1
In functionarea normala, daca apare o noua cerere de intrerupere nemascata, "Priority Resolver" va da curs intreruperii respective (generarea semnalului INT etc..) doar daca in momentul respectiv nu se afla in executie o subrutina corespunzatoare unei linii situata in stanga liniei ce a cerut intreruperea respectiva.
Caz a: Daca se inscriu in celulele R, SL, EOI valorile 0, 0, 1, atunci se va sterge automat bitul ce corespunde prioritatii maxime din ISR (adica ultimul bit care a fost pus pe 1L in ISR).Ordinea prioritatilor liniilor de intrerupere ramane neschimbata indiferent de valorile inscrise in celulele L2 L0.
Caz b Daca se inscriu in celulele R, SL, EOI valorile 0, 1, 1, atunci se sterge din ISR bitul corespunzator liniei L2 L0. Ordinea de prioritati se mentine.
EX:
MOV AL, 63H
OUT 80H, AL
A0 |
R |
SL |
EOI |
B4 |
B3 |
L2 |
L1 |
L0 |
||||||||
|
H |
Selectarea lui OCW2 se face cu A0=B3=B4=0
In urma incarcarii lui OCW2 cu 63H, se va sterge din ISR bitul corespunzator liniei 3.
Caz c Daca se inscriu in celulele R, SL, EOI valorile 1, 0, 1, atunci se sterge ultimul bit inscris in ISR si liniei corespunzatoare acestui bit (linia care tocmai a fost deservita) i se atribuie cel mai mic nivel de prioritate. Nu sunt luate in consideratie locatiile L2 L0.
EX:
MOV AL, A0H
OUT 80H, AL
A0 |
R |
SL |
EOI |
B4 |
B3 |
L2 |
L1 |
L0 |
||||||||
|
A0 |
H |
Daca a fost deservita linia IR4, atunci ordinea de prioritati se va roti pana ce vor ajunge in urmatoarea configuratie:
IR5 IR6 IR7 IR0 IR1 IR2 IR3 IR4
Caz d: Daca se inscriu in celulele R, SL, EOI valorile 1, 1, 1, atunci dupa stergerea bitului din ISR (corespunzator liniei deservite),.nivelele de prioritate vor fi rotite pana cand linia care are numarul inscris in celulele L2 L0 ajunge cea mai putin prioritara.
EX: Presupunem ca anterior terminarii unei subrutine de intrerupere prioritatile erau: IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5
La sfarsitul rutinei se va inscrie:
MOV AL, E2H
OUT 80H, AL
A0 |
R |
SL |
EOI |
B4 |
B3 |
L2 |
L1 |
L0 |
||||||||
|
E2 |
H |
Noua ordine de prioritati va fi:
IR3 IR4 IR5 IR6 IR7 IR0 IR1 IR2
Concluzie:
In situatia in care bitul AEOI din ICW4 este 0L, valorile locatiilor R si SL determina urmatoarele actiuni:
R, SL au valorile 0,0 sau 0,1 nu se modifica ordinea prioritatilor;
R, SL au valorile 1,0 sau 1,1 se realizeaza o rotire a prioritatilor asa cum s-a prezentat anterior
Obs Prin intermediul registrului OCW2 circuitul 8259A poate fi programat sa lucreze in: "Fully nested mode" (caz a si caz b)-cu mentinerea ordinii de prioritati-.
"Rotating priority mode" (caz c si caz d).
Structura registrului OCW3
A0 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
ESMM |
SMM |
P |
RR |
RIS |
Circuitul 8259A isi da seama ca transferul datei trebuie efectuat catre registrul OCW3 prin:
Ao=0
B3=1
Odata ce o data a fost inscrisa in OCW3, ea ramane acolo pana la urmatoarea inscriere.
ESMM (Enable Special Mask Mode) valideaza luarea in consideratie a celulei SMM (Special Mask Mode).
SMM (Special Mask Mode) nu se intimpla nimic deosebit
SMM (Special Mask Mode) circuitul va functiona in modul "Special Mask Mode". In aceasta situatie cererile de intrerupere ( nemascate ) sunt deservite in ordinea in care sosesc fara a se mai tine cont de prioritati.
Acest mod de lucru este util atunci cand nivelele de intrerupere trebuiesc modificate in timpul executiei unei subrutine de intrerupere. Spre exemplu, rutina de intrerupere curenta necesita intr-o portiune inhibarea liniilor mai putin prioritare si in alta nu.
Daca s-ar actiona prin intermediul lui OCW2, s-ar sterge locatia corespunzatoare liniei curente (rutina de deservire nu s-a terminat inca) din ISR. Din acest motiv se prefera SMM = 1.
P (Poll command) este folosita pentru a programa 8259A in modul "interogare" (Polled mode).
In situatia in care microprocesorul nu are linia de intrerupere externa activata, el poate interoga 8259A pentru a vedea care este cererea de intrerupere cea mai prioritara care a fost primita. Pentru aceasta se inscrie in OCW3 1L in locatia "P" si apoi se executa o citire la adresa la care este conectat 8259A (pentru A0=0)
Ceea ce se citeste reprezinta:
I |
W2 |
W1 |
W0 |
I = 1 indica intreruperea prezenta.
W2 W1 W0, indica numarul de ordine al liniei de intrerupere care are prioritatea maxima, din liniile ce sunt activate.
Ex: Daca prioritatile sunt: IR3, IR4, IR5, IR6, IR7, IR0, IR1, IR2 si au fost activate liniile IR4 si IR2 atunci instructiunea
IN AL, 80H (80H este adresa lui 8259A), va returna in AL urmatorul octet:
Citirea registrilor interni ai circuitului 8259A
Registrul IMR (Intrerrupt Mask Register) poate fi citit oricand de la adresa A0=1. ex: IN AL, 81H
Registrii IRR (Intrerrupt Request Register) si ISR (In Service Register) pot fi cititi daca P = 0.
Selectarea unuia din cei doi registri se realizeaza astfel (in situatia in care A0=0):
RR |
RIS |
ACTIUNE |
Nu se intampla nimic |
||
Nu se intampla nimic |
||
Se citeste IRR |
||
Se citeste ISR |
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |