Personal computer/Mapping/Interfacce

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search
Personal Computer
Desktop computer clipart - Yellow theme.svg
categoria · Sviluppo · modifica

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]

8250 - Interfaccia Seriale[modifica]

8255 - Interfaccia Parallela[modifica]

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]

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