ELEMANIA
Z80 - Polling post interrupt
Polling post interrupt

Quando ci sono molte periferiche in grado di richiedere un interrupt, la strategia che spesso viene adottata è quella di effettuare un polling dopo la richiesta di interrupt, per individuare da quale periferica proviene la richiesta.

Si consideri lo schema seguente:

Polling post interrupt

Qui abbiamo 8 pulsanti (P0-P7) collegati all'ingresso di interrupt tramite una porta NOR. In questo modo, quando uno qualsiasi dei pulsanti viene premuto, viene attivato l'ingresso di interrupt (attivo basso).

Si noti inoltre che i pulsanti sono collegati inoltre con i pin di una porta di input (IA nello schema in figura).

Il codice assembly per la gestione degli interrupt è il seguente:

JP main

ORG 038h    ; Inizio routine di servizio dell'interrupt
IN A,(0)      ; Legge il valore presente su IA (porta di indirizzo 0)
LD B,A        ; Salva il valore in B

aspetta:             ; Ciclo di attesa finché il pulsante non viene rilasciato

IN A,(0)
CP 0
JP NZ, aspetta

EI
RET

main:

LD SP,0
LD B,0
EI

ripeti:

LD B,0

ciclo:                ; Ciclo del programma principale

LD A,B       ; In base al valore letto da B salta a una diversa subroutine

CP 0         ; Se non c'è stato nessun interrupt, ripete il ciclo
JP Z, ciclo

CP 1
CALL Z,P0

CP 2
CALL Z,P1

CP 4
CALL Z,P2

CP 8
CALL Z,P3

CP 16
CALL Z,P4

CP 32
CALL Z,P5

CP 64
CALL Z,P6

CP 128
CALL Z,P7

JP ripeti

P0:

...
RET

P1:

...
RET

P2:

...
RET

......

Facciamo un rapido esempio. Se viene premuto il pulsante collegato col bit 2 (terzo bit, pulsante P2) della porta A, il valore che viene letto e salvato in B all'inizio della routine di servizio dell'interrupt è

00000100

cioè 4. Quando il pulsante viene rilasciato, il programma principale legge il valore di B e in base a tale valore chiama una routine (di nome P2) che svolgerà le funzioni del pulsante P2.

Si osservi l'azzeramento di B, in modo da evitare che la stessa subroutine venga chiamata più volte.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it