ELEMANIA
Z80 - Interrupt mascherabili
Interrupt mascherabili

Gli interrupt mascherabili  sono interruzioni che, come suggerisce il nome, si possono mascherare (cioè disabilitare). La richiesta di interrupt mascherabile viene inviata allo Z80 attraverso il piedino di ingresso INT (attivo basso). Il µP risponde a una richiesta di interrupt mascherabile attivando il piedino di uscita INTA (attivo basso).

Gli interrupt mascherabili possono essere disabilitati via software con l'istruzione

           DI    ; disabilita gli interrupt mascherabili

Viceversa è possibile abilitare questo tipo di interrupt con l'istruzione:

           EI    ; abilita gli interrupt mascherabili

Le istruzioni EI e DI agiscono sullo stato di un flip flop interno allo Z80 detto IFF (Interrupt Flip Flop) che vale zero se le interruzioni sono disabilitate e uno se sono abilitate. E' importante osservare che dopo l'esecuzione di un RESET hardware gli interrupt mascherabili sono disabilitati per default. Il programmatore dovrà quindi inserire l’istruzione EI tra le istruzioni che provvederanno all’inizializzazione del sistema.

Inoltre, quando viene attivata una richiesta di interrupt mascherabile (tramite INT), gli interrupt vengono automaticamente disabilitati (in pratica viene eseguita un'istruzione DI implicita).

Per mezzo delle istruzioni EI e DI si ha inoltre in generale la possibilità di imporre al µP, in certi momenti, di ignorare temporaneamente e poi riabilitare le richieste di interruzione (può capitare che ci si trovi nella condizione, ad esempio, di dover rispettare precisi limiti di tempo durante l'esecuzione di particolari parti di codice e dunque di voler disabilitare temporaneamente le interruzioni). In ogni caso EI e DI agiscono solo sugli interrupt mascherabili (essendo gli interrupt non mascherabili sempre abilitati).

L'istruzione di ritorno da un interrupt mascherabile nello Z80 si chiama RETI.

Esistono tre tipi di interruzioni mascherabili, detti modo 0, modo 1 e modo 2. La differenza tra i diversi tipi di interruzione dipende dalle modalità con cui lo Z80 riconosce il dispositivo richiedente e individua la subroutine corrispondente. Le tre diverse modalità di interruzione vengono attivate rispettivamente con le istruzioni IM0, IM1 e IM2:

           IM0    ; attiva il modo 0 di risposta agli interrupt mascherabili
           IM1    ; attiva il modo 1 di risposta agli interrupt mascherabili
           IM2    ; attiva il modo 2 di risposta agli interrupt mascherabili

 

Interrupt mascherabile di modo 0

Questo modo di funzionamento è stato inserito nello Z80 per garantire la compatibilità con un precedente microprocessore (8080) e viene usato raramente. In tale modalità di funzionamento il dispositivo che ha richiesto l'interrupt provvede ad inviare sul bus dati un byte che il µP interpreta come l'istruzione da eseguire in risposta all'interrupt.

Avendo un solo byte a disposizione non sono molte le istruzioni che ha senso far eseguire al µP in risposta all'interrupt. In pratica si usano sempre le istruzioni RST (restart) che effettuano un salto automatico a una fra locazioni prefissate e precisamente:

Istruzione Salta a Codice operativo
RST 0 0000h C7
RST 8 0008h CF
RST 10H 0010h D7
RST 18H 0018h DF
RST 20H 0020h E7
RST 28H 0028h EF
RST 30H 0030h F7
RST 38H 0038h FF

Ora, dato che tali indirizzi distano l'uno dall'altro di pochi byte, in genere in tali locazioni di memoria conterranno prevalentemente dei salti (JP nnnn) ad altri indirizzi dove si troverà la routine di gestione dell'interrupt vera e propria.

Questo tipo di gestione dell'interrupt può essere utile quando si hanno più dispositivi in grado di richiedere l'interrupt e si vuole un metodo relativamente semplice per gestirli (a ogni dispositivo viene assegnata una diversa RST).

Interrupt mascherabile di modo 1

Questo meccanismo è molto semplice e assomiglia alla gestione degli interrupt non mascherabili. Quando riceve una richiesta di interrupt e si trova in modo 1, lo Z80 risponde sempre eseguendo una RST 38h, cioè andando ad eseguire la routine di interrupt che si trova all'indirizzo 0038h in memoria. La figura seguente chiarisce meglio le operazioni eseguite dal µP in risposta a questo tipo di interruzione:

Più nel dettaglio la sequenza eseguita automaticamente dallo Z80 è questa:

1) L’istruzione corrente viene terminata e l’interruzione viene servita solo alla sua conclusione.

2) La sequenza di interruzione non viene eseguita se IFF indica che le interruzioni sono disabilitate (IFF=0).

3) Se le interruzioni sono abilitate, invece, il flip-flop IFF viene azzerato, disabilitando ulteriori interruzioni (questo è necessario perché la linea INT, che può essere ancora attiva nel momento in cui la routine di servizio viene eseguita, potrebbe causare una “ricorsione di interruzioni”).

4) L’indirizzo della successiva istruzione presente nel program counter (PC), viene salvato nello stack.

5) Il µP infine esegue un salto alla locazione predefinita 0038h, dove il programmatore avrà precedentemente allocato la routine di servizio.

La sequenza ora descritta ha una durata di 7 cicli di clock, di cui 6 utilizzati dal processore per il salvataggio nello stack dell’indirizzo di ritorno. Nel corso di questi 7 cicli, il processore avvisa l’esterno che ha accettato la richiesta di interruzione, attivando a livello basso l’uscita INTA.

 

Interrupt mascherabile di modo 2

Il modo di funzionamento 2 è quello che consente la gestione delle interruzioni nella maniera più efficiente. In questo caso, l' hardware esterno deve fornire allo Z80 le informazioni necessarie per individuare la periferica che ha fatto la richiesta e, di conseguenza, eseguire la routine di servizio corrispondente.

Tali informazioni consistono in un vettore (in pratica una parola binaria di di 8 bit, il cui bit meno significativo deve essere sempre 0), che rappresenta la parte meno significativa di un indirizzo. La parte più significativa dello stesso indirizzo si deve già trovare in un apposito registro interno (I) a 8 bit, precedentemente caricato da programma.

Con questi due byte (contenuto di I + vettore) la CPU forma un indirizzo (sempre pari), mediante il quale viene individuata una locazione di memoria, contenente (assieme a quella successiva) l’indirizzo di inizio della routine di servizio. L’area di memoria così indirizzata prende il nome di tabella degli indirizzi.

Il meccanismo è molto flessibile e potente, ma anche piuttosto complesso e non verrà approfondito ulteriormente in questa sede.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it