![]() | ![]() |
|
|
INDICE
1.1 Concetti fondamentali.......... ..... ...... ......................pag
1.2 Architettura.......... ..... ...... .......... ..... ...... ..........pag
1.3 Organizzazione della memoria.......... ..... ...... ........pag
ISTRUZIONI
2.1 Ciclo generale di un' istruzione.......... ..... ...... ........pag
2.2 Generazione dell' indirizzo di un' istruzione...................pag
2.3 Metodi di indirizzamento.......... ..... ...... ..................pag
INTERRUZIONI
3.1 Cos' è un' interruzione?.......... ..... ...... .....................pag
3.2 Interruzioni mascherabili, non mascherabili...................pag
3.3 Interruzioni interne a 1 o 2 byte.......... ..... ...... .......pag
3.4 Ritorno da un' interruzione.......... ..... ...... ...............pag
3.5 Tabella delle interruzioni.......... ..... ...... ...................pag
4.1 P.I.C. 8259.......... ..... ...... .......... ..... ...... ..........pag
4.2 Architettura.......... ..... ...... .......... ..... ...... .......pag
4.3 Programmazione.......... ..... ...... .............................pag
Gestione delle priorità.......... ..... ...... ....................pag
5.1 P.P.I. 8255.......... ..... ...... .......... ..... ...... ..........pag
5.2 Architettura.......... ..... ...... .......... ..... ...... .......pag
5.3 Lettura sull' 8255.......... ..... ...... ..............................pag
5.4 Output dell' 8255.......... ..... ...... ............................pag
Registro di controllo.......... ..... ...... .......................pag
Modi 0 1 2.......... ..... ...... .......... ..... ...... ........pag
1.1 - CONCETTI FONDAMENTALI
I computer odierni possono essere suddivisi principalmente in quattro parti:
333f51d 333f51d 333f51d 333f51d
333f51d 333f51d 333f51d 333f51d 333f51d MEMORIA
333f51d 333f51d 333f51d 333f51d PRINCIPALE
333f51d 333f51d 333f51d SISTEMI
PROCESSORE 333f51d DI
CENTRALE 333f51d SUPPORTO
333f51d 333f51d 333f51d HARDWARE
333f51d 333f51d 333f51d 333f51d 333f51d DISPOSITIVI
333f51d 333f51d 333f51d 333f51d 333f51d I/O
333f51d 333f51d 333f51d 333f51d 333f51d
Il processore centrale è il cuore del sistema; preleva ed esegue istruzioni
che permettono la programmazione del computer.
L' hardware di supporto del sistema smista il flusso dei dati da / per il
processore centrale, inoltre, mantiene la traccia dell' interruzione, alimenta
un orologio usato per mantenere la data ed il giorno dentro il computer.
La memoria principale serve per memorizzare informazioni accessibili
direttamente dal processore centrale.
I dispositivi di I/O forniscono un interfacciamento tra il sistema e il mondo
esterno.
1.2 - ARCHITETTURA
Nel microprocessore 8088 i dati viaggiano tra C.P.U. (Central Processing
Unit ) e la memoria principale attraverso l' interfaccia di memoria.
I dati in arrivo destinati ad essere interpretati come istruzioni sono posti nella
coda della serie di byte di istruzione.
Il sistema di controllo dell' unità di esecuzione prende le istruzioni da questa
coda e le manda all' unità di esecuzione per essere interpretati ed eseguiti
Proprio mentre ciò avviene, l' unita' di interfaccia del bus incomincia a
riempire di nuovo la coda della serie di bytes di istruzioni.
Questo scema, detto a pipeline, serve ad assicurare che, quando la C.P.U.
ha finito di eseguire una istruzione, troverà un' altra istruzione pronta per
essere eseguita.
All' interno dell' unità di esecuzione c'è l' unita logico/aritmetica o A.L.U..
Questa componente è responsabile dell' esecuzione di tutti i calcoli
aritmetici e di tutte le comparazioni.
Oltre a produrre un risultato numerico, l' A.L.U. spesso manipola alcuni
indicatori (flag) per indicare lo stato del risultato.
1.3 - ORGANIZZAZIONE DELLA MEMORIA
La C.P.U. dell' 8088 ha 20 bit di indirizzo e un bus dati di solo 8 bit.
L' 8088 è essenzialmente un sistema a 8 bit che usa un microprocessore a
16 bit. Comunque, tutte le possibilità del software a 16 bit sono disponibili
anche nell' 8088.
ISTRUZIONI
2.1 - CICLO GENERALE DI UN' ISTRUZIONE
Il contatore di programma preleva un' istruzione dalla memoria che
immagazzina istruzioni e dati.
Ogni microprocessore opera in tre cicli che comprendono:
1-REPERIMENTO DELL' ISTRUZIONE (fetching)
I contenuti del contatore di programma sono posti nel bus indirizzi e
mandati alla memoria al momento opportuno. Il bus di controllo genera
allora un segnale di lettura della memoria. Quando la memoria riceve il
segnale di lettura, il dato contenuto in memoria all' indirizzo specificato è
posto nel bus dati del sistema.
Il microprocessore allora legge l' informazione dal bus dati e la scrive in
un registro interno chiamato Registro Istruzione (I.R.).
L' informazione letta nella C.P.U. è l' istruzione.
Possiamo dire che l' istruzione è stata reperita dalla memoria
2-DECODIFICA DELL' ISTRUZIONE;
L' unità di controllo del microprocessore decodifica l' istruzione che c'è
nell' I.R. e genera una corretta sequenza di segnali interni ed esterni per
eseguirla. La C.P.U. impiega un certo tempo, normalmente un periodo di
clock, per decodificare un' istruzione e decidere logicamente che azione
compiere.
3-ESECUZIONE DELL' ISTRUZIONE.
Dopo che la C.P.U. ha decodificato l' istruzione compie una serie di
azioni dettate dall' istruzione. Alcune istruzioni richiedono compiti
semplici, cosi' ci vuole poco tempo per eseguirle; altre richiedono che 333f51d
avvengano diverse azioni, per cui richiedono molto tempo. La velocità
di esecuzione per un' istruzione e' generalmente espressa dal numero
totale di cicli clock richiesti per il suo completamento.
2.2 - GENERAZIONE DELL' INDIRIZZO DI UN' ISTRUZIONE
Tutti i registri interni all' 8088 sono larghi 16 bit, tuttavia il bus fisico di indirizzo
della C.P.U. è largo 20 bit : questo significa che deve essere usato piu' di uno
dei registri interni della C.P.U. per generare un indirizzo fisico di 20 bit.
I due registri usati per l' indirizzo di un' istruzione sono l' I.P. (registro del punta-
tore all' istruzione) e il C.S. (registro del segmento codice).
Questi due registri sono combinati in modo speciale per generare l' indirizzo
completo di 20 bit.
L' equazione che descrive come questi 2 registri di 16 bit sono combinati:
333f51d 333f51d indirizzo 20 bit=(16 x C.S.) + I.P.
ESEMPIO :
C.S.= 1000h
I.P.= 0414h
indirizzo 20 bit=(16 x 1000h)=10000h [spostato (shift) a sinistra di 4 bit]+ 0414h=
=10414h
L' indirizzo risultante è l' indirizzo della memoria dal quale la nuova istruzione
sarà presa. Il registro I.P. è chiamato OFFSET , il registro C.S. x 16 indica l' indi-
rizzo di partenza o SEGMENTO, della memoria da cui l'offset è calcolato.
Cioè indica l' indirizzo di partenza del segmento di memoria che contiene i
codici delle istruzioni; da qui il nome di registro di segmento codice.
La seguente figura mostra il diagramma a blocchi, illustrante il metodo di
calcolo dell' indirizzo di 20 bit di un' istruzione.
Ogni indirizzo generato dall' 8088 usa uno dei 4 registri segmento.Questo
registro segmento è poi spostato (shiftato) a sinistra di 4 bit prima di essere ad-
dizionato al valore dell' offset. Il valore dell' offset è calcolato mediante l' ad-
dizione dei registri interni. L' istruzione nella C.P.U. specifica quali registri interni
sono usati per generare l' offset. E' da notare che un registro segmento non è
mai usato nel calcolo di un valore di offset per lagenerazione di un indirizzo.
2.3 - METODI DI INDIRIZZAMENTO
2.3.1 INDIRIZZAMENTO IMMEDIATO
Nel modo di indirizzamento immediato l' operando appare nell' istruzione.
Un' istruzione immediata è ad esempio quella che muove un valore costante
in un registro interno nel seguente esempio è AX:
MOV AX, 569
La costante 569 è caricata nel registro interno AX. Il numero 569 risiederà nei
byte di memoria che contengono l' istruzione.
2.3.2 INDIRIZZAMENTO A REGISTRO
Il modo di indirizzamento a registro indica che l' operando che deve essere
usato è contenuto in uno dei registri interni generali della C.P.U.. Nel caso dei
registri AX, BX, CX o DX questo registro può essere di 8 o16 bit.
Esempio :
MOV AX, BX
Questa istruzione copia il contenuto del registro BX nel registro AX.
Possiamo utilizzare anche registi ad 8 bit, ad esempio:
MOV AL, BL
Quando si usa l' indirizzamento a registro la C.P.U. effettua tutte le operazioni
internamente, cosi' non è necessario generare alcun indirizzo di 20 bit per
specificare l' operando.
2.3.3 INDIRIZZAMENTO DIRETTO
Il modo di indirizzamento diretto specifica completamente nell' istruzione la
locazione di memoria che contiene l' operando. In questo tipo di indirizza-
mento deve essere formato un indirizzo di 20 bit. Questo significa che all' in-
terno dell' 8088 avverrà qualche generazione di indirizzo.
Esempio:
MOV CX, COUNT
Il valore di count è una costante ed è usato come valore di offset nel calco-
lare un indirizzo di 20 bit. L' 8088 usa sempre un registro di segmentazione
quando calcola un indirizzo fisico.
Il registro usato per questa particolare istruzione ,in mancanza di direttive
specifiche, è il registro DS o registro del segmento dati
333f51d
DS è il segmento di default, cioè quello usato se non ne vengono specificati
altri. Tuttavia uno qualsiasi dei 4 valori dei registri di segmentazione può esse-
re usato, purchè nell' istruzione venga specificato il nome del registro da uti-
lizzare.
Ad esempio, supponendo di voler usare il registro ES piuttosto che DS dovrem-
mo specificare:
MOV CX, ES:COUNT
Il valore di ES sarà usato come valore del registro di segmentazione per cal-
colare l' indirizzo fisico di 20 bit e si dice che ES è il prefisso di OVERRIDE.
2.3.4 INDIRIZZAMENTO INDIRETTO A REGISTRO
Con il modo di indirizzamento a registro indice l' offset a 16 bit è contenuto in
un registro di bus o in un registro indice. Cioè l' indirizzo risiede nel registro BX
o in BP o in SI o in DI .
Esempio:
MOV AX, [SI]
Il valore binario di 16 bit contenuto nel registro SI è l' offset usato per calcola-
re l' indirizzo di 20 bit e verrà utilizzato unregistro di segmentazione per gene-
rare l' indirizzo finale. Il valore a 16 bit contenuto in SI è combinato con il va-
lore dell' appropriato segmento per consentire la generazione dell' indirizzo.
2.3.5 INDIRIZZAMENTO INDIRETTO A REGISTRO CON SPOSTAMENTO
Questo tipo di indirizzamento utilizza i due precedenti modi di indirizzamento.
L' offset di 16 bit è calcolato sommando il valore di 16 bit contenuto in un re-
gistro interno e una costante.
Ad esempio, possiamo usare DI come registro interno e il valore costante
COUNT come spostamento, dove COUNT è stato precedentemente definito
come un numero:
MOV AX, COUNT [DI]
Es.:
COUNT = 0378h
DI = 04FAh
l' offset a 16 bit sarà 0872h, cioè la somma di 0378h e 04FAh.
2.3.6 INDIRIZZAMENTO INDIRETTO A REGISTRO CON BASE E REGISTRO INDICE
Questo modo di indirizzamento usa la somma di due registri interni dell' 8088
per ottenere l' offset a 16 bit che deve essere usato nel calcolo dell' indirizzo
a 20 bit.
Esempi :
MOV , [BP] [DI], AX offset=BP+DI
MOV AX, [BX] [SI] offset=BX+SI
2.3.7 INDIRIZZAMENTO INDIRETTO A REGISTRO CON BASE + INDICE+ COSTANTE
Questo è il modo piu' complesso di indirizzamento.E' simile al precedente
ma ha una costante aggiunta alla somma finale di 16 bit.
Esempio:
MOV AX, COUNT [BX] [DI]
Questo modo di indirizzamento indica che l' offset specificato dalla somma
di DI+BX+COUNT è usato per spostare i dati dalla memoria al registro AX.
Es.:
DI= 0367h
BX=0790h
COUNT=0012h
L' indirizzo di offset a 16 bit sarebbe uguale a 7C09h, che è la somma di
0367h, 7890h e 0012h.
L' indirizzo completo di 20 bit è dato dal valore dell' equazione:
(16xDS)+7C09h. Se il registro DS è uguale a 3000h allora l' indirizzo completo
fisico a 20 bit sarà uguale a (16x3000h)+7C09h=37C09h.
INTERRUZIONI
3.1 - COS' E' UN' INTERRUZIONE?
Per essere informato di ciò che accade esternamente, il microprocessore
deve essere in grado di individuare le richieste per la sua attenzione.
ESEMPIO: la tastiera manda un segnale al microprocessore quando è stato
premuto un tasto. Il microprocessore riceve e decodifica il segnale.
Questo segnale è detto interruzione e il meccanismo di interruzione del
microprocessore è responsabile della risposta che viene data.
Le interruzioni possono avvenire in ogni momento e non sappiamo cosa
dovrà fare il microprocessore.
Deve essere resa possibile la disabilitazione del microprocessore dal
ricevere il segnale di interruzione e quando un segnale viene ricevuto, il
microprocessore deve poter salvare le informazioni necessarie per poter
riprendere in seguito il lavoro che stava facendo.
3.2 - INTERRUZIONI MASCHERABILI E NON MASCHERABILI
Nel seguente scema ci sono le tre linee principali di ingresso delle inter-
ruzioni nel microprocessore 8088: INTR, NMI, RESET.
333f51d 333f51d
333f51d
333f51d
Ciascuno di questi input può causare una richiesta di interruzione .
Inizieremo la nostra discussione dall' NMI che è l' ingresso delle richieste
di interruzione non mascherabili. Il termine "interruzione non mascherabile"
significa che questa interruzione deve essere sempre riconosciuta dall' 8088
appena è elettricamente possibile.
Dato che l'8088 ha un' interruzione non mascherabile, ne segue che ci deve
essere anche un ingresso per le interruzioni mascherabili. Questo è l 'ingresso
INTR.
Supponiamo che esternamente sia stata effettuata una richiesta di
interruzione NMI. Generalmente viene riconosciuta alla fine dell' attuale
ciclo di istruzione; cioè quando l' istruzione attualmente in esecuzione è
completa. Il tempo richiesto perché la C.P.U. risponda elettricamente a una
richiesta di interruzione è conosciuto come " Latenza di Interruzione".
L' effettiva quantità di tempo dipende da quanti cicli di clock mancano al
termine dell' istruzione che è attualmente in esecuzione.
Durante un' operazione NMI la prima cosa che avviene è che i flag
vengono memorizzati nell' area dello stack del sistema.
Questa azione salva il valore attuale di tutti i flag del sistema.
Poi la C.P.U. azzera l' I.F. (flag di abilitazione delle interruzioni) e perciò
disabilita qualsiasi interruzione dalla linea di ingresso INTR. Quando questo
flag è azzerato, tutte le richieste di interruzione dall'ingresso INTR sono
elettricamente ignorate.
Viene poi azzerato un flag speciale dell' 8088 chiamato T.F. (flag di trap).
Questo flag è usato quando l' 8088 è posto in modo "single step" (passo
singolo). Perciò, azzerando questo flag, si ha come conseguenza che l' 8088
non viene più usato in modo single step.
A questo punto la C.P.U. memorizza i registri CS e IP nello stack del sistema.
Infine la C.P.U. carica il registro IP con il valore a 16 bit che si trova all' indiriz-
zo 00008H. Il registro CS è poi caricato con il valore a 16 bit collocato all' in-
dirizzo 0000AH. Viene poi generato un nuovo indirizzo di memoria, usando i
registri CS ed IP appena caricati. Poi, la C.P.U. fa partire l'esecuzione del
codice individuato da questo nuovo indirizzo di memoria.
Riassumendo, i passi eseguiti quando la C.P.U. genera una richiesta NMI,
sono:
1 - Il registro FLAG è salvato nello stack del sistema;
2 - Viene disabilitato l' ingresso INTR;
3 - TF viene azzerato, non è possibile procedere in single step;
4 - Il registro CS viene salvato nello stack del sistema;
5 - Il registro IP viene salvato nello stack del sistema;
6 - Il registro IP viene caricato con i dati a 16 bit prelevati all' indirizzo di
memoria 00008H;
7 - Il registro CS viene caricato con i dati a 16 bit prelevati all'indirizzo di
memoria 0000AH;
8 - La C.P.U. va a prendere l' istruzione successiva dall'indirizzo a 20 bit gene-
rato con i nuovi valori dei registri CS ed IP.
A questo punto la C.P.U. sta eseguendo la routine di servizio di un' interruzio-
ne NMI.
Discutiamo ora l'ingresso INTR. Questo ingresso d' interruzione può essere lo-
gicamente abilitato e disabilitato attraverso il software. Quando questo in-
gresso è disabilitato, la C.P.U. non soddisfa nessuna richiesta esterna.
L' istruzione software che viene usata per disabilitare l'ingresso INTR è l' istru-
zione CLI (azzeramento del flag di abilitazione delle interruzioni).
Possiamo abilitare l' ingresso INTR alla C.P.U. usando l' istruzione STI (pone
uguale a 1 il flag d' interruzione).
Quando l' ingresso INTR viene preso in considerazione dalla C.P.U., viene ge-
generato un segnale esterno, chiamato riconoscimento dell' interruzione o
INTA (interrupt acknowledge). Tale segnale permette all' hardware del siste-
ma di mettere un valore ad 8 bit (tipo dell' interruzione) sul bus dati del siste-
ma. Di questi tipi, ce ne sono 256 differenti. La C.P.U. legge poi il tipo dell' in-
terruzione dal bus dati e computa l' indirizzo nella tabella delle interruzioni
per il tipo in questione. Questo viene fatto moltiplicando per 4 (bytes occu-
pati da CS ed IP) il numero del tipo letto dal bus dati del sistema.
Dopo questa operazione, i flag vengono salvati sullo stack del sistema e le
interruzioni vengono disabilitate. La C.P.U. salva poi i registri CS ed IP sullo
stack del sistema. Dopo questo, la C.P.U. carica i propri valori dei registri CS
ed IP dalle locazioni di memoria 000BCH - 000BFH.
Quando questi registri sono stati caricati, il microprocessore preleva la suc-
cessiva istruzione dall' indirizzo a 20 bit generato dei nuovi valori dei registri
CS ed IP.
Riassumendo, le operazioni eseguite dalla C.P.U. quando gestisce una ri-
chiesta INTR sono:
1 - Viene generato un segnale esterno di riconoscimento dell' interruzione;
2 - Viene letto dal bus dati del sistema il codice del tipo da 0 a 255;
3 - Il registro FLAG viene salvato nello stack del sistema;
4 - Vengono disabilitate le interruzioni ed il modo single step;
5 - I registri CS ed IP vengono salvati nello stack del sistema;
6 - Il registro IP viene caricato con i dati prelevati all' indirizzo di memoria
(tipo x 4 ) e (tipo x 4) + 1;
7 - Il registro CS viene caricato con i dati prelevati all' indirizzo di memoria
(tipo x 4) x 2 e (tipo x 4) + 3;
8 - La C.P.U. va a prendere l' istruzione successiva all'indirizzo di memoria a
20 bit generato dai nuovi valori dei registri CS ed IP appena caricati nel-
la tabella delle interruzioni.
Parliamo ora dell 'ingresso RESET.
Quando viene attivata la linea di ingresso RESET la C.P.U. comincia l' esecuzio-
ne in una ed una sola maniera. Questo permette una partenza corretta, una
ripartenza o un "power-up" del sistema.
In seguito alla richiesta di reset i registri della C.P.U. sono inizializzati nel seguen-
te modo:
FLAG 333f51d 333f51d = azzerato
PUNTATORE ALL' ISTRUZIONE = 0000h
REGISTRO CS 333f51d = FFFFh
REGISTRO DS 333f51d = 0000h
REGISTRO SS 333f51d = 0000h
REGISTRO ES 333f51d = 0000h
Basandosi su queste definizioni dei registri la prima istruzione verrà presa dalla
seguente locazione di memoria:
(CSx16) + IP=FFFF0h+0000h=FFFF0h
La prima locazione dopo il reset è la locazione assoluta FFFF0h nella parte alta
della memoria.
Le locazioni di memoria riservate per l' 8088 sono mostrate nella seguente figu-
ra:
3.3 - INTERRUZIONI INTERNE A 1 O 2 BYTES
Un' altra tecnica per generare le interruzioni è quella via software.
Usando speciali istruzioni software è possibile abilitare la C.P.U. a rispondere ad
ogni tipo di interruzione da 0 a 255
Un' istruzione software che genera un' interruzione è INT. Ci sono 2 modi di usare
questa istruzione particolare, come istruzione ad 1 byte o a 2 byte. Se si usa
un' istruzione INT a 1 byte questa è codificata come CCH.
Quando la C.P.U. esegue questa istruzione a 1 byte esattamente nello stesso
modo dell' ingresso INTR. Diversamente dall' ingresso INTR al microprocessore,
l' interruzione software non può essere disabilitata o mascherata.
Supponiamo di usare la versione a 2 byte dell' istruzione INT. Il primo byte sarà
codificato come CDH .
Il secondo byte sarà uguale ad un numero ad 8 bit compreso fra 0 e 255.
Questo numero definisce il tipo di interruzione che si vuole generare.
ESEMPIO: supponiamo di generare un' interruzione di tipo 96h. L' istruzione INT
di 2 byte verrà codificata come CD96h. L'indirizzo esadecimale nella tabella
delle interruzioni per l' IP sarà uguale a 4 x 96h=258h. Gli indirizzi 258h e 259h
conterranno il valore del registro IP per la routine di servizio dell' interruzione.
Gli indirizzi 25Ah e 25Bh conterranno il valore del registro CS per la routine di
servizio dell' interruzione.
3.4 - RITORNO DA UN' INTERRUZIONE
Quando la C.P.U. inizia la routine di servizio, i registri FLAG, CS e IP vengono sal-
vati. Queste sono essenzialmente le informazioni di cui ha bisogno la C.P.U. per
ritornare all' indirizzo che conteneva prima dell' interruzione.
Durante l' esecuzione di una routine di interruzione, possono essere cambiati i
valori di qualche registro interno. Per questo è importante salvare i valori origi-
nali di questi registri nello STACK.
La seguente figura mostra un tipico inizio di una routine di servizio di un' interru-
zione:
333f51d Inizio della routine di servizio dell' interruzione
333f51d PUSH AX salva il registro AX
333f51d PUSH BX salva il registra BX
333f51d PUSH CX salva il registro CX
333f51d PUSH DX salva il registro DX
333f51d Ora inizia il codice reale della routine di interruzione
MOV AX,NUM
Quando ha inizio una routine di servizio di un' interruzione tutte le altre interru-
zioni sono state disabilitate. Se si vuole che altre interruzioni vengano prese in
considerazione dalla C.P.U. mentre sta trattando questa interruzione, l' istruzio-
ne che pone uguale ad 1 il flag di abilitazione delle interruzioni (STI) dovrà esse-
re una delle prime istruzioni che viene eseguita nella routine di servizio dell 'in-
terruzione.
333f51d Inizio della routine di servizio dell' interruzione
333f51d STI 333f51d abilita nuovamente le interruzioni
333f51d PUSH AX salva il registro AX
333f51d PUSH BX salva il registra BX
333f51d PUSH CX salva il registro CX
333f51d PUSH DX salva il registro DX
333f51d Ora inizia il codice reale della routine di interruzione
333f51d MOV AX,NUM
Dopo aver finito il trattamento dell' interruzione per ritornare al programma
principale usiamo l' istruzione IRET. Quando questa istruzione viene eseguita,
i registri FLAG, IP e CS sono prelevati dallo stack. Prima di ritornare al program-
ma principale è importante assicurarsi che le interruzioni siano ancora abilitate
( se ciò è desiderato). Inoltre sarà necessario prelevare ogni registro interno che
era stato immesso nello stack durante la routine di servizio dell' interruzione.
Nella seguente figura mostriamo tutti i punti sopra analizzati:
333f51d Inizio della routine di servizio dell' interruzione
333f51d PUSH AX salva il registro AX
333f51d PUSH BX salva il registra BX
333f51d PUSH CX salva il registro CX
333f51d PUSH DX salva il registro DX
Ora inizia il codice reale della routine di interruzione
333f51d MOV AX,NUM
333f51d MUL AX,BX moltiplicazione senza segno
333f51d Un' altra parte della routine va qui
333f51d Fine della routine
333f51d POP DX
333f51d POP CX
333f51d POP BX
333f51d POP AX
333f51d STI abilita le interruzioni
333f51d IRET 333f51d ritorno dall' interruzione
3.5 - TABELLA DELLE INTERRUZIONI
Gli indirizzi di questa tabella, contenuta nella memoria convenzionale, vanno
da 00000h a 003FFh ed occupa in tutto 1Kb.
Gli indirizzi delle interruzioni sono cosi' suddivisi:
00-07 INTERRUPT DI SISTEMA (RESET, ERRORE DI PARITA')
08-0F GESTINE INTERRUZIONI DALL' ESTERNO
10-1F BIOS
20-2F DOS
40-FF LIBERI
4.1 - P.I.C. 8259
Il P.I.C. 8259 o programmable interrupt controller è un controllore di interrupt
programmabile.Può gestire l' arrivo di interrupt contemporanei o di uno singolo.
Riportiamo lo schema di collegamento tra il P.I.C. 8259 e la C.P.U.
4.2 - ARCHITETTURA
Il P.I.C. 8259 è formato dalle seguenti parti:
1- DB BUFFER : è l' interfaccia tra il bus esterno ed interno (amplifica e memoriz-
za il segnale). In uscita manda i dati alla C.P.U. e dunque ha bisogno di esse-
re amplificato, in ingresso solo alcune volte.
E' un buffer che serve a registrare le informazioni in transito, i dati sono i codici
delle interruzioni.
2- READY/WRITE LOGIC: serve a gestire la lettura e la scrittura verso il dispositivo
8259.
RD = 0 attivo
RD = 1 disabilitato
A0 dice su che registro andare a leggere o a scrivere
CS = 0 selezionato il dispositivo 8259
CS = 1 non selezionato il dispositivo 8259
3- BUFFER COMPARATOR: serve per collegare in cascata piu' 8259
4- CONTROL LOGIC: logica di controllo, genera il segnale di INT verso la C.P.U.
e riconosce il segnale INTA mandato dalla C.P.U..
Dà i segnali ai dispositivi interni in modo da abilitare e disabilitare i blocchi
( blocchi 2 e 3).
5- INTERRUPT REQUEST REGISTER: registro di richiesta degli interrupt.
Attraverso gli IRQx è collegato con i dispositivi esterni.
6- PRIORITY RESOLVER: decide la priorità nel caso ci siano più interrupt contem-
poranei.
7- INTERRUPT STATUS REGISTER: registro dello stato delle interruzioni.
Memorizza lo stato delle interruzioni, indica quindi se un interrupt è terminato.
8- INTERRUPT MASQUERABLE REGISTER: registro di mascheramento delle inter-
ruzioni. Serve per abilitare o disabilitare gli interrupt.
Se voglio mascherare l' interruzione devo mettere 1 in corrispondenza dell' in-
terrupt (IRQx) da mascherare.
4.3 - PROGRAMMAZIONE
Per la programmazione dell' 8259 utilizziamo le ICWx:
ICW1 è all' indirizzo A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 333f51d 333f51d 333f51d 1 C'è ICW4
8085 1 333f51d 0 Non c'è ICW4
333f51d 333f51d 333f51d 333f51d 1 assenza slave
333f51d 333f51d 333f51d 333f51d 0 presenza slave
333f51d 333f51d 333f51d 333f51d solo per 8085
333f51d 333f51d 333f51d 333f51d 1 funziona per livelli
333f51d 333f51d 333f51d 333f51d 0 funziona per transizione
ICW2 è all' indirizzo A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 333f51d
333f51d 333f51d 333f51d 0 0 0
333f51d ind. di partenza
333f51d degli 8 bit dell' 8259
ICW3 e' all'indirizzo A =1
MASTER
333f51d D7 D6 D5 D4 D3 D2 D1 D0
ogni bit indica se è collegato uno slave: 1 presenza slave in cascata
333f51d 333f51d 333f51d 0 assenza slave
SLAVE
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 0 0 0 0 0 codice
333f51d 333f51d 333f51d slave
ICW4 è all' indirizzo A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 0 0 0 333f51d 1 per 8086/8088
333f51d 333f51d 333f51d 333f51d 0 per 8080/8085
333f51d 333f51d 333f51d 333f51d 1 auto/EOI
333f51d 333f51d 333f51d 333f51d 0 EOI normali
333f51d 333f51d 333f51d 333f51d 10 buffer/slave
333f51d 333f51d 333f51d 333f51d 11 buffer/master
333f51d 333f51d 333f51d 333f51d 1 modo speciale pienamente
333f51d 333f51d 333f51d 333f51d nidificato
333f51d 333f51d 333f51d 333f51d 0 modo normale pienamente
333f51d 333f51d 333f51d 333f51d specificato
4.4 GESTIONE DELLE PRIORITA'
per la gestione delle priorità di interrupt contemporanei utilizziamo le OCWx:
OCW1 A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d maschera l' interruzione : 1 mascherata
333f51d 333f51d 333f51d 0 non mascherata
OCW2 A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d
333f51d gestione 0 0 scrivo qual'è il
333f51d EOI 333f51d primo ad avere
333f51d 333f51d la priorità
OCW3 A
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 0 per 0 1 333f51d lettura/registrazione 10 IRR
333f51d masch. 333f51d 333f51d 333f51d 11 ISR
333f51d spec. 333f51d
333f51d 333f51d 333f51d 333f51d 1 polling
333f51d 333f51d 333f51d 333f51d 0 no polling
5.1 - P.P.I. 8255
Il P.P.I. 8255 è un'interfaccia programmabile di tipo parallelo infatti i dati che
passano attraverso l' interfaccia viaggiano in parallelo. Il trasferimento dei dati
viene fatto un byte alla volta.
E'un' interfaccia che va bene per il collegamento di più periferiche.
Riportiamo qui sotto lo scema di collegamento tra il P.P.I 8255 e l' 8086
5.2 - ARCHITETTURA
Il P.P.I. 8255 è formato dalle seguenti parti:
1- DB BUFFER : è l' interfaccia tra il bus esterno ed interno,amplifica il segnale
quando l' informazione va verso l' esterno.
Memorizza solo temporaneamente i dati.
2- READY/WRITE CONTROL LOGIC: logica di controllo, l' 8255 deve capire
quando deve leggere o scrivere.
RD = 0 il microprocessore deve leggere sull' 8255
RD = 1 l' 8255 vuole fare una lettura sul microprocessore
WR = 0 il microprocessore scrive sull' 8255
WR = 0 l' 8255 scrive sul microprocessore
A bit meno sisnificativi del bus indirizzi, servono per identificare i registri
A interni dell' 8255.
CS = 0 seleziona l' integrato 8255.
CS = 1 non seleziona l' 8255.
RESET = per resettare/inizializzare l' 8255.
3- CONTROLLO GRUPPO A: controllo porta PA e parte alta di PC.
4- CONTROLLO GRUPPO B: controllo porta PB e parte bassa di PC.
5-6-7 : porte.
5.3-LETTURA SULL' 8255
Sull' 8255 è possibile leggere gli ingressi
333f51d 333f51d 333f51d Quando iul segnale va a 0,
333f51d 333f51d 333f51d comincia la lettura e il dato
333f51d 333f51d 333f51d fluisce verso il bus dati.
333f51d 333f51d 333f51d La stessa cosa avviene per la
333f51d 333f51d 333f51d scrittura.
333f51d 333f51d 333f51d
Abbiamo A e A che sono i bit meno significativi del bus indirizzi:
333f51d 333f51d 333f51d L' 8255 ha 4 registri interni
333f51d 333f51d 333f51d (4 indirizzi di registri)
333f51d 333f51d 333f51d Il registro di scrittura è uguale
333f51d 333f51d 333f51d a quello di lettura.
333f51d A7 A6 A5 A4 A3 A2 A1 A0
Le combinazioni possibili sono 64 (cioè 2^6): possiamo avere 64 dispositivi 8255.
Ma se abbiamo un 8255 e un 8259 che indirizzi dobbiamo dargli?
00h
01h
02h riservati all' 8255
03h
04h
05h riservati all' 8259
06h
07h liberi
5.4-OUTPUT DELL' 8255
MODO 0
333f51d PA PB PCH PCL
333f51d I I I I
I I I O 333f51d 16 COMBINAZIONI
333f51d 333f51d 333f51d 333f51d 1 0 0 1 1 0 1 1 0
333f51d O O O O 333f51d 1 0 0 0 0 0 0 0
MODO 1
PA
PB
PC per gestire l' input o l' output delle porte PA E PB.
1 0 1 0 1 X X X
333f51d 333f51d
OBFA output buffer full (serve ad avvisare le periferiche che l' 8255 ha
un dato trasferire )
ACKA acknowledge input (informa l' 8255 che il dato è stato accettato)
Operazioni per l' output:
1 C.P.U. scrive sull' 8255 il dato
2 Il dato viene mandato dall' 8255 a PA
3 8255 setta l' OBFA.
4 La periferica accetta PA
5 La periferica imposta ACKA
6 L' 8255 produce l' INTRA che va nell' 8259 che con la solita routine scrive il
dato.
Questo è un sistema di tipo polling in quanto è la C.P.U. che scrive il dato
nell' 8255.
La tecnica da usare migliore sarebbe quella con l' INTR dove laC.P.U. scrive
il dato quando siamo sicuri che il dato successivo verrà spedito.
Esiste un o speciale registro per abilitare (oltre al registro dei flag e all' IMR)
o disabilitare le interruzioni provenienti dall' 8255: è l' INTEA (che è collegato
al PC6).
I 4 registri sono: PA
PB buffer
333f51d PC
333f51d CONTROLLO
5.5 - REGISTRO DI CONTROLLO
333f51d D7 D6 D5 D4 D3 D2 D1 D0
333f51d 333f51d PB=1 input
333f51d 333f51d PB=0 output
333f51d GRUPPO A 333f51d 333f51d GRUPPO B
333f51d 00 modo 0 PCH=1 input 0 modo 0
333f51d 01 modo 1 PCH=0 output 1 modo 1
333f51d 10 modo 2
333f51d 333f51d PA=1 input
333f51d modo di PA=0 output
programmazione
333f51d =1 imposto 8255
333f51d =0 set/reset singoli bit
ESEMPIO (programmazione)
PA input
PB output
PCL input 333f51d 0 0 0 1 0 0 0 1
PCH output
MODO A 0
MODO B 0
ESEMPIO
PA input 333f51d 333f51d 333f51d PA 1B0 1F0
PB input 333f51d 333f51d 333f51d PB 1B1 1F1
PCL input 333f51d 0 0 1 1 1 0 1 1 PC 1B2 1F2
PCH input 333f51d 333f51d CONTROLLO 1B3 1F3
MODO A 1
MODO B 0 333f51d scrivo 3B
333f51d 333f51d all' indirizzo 1B3
333f51d 333f51d 333f51d MOV AL,3Bh
333f51d 333f51d 333f51d OUT 1B3,AL
5.6 - MODI 0 1 2
MODO 0 BASE 333f51d input/output
MODO 1 STROBED input/output
MODO 2 BIDIREZIONALE
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025