Personal computer/Mapping/Interfacce
Le interfacce di I/O permettono la comunicazione tra CPU e dispositivi periferici. Qualsiasi dispositivo di interfacciamento ha quindi due interfacce, una rivolta verso il bus di sistema e quindi standard, l'altra specifica per il dispositivo periferico e quindi dipendente dal tipo di unità.
Per quanto riguarda un'interfaccia ad 8 bit, considerando soltanto la parte rivolta verso il bus dati, saranno sicuramente presenti i pin:
+----------------+ <-> | D[0..7] | --> | CS* | --> | RD* | --> interfaccia verso la periferica --> | WR* | --> | A[0..n-1] | +----------------+ D[0..7] 8 bit dati CS* Chip Select Se basso l'interfaccia è stata indirizzata RD* Read Utilizza l'interfaccia in lettura WR* Write Utilizza l'interfaccia in scrittura A[0..n-1] n bit di indirizzo
RS 232
[modifica | modifica sorgente]8250 - Interfaccia Seriale
[modifica | modifica sorgente]8255 - Interfaccia Parallela
[modifica | modifica sorgente]L'interfaccia parallela 8255 gestisce tre porte bidirezionali (input/output) in 3 modalità di funzionamento: è quindi un'interfaccia programmabile. Dispone di 4 registri interni per lo scambio di:
- dati (un registro in ingresso ed uno in uscita)
- informazioni di controllo, programmazione (un registro)
- informazioni di stato
Avendo soltanto quattro porte, i bit di indirizzo sono due (A0 e A1), con le configurazioni:
A0 A1 0 0 Porta A 0 1 Porta B 1 0 Porta C 1 1 Registro di controllo
I pin di comunicazione del bus sono in tri-state, sia quando il CS* è al valore logico alto (è un segnale attivo basso), sia quando entrambi i segnali RD* e WR* sono alti.
Le tre modalità di funzionamento sono:
- Modo 0: Basic Input/Output La CPU legge/scrive sulle porte senza alcun meccanismo di sincronizzazione con l'unità periferica collegata all'interfaccia parallela.
- Modo 1: Strobed Input/Output La CPU si sincronizza al dispositivo periferico tramite un protocollo di handshake attraverso l'interrupt.
- Modo 2: Strobed Bi-directional I/O La comunicazione tra CPU e dispositivi è bidirezionale.
Tutte le tre porte possono essere programmate in modalità 0, mentre solo A e B possono esserlo in modalità 1. La porta C avrà sui bit da 4 a 7 (PC7-4) i segnali per la gestione del protocollo di handshake, se la porta A è in modalità 1; e sui bit da 0 a 3 (PC3-0) i segnali per la gestione del protocollo di handshake, se la porta B è in modalità 1.
Il registro di controllo conterrà una control word i cui bit sono:
D0 parte bassa della porta C 1 input 0 output D1 porta B 1 input 0 output D2 seleziona della modalità 0 mode 0 1 mode 1 D3 parte alta della porta C 1 input 0 output D4 porta A 1 input 0 output D5-D6 seleziona della modalità 00 mode 0 01 mode 1 1x mode 2 D7 mode set flag 1 active
Per cui, se volessimo programmare i pin “liberi” della porta C (lower) in input, la porta B in modo 1-output, i pin “liberi” della porta C (upper) in output, e la porta A in modo 0-input, avremo:
10010101.
PIC 8259 (Programmable Interrupt Controller)
[modifica | modifica sorgente]L'integrato 8259 riesce a gestire singolarmente fino a 8 richieste di interruzioni da dispositivi esterni (IR0..IR7),e fino a 64 con un utilizzo di altri 8 8259 in cascata.
+----------------+ --> | CS* IR0| <-- --> | A0 IR1| <-- --> | WR* IR2| <-- --> | RD* IR3| <-- <-> | D[0..7] IR4| <-- <-- | INT IR5| <-- --> | INTA* IR6| <-- --> | SP/EN* IR7| <-- --> | CAS[0..2] | +----------------+ D[0..7] 8 bit dati CS* Chip Select Se basso l'interfaccia è stata indirizzata RD* Read Utilizza l'interfaccia in lettura WR* Write Utilizza l'interfaccia in scrittura IR[0..7] Interrupt Request(riconoscimento richieste a livello o fronte) INT Interrupt verso il processore INTA* Interrupt Acknowledge SP/EN* In buffered mode lo programma a master o slave in unbuffered A0 Bit di indirizzamento CAS[0..2] Usati dal 8259 Master per selezionare l'8259 Slave (Per utilizzo in cascata)
Caratteristiche generali:
- L'8259 occupa due byte nello spazio di indirizzamento, utilizzati per la programmazione
- Possibilità i mascherare le richieste di interruzione dall'esterno
- Possibilità di modificare le priorità di gestione delle interruzioni dei dispositivi
- Possibilità di mettere in esecuzione e gestire più interruzioni contemporaneamente(Fully Nested Mode).
- L'8259 non ha il segnale di RESET ergo al riavvio della macchina rimane la sua programmazione interna (non una di default come nei normali dispositivi), deve essere necessariamente riprogrammato in fase di avvio del sistema insieme agli altri dispositivi se si vuole un comportamento diverso.
Funzionamento Interno:
All'interno l'8259 ha 3 registri da 8 bit non indirizzabili dal processore ma riservati per la gestione interna.
- IMR (Interrupt Mask Register) è utilizzato per mascherare le richieste di interruzione
- IRR (Interrupt Request Register) quando le richieste arrivano all' 8259 vengono campionate in questo registro
- ISR (In Service Register) in modalità normale EOI memorizza quale interruzione è eventualmente in servizio
- Priority Resolution che si occupa di gestire la corretta gestione tra i registri e risolvere i conflitti.
Programmazione del PIC:
I due byte di indirizzo, sono utilizzati per la programmazione dell'8259 con diverse parole di controllo le Initialization control word ICW1,ICW2,ICW3(master e slave),ICW4 e le operation control word OCW1,OCW2. La programmazione avviene in maniera sequenziale, la prima control word ha il bit4=1 e A0=0, l'8259 comincia così la riprogrammazione, le prossime saranno la ICW2, ICW3(se siamo in configurazione Master/Slave) e la ICW4. Le OCW1 e OCW2 sono utilizzate per il normale funzionamento, la prima stabilisce quali interrupt sono mascherati ovvero non vengono considerati e la seconda può modificare l'ISR e modificare la gestione delle priorità delle IR.
Per A0=0
- OCW2 conterrà una control word i cui bit sono:
D0-D2 Livello interessato D5-D7 0 0 1 EOI non specifico 0 1 1 EOI specifico al livello interessato 1 0 1 Rotazione su EOI non specifico 1 0 0 Rotazione su AEOI con set 0 0 0 Rotazione su AEOI con reset 1 1 1 Rotazione su EOI specifico [liv] 1 1 0 Set priorità [liv ] 0 1 0 N/C
Per A0=1
- ICW2 conterrà una control word i cui bit sono:
D0-D2 N/C D3-D7 contengono la parte alta dell'interrupt type (gli altri 3 vengono aggiunti in base all'interruzione)
- ICW4 conterrà una control word i cui bit sono:
D0 (sempre a 1 nei Pentium/Amd) D1 1 AEOI 0 EOI D2 0 Slave 1 Master D3 Buffered Unbuffered D4 0 Normal Mode 1 Special Fully Nested Mode D5-D7 0 sempre
- OCW1 conterrà una control word i cui bit sono:
D0-D7 Interrupt Mask
Gestione In Master Slave ....to be continued