Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

8088 - Concetti fondamentali - ISTRUZIONI - INTERRUZIONI: 8259 - PPI 8255

fisica



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


Hits: 1938
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2025