Creeaza.com - informatii profesionale despre


Cunostinta va deschide lumea intelepciunii - Referate profesionale unice
Acasa » tehnologie » electronica electricitate
Circuitul pentru comanda prioritara a intreruperilor (8259A)

Circuitul pentru comanda prioritara a intreruperilor (8259A)




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

B7; B6; B5 trebuie inscrisi totdeauna cu 0 logic.

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

B4=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

B4=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







creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.