Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di computer » Il dispositivo USART

Il dispositivo USART




Visite: 1928Gradito:apreciate stela [ Medio appunti ]
Leggi anche appunti:

Il computer


IL COMPUTER ll personal computer (in italiano elaboratore personale),

Il dispositivo USART


Il dispositivo USART I campi relativi alla configurazione del dispositivo

La tecnologia DVD


La tecnologia DVD Il DVD si presenta come un comune compact disc da 12 cm di
immagine di categoria

Scarica gratis Il dispositivo USART

Il dispositivo USART


I campi relativi alla configurazione del dispositivo sono così codificati:

Name                    I8251USART

Type                      Id. assoluto nella configurazione (01->FF)

Address1               Indirizzo base device (deve essere pari)

Address2               Indirizzo base+1

BUS                      Identificatore di bus esterno a cui è connesso il device

COM1                  Identificatore dispositivo gestore delle interruzioni generate dall'oggetto

COM2                   Controllo linea Interruzione Rx

COM3                   Controllo linea Interruzione Tx

COM4                  xxyz: xx=id device connesso; y=0 connessione completa; y=1 connessione semplice;z=n.c.

Tabella 20

Tali dispositivi permettono:

di realizzare il collegamento di una periferica seriale (ad esempio una tastiera) ad un calcolatore,

di collegare due computer distanti attraverso una linea telefonica,

di convertire un dato dal formato parallelo a quello seriale e viceversa.

Il componente preso di riferimento per questa simulazione è l'USART Intel 8251A.. In Fig. 27 è mostrato il suo modello con i registri e le linee fisiche simulate.

Fig. 27-Modello del dispositivo USART

Per questo componente sono stati realizzati i registri e le posizioni dei bit nei registri aderenti al componente reale.

Generalità

L'interfaccia seriale da simulare è un componente periferico programmato dalla CPU per realizzare comunicazioni seriali di dati. Essa accetta i caratteri dalla CPU in formato parallelo e poi li converte in un flusso continuo di dati seriali per trasmetterli. Simultaneamente, esso può ricevere un flusso di dati seriali e convertirli nel formato parallelo per essere letti dalla CPU.

Il componente segnala alla CPU quando esso è pronto ad accettare un nuovo carattere da trasmettere e quando ha ricevuto un carattere che può essere letto dalla CPU stessa; quest'ultima può leggere lo stato completo dell'interfaccia in qualsiasi momento.

Altre caratteristiche importanti sono:

comunicazione di tipo sincrona o asincrona,

trasmettitore e ricevitore full duplex con doppia bufferizzazione,

caratteri da 5 ad 8 bit,

inserzione automatica dei caratteri di sincronismo,

rilevazione di errori di parità, di overrun e di framing.


Configurazione

In questo paragrafo saranno descritti i criteri per inserire il componente da simulare in una configurazione. La descrizione verterà sui collegamenti da realizzare tra il processore e l'interfaccia seriale e tra quest'ultima e un device.

Sarà infine mostrato come questi collegamenti sono creati nel nostro ambiente di simulazione.

In generale due dispositivi sono collegabili quando hanno i segnali d'ingresso e uscita compatibili tra loro. Ciò significa che le uscite di un dispositivo devono essere dello stesso tipo delle entrate dell'altro e viceversa, inoltre, deve essere possibile rispettare i protocolli di handshaking di entrambi i dispositivi.


Collegamento al processore

Le linee fisiche, che collegano, attraverso il sistema bus, l'interfaccia seriale al processore, sono mostrate sulla sinistra dello schema, in Fig. 27.

Il processore scambia i dati con il componente attraverso il bus dati e seleziona lo stesso mettendo sul bus indirizzi uno dei due indirizzi ad esso associati. Poi, un decodificatore di indirizzi, collegato al bus indirizzi, quando rivela uno degli indirizzi associati all'8259A, seleziona il componente attraverso la linea CS.

I registri interni sono selezionati dal bit meno significativo del bus indirizzo: A0; dai segnale di lettura-scrittura: RD e WR; oltre che dallo stato interno.

Un segnale sulla linea Reset riporta il componente nello stato iniziale cancellando tutti i suoi registri. Questo segnale può essere spedito sia dal processore che da un dispositivo esterno.

RxRDY e TxRDY sono due linee d'interruzione che trasmettono al processore o all'eventuale PICuna richiesta d'interruzione.

L'interruzione su RxRDY è inviata quando viene ricevuto un carattere in Receiver shift register ed è copiato in Data-in buffer register.

Su TxRDY, invece, l'interruzione viene inviata quando viene copiato il carattere dal Data-out buffer register in Transmitter shift register ed inizia la trasmissione.

Un esempio di collegamento dell'interfaccia seriale con un processore è mostrato in Fig. 28, dove sono presentate, del Motorola 68000, solo le linee coinvolte nel collegamento.

Fig. 28 Collegamento 8251A-MC68000

Collegamento ad un device

Sulla destra dello schema in figura 1 sono mostrate le linee fisiche che collegano l'interfaccia seriale ad un device. Le cinque linee poste più in alto vengono utilizzate per lo sviluppo del protocollo di handshaking ed il loro significato è fornito in Tabella 21.

Le altre due linee, TX e RX, sono utilizzate rispettivamente per trasmettere e ricevere i dati.

Le proprietà che deve possedere il componente che interfaccia la periferica seriale sono:

deve essere provvisto di linee compatibili alle seguenti 6 linee: DTR, DSR, RTS, CTS, TX ed RX, per una connessione piena con l'interfaccia seriale , altrimenti, se vogliamo realizzare una connessione parziale, deve disporre solo di linee compatibili a TX ed RX,

deve rispettare il protocollo di handshaking,

nel caso di comunicazione asincrona la trasmissione deve avere il formato presentato in Tabella 10.


Tabella 21-Segnali per lo sviluppo del protocollo di handshaking

In Fig. 30 sono mostrate le evoluzioni dei segnali di handshaking dell'interfaccia che trasmette i dati nel caso in cui dopo la trasmissione del messaggio non venga sconnesso il modem dalla linea.

Fig. 29 Formato frame della trasmissione asincrona


Fig. 30 Handshaking per la trasmissione Tx

Con riferimento all'esempio precedente sono mostrate in Fig. 31 le evoluzioni dei segnali di handshaking dell'interfaccia ricevente.

Fig. 31 Segnali di hanshaking dell'interfaccia Rx


Un esempio di connessione di due interfacce seriali è rappresentato in Fig. 32.

Fig. 32 Connessione completa fra dispositivi seriali

Oltre a questo tipo di connessione che citerò con l'aggettivo 'piena' è possibile simulare anche una connessione 'parziale', la quale coinvolge solo le linee RX e TX come è mostrato in Fig. 33.

Fig. 33-Connessione parziale fra dispositivi seriali

Collegamento software

Per realizzare, nel nostro ambiente di simulazione, le connessioni, tra l'interfaccia seriale e gli altri componenti della configurazione, dobbiamo specificare attentamente i parametri richiesti all'atto dell'inserimento del componente in una nostra configurazione.

Le azioni da eseguire per inserire questo componente sono:

a.  attivare il menù Edit dalla finestra principale;

b.  scegliere il comando Add Device;

c.  inserire i parametri nella finestra di configurazione;

d.  scegliere il pulsante OK per inserire il dispositivo nella configurazione.


I parametri presenti nella finestra Aggiungi Device mi permettono di gestire la connessione dell'interfaccia seriale con gli altri componenti della configurazione. Viene ora specificato il significato dei singoli parametri.

Nome Elemento è utilizzato per specificare il tipo di componente da inserire, nel nostro caso deve essere 'I8251USART'.

Identificatore deve essere un numero compreso tra 01 ed FF e viene utilizzato dal programma per riferirsi a questo dispositivo.

Indirizzo1 rappresenta l'indirizzo più basso per accedere al componente, in questo caso esso deve essere un numero pari.

Indirizzo2 definisce l'indirizzo più alto per indirizzare il componente, esso deve essere uguale ad Indirizzo1 + 1.

Questi ultimi due parametri permettono di definire per quali indirizzi il decodificatore d'indirizzi attiva la linea CS. Infatti, se l'indirizzo sul bus indirizzo è pari ad uno dei due, il componente viene selezionato, cioè l'operazione di lettura o scrittura è eseguita su un suo registro.

BUS determina l'Identificatore del bus a cui è connesso l'interfaccia seriale. Quindi, scegliendo per COM1 l'identificatore di un componente MMU/BUS si connettono le linee bus dati, A0, RD,WR e Reset, dell'interfaccia seriale, al bus suddetto.

COM1 definisce l'Identificatore del gestore delle interruzioni, cioè il componente (di tipo CPU o I8259PIC) a cui trasmettere le interruzioni.

COM2 viene utilizzato per specificare l'interruzione trasmessa al gestore delle interruzioni, quando viene ricevuto un carattere in Receiver shift register ed è copiato in Data-in buffer register, per essere letto dal processore. Delle quattro cifre esadecimali che definiscono COM2 la meno significativa individua la linea d'interruzione, la seconda definisce la priorità e le due più significative specificano il 'vector number' da trasmettere al processore che gestisce l'interruzione. Se le interruzioni sono gestite da un PIC, queste due cifre non devono essere specificate.

COM3 specifica l'interruzione inviata al gestore delle interruzioni, quando viene copiato il carattere dal Data-out buffer register in Transmitter shift register ed inizia la sua trasmissione. Le quattro cifre esadecimali hanno lo stesso significato di quelle di COM2.

E' chiaro, quindi, che nel nostro simulatore, l'insieme dei parametri COM1, COM2 e COM3, permettono di gestire la connessione delle linee d'interruzioni, RxRDY e TxRDY, con il processore o il PIC

COM4 viene impiegato per specificare il device a cui l'interfaccia seriale è connessa ed il tipo di connessione. Precisamente, le 2 cifre meno significative specificano l'Identificatore del Device a cui è connesso l'interfaccia seriale. La terza cifra può assumere il valore '0'per realizzare un collegamento pieno o '1'per uno parziale.

Quindi, COM4 consente di simulare la connessione delle linee di handshaking, di Tx e Rx, con un componente connettibile all'interfaccia seriale, cioè, che soddisfa le proprietà 1 e 2 descritte nel paragrafo precedente.



Una volta inserito il dispositivo nella nostra configurazione, se scegliamo il comando Create All dal menù Edit, saranno prodotte le finestre associate ai vari Chip presenti nella nostra configurazione. La finestra associata all'interfaccia seriale è quella in Fig. 34.

Fig. 34-La finestra dei registri del dispositivo USART

Modello di programmazione

I registri programmabili dell'interfaccia seriale sono quelli presenti in Fig. 34 con l'esclusione dei due shift register TSHIFT e RSHIFT.

Per accedere ad uno di questi 7 registri ad 8 bit occorre che l'indirizzo sia uguale a Indirizzo1 o Indirizzo2. La selezione dei registri in questo dispositivo avviene attraverso il bit meno significativo dell'indirizzo, il tipo di accesso e lo stato del sistema.

Il registro che contiene le informazioni relative al genere di trasmissione che vogliamo realizzare è stato chiamato MODE. Esso può essere accesso solo in scrittura, all'indirizzo dispari e quando l'interfaccia è stata appena resettata. Il significato dei bit nel registro MODE sono illustrati nella Tabella 22.


Tabella 22-Significato dei bit nel registro MODE

Se con il valore inserito in MODE abbiamo deciso di realizzare una trasmissione sincrona, la prossima scrittura all'indirizzo dispari ci permetterà di inserire il primo carattere di sincronismo nel registro SYNC1, invece , qualora abbiamo deciso che i caratteri di sincronismo devono essere due, dobbiamo effettuare una ulteriore scrittura all'indirizzo dispari per inserire il secondo carattere di sincronismo in SYNC2.

Dopo la scrittura nel registro MODE, se trasmettiamo in modo asincrono, o dopo l'inserimento del o dei caratteri di sincronismo, se, invece, trasmettiamo in modo sincrono, ogni ulteriore accesso in scrittura all'indirizzo dispari viene eseguito nel registro CNTRL, il quale controlla il funzionamento dell'interfaccia seriale.

Il significato dei bit nel registro CNTRL sono illustrati nella Tabella 23.

Ovviamente, se resettiamo il componente, la sequenza di scrittura nei vari registri citati si ripete iniziando dal registro MODE.


Nel registro DATIN viene copiato il carattere che è stato ricevuto in RSHIFT per essere letto dal processore. DATIN è accessibile solo in lettura all'indirizzo pari. Un accesso in lettura in esso azzera il bit 1 di STATUS.

Tabella 23-Significato dei bit nel registro CNTRL


Nel registro DATOUT viene scritto dal processore il carattere che deve essere copiato in TSHIFT per essere trasmesso. DATOUT è accessibile solo in scrittura all'indirizzo pari; un tale tipo di accesso azzera il bit 0 di STATUS.

I registri RSHIFT e TSHIFT sono degli shift register non accessibili, ma vengono utilizzati dall'interfaccia per effettuare rispettivamente la trasformazione del formato serie/parallelo in ricezione e parallelo/serie in trasmissione.

Nel registro STATUS sono contenute informazioni sull'interfaccia che possono essere utilizzate dal programma che è in esecuzione; esso è accessibile in lettura all'indirizzo pari. Il significato dei bit nel registro STATUS sono illustrati nella Tabella 24.


Si riscontra un errore di parità, quando il numero di '1'nei bit d'informazione più il bit di parità non corrisponde al tipo di parità prevista.

Tabella 24-Significato dei bit nel registro STATUS

Un errore di overrun si verifica quando viene ricevuto un nuovo dato in DATIN, prima che il precedente sia stato letto dal processore, oppure quando il processore inserisce il prossimo carattere in DATOUT, prima che venga completamente trasmesso il dato precedente.

Un errore di framing si riscontra quando in una trasmissione asincrona il ricevitore si aspetta di rilevare un bit di stop e, invece, rileva uno zero.

Un quadro riassuntivo sugli indirizzamenti dei vari registri è mostrato in Tabella 25.



il registro che viene selezionato dipende dallo stato del sistema.

Tabella 25-Indirizzamento dei registri dell'interfaccia seriale


Programmazione

Prima di iniziare una comunicazione, appena dopo aver resettato l'interfaccia, dobbiamo scrivere un byte all'indirizzo dispari, che ci permette di accedere al registro MODE, per determinare il tipo di comunicazione che vogliamo effettuare (sincrona o asincrona) e il formato del carattere (numero di bit d'informazione, bit di parità, tipo di parità, numero di bit di stop per comunicazione asincrona e numero di caratteri di sincronismo per comunicazione sincrona).

Se la comunicazione è sincrona, dobbiamo scrivere, sempre all'indirizzo dispari, i caratteri di sincronismo previsti in SYNC1 ed eventualmente in SYNC2.

I prossimi accessi in scrittura all'indirizzo dispari ci permettono di accedere in CNTRL e, quindi, di abilitare il trasmettitore e/o il ricevitore, di attivare le linee di handshaking RTS e DTR, di cancellare i bit d'errore nel registro STATUS. Inoltre se l'interfaccia , in una comunicazione sincrona, è stata abilitata a ricevere, deve essere fissato ad 1 il bit 7 di CNTRL per iniziare la ricerca dei caratteri di sincronismo.

Se la comunicazione, invece, è asincrona, dopo aver caricato MODE, eseguendo una scrittura all'indirizzo dispari si accede direttamente a CNTRL. Essa ci permette di effettuare le stesse azioni descritte per la comunicazione sincrona tranne l'inserimento nel modo 'hunt'.

In entrambi i casi da questo momento in poi, tutti gli accessi in scrittura all'indirizzo dispari selezionano il registro CNTRL. In ogni istante è , comunque, possibile resettare il componente ponendo ad 1 il bit 6 di questo registro.

Esempi di sequenze di inizializzazione dell'interfaccia seriale sono mostrati nelle Tabella 26 e Tabella 27. In entrambi gli esempi si presuppone che A0 sia stato precedentemente caricato con l'indirizzo più basso associato all'interfaccia seriale.

move.b      #$5d,1(A0)

move.b      #$37,1(A0)

Tabella 26

In Tabella 26 la prima istruzione, scrivendo in MODE,

imposta la trasmissione come di tipo asincrona,

fissa il numero di bit d'informazione ad 8,

abilita la presenza del bit di parità dispari,

fissa ad 1 il numero di bit di stop.

La seconda istruzione scrive nel registro CNTRL, essa

cancella i bit d'errore nel registro STATUS,

abilita il trasmettitore ed il ricevitore,

attiva i segnali di handshaking DTR ed RTS.

move.b      #$84,1(A0)

move.b      #$16,1(A0)

move.b      #$b7,1(A0)

Tabella 27

La prima istuzione in Tabella 27, scrivendo in MODE,

imposta la trasmissione come di tipo sincrona,

fissa il numero di bit d'informazione a 6,

disabilita la presenza del bit di parità,

fissa ad 1 il numero dei caratteri di sincronismo.

La seconda istruzione memorizza il carattere di sincronismo nel registro SYNC1, il carattere scelto è pari a 16 esadecimale.

L'ultima scrittura avviene nel registro CNTRL, essa

cancella i bit d'errore nel registro STATUS,

abilita il trasmettitore ed il ricevitore,

abilita la ricerca dei caratteri di sincronismo,

attiva i segnali di handshaking DTR ed RTS.

Questo componente permette di realizzare operazioni di I/O sia in modo programmato che attraverso interruzioni.

In entrambi i casi, se desideriamo leggere i caratteri ricevuti, dobbiamo ogni volta controllare che i bit 3, 4 e 5 (questo solo per comunicazione asincrona) del registro STATUS siano pari a zero, cioè che non vi sia stato nessun errore nella trasmissione del carattere.

Nell'eseguire operazioni di I/O in modo programmato deve essere continuamente esaminato il valore di uno dei due bit meno significativi di STATUS.

In particolare, se vogliamo trasmettere un carattere, prima di inserirlo nel registro buffer DATOUT, dobbiamo verificare che il bit 0 sia pari ad 1, assicurandoci, in questo modo, che il carattere precedentemente inserito in DATOUT  sia stato già trasferito in TSHIFT, evitando così un errore di overrun.

Invece, quando intendiamo leggere un carattere dal registro buffer DATIN, dobbiamo verificare che il bit 1 sia pari ad 1, questo significa che il carattere ricevuto in RSHIFT è stato trasferito in DATIN. Qualora il carattere non venga letto ed un nuovo carattere viene ricevuto, esso viene trasferito in DATAIN cancellando il carattere precedente e, quindi, causando un errore di overrun.

In alternativa le operazioni di I/O possono essere realizzate con l'ausilio delle interruzioni specificate nei parametri COM2 e COM3. La routine associata alla prima interruzione deve assicurarsi di eventuali errori nella ricezione e quindi leggere il carattere da DATIN, mentre, quella associata all'interruzione specificata in COM3 deve provvedere a scrivere in DATOUT il prossimo carattere da trasmettere.

Il comportamento.

In questo paragrafo verrà descritto il comportamento del dispositivo nei vari modi di funzionamento facendo implicito riferimento che le interruzioni vengono inviate al gestore delle interruzioni specificato in COM1 e che le linee di handshaking e le linee di ricezione e trasmissione dati sono collegate al device specificato in COM4.

Dato che la frequenza del segnale di clock applicato all'interfaccia seriale è almeno 30 volte inferiore a quella applicata al processore, bisogna ridurre la frequenza di clock, simulata, applicata al modulo che simula l'interfaccia seriale.

Questo può essere realizzato con le seguenti operazioni:

attivare il menù Device dalla finestra principale;

scegliere il comando Speed;

inserire un valore maggiore di uno nella finestra che appare.

Maggiore sarà il valore inserito più bassa sarà la frequenza del segnale di clock applicata all'interfaccia. Il valore inserito indica dopo quanti colpi di clock, applicati al processore, viene mandato uno all'interfaccia.

Ovviamente, i colpi di clock cui faremo riferimento successivamente saranno quelli applicati all'interfaccia seriale e non al processore.

Trasmissione asincrona

Il trasmettitore è pronto a trasmettere solo dopo la sua abilitazione e dopo aver ricevuto i segnali DSR e CTS; tuttavia, fino a quando non viene inserito un carattere in DATOUT, sarà trasmesso il valore '1'per ogni colpo di clock.

Quando scriviamo un carattere in DATOUT, viene azzerato il bit 0 di STATUS, poi al prossimo impulso di clock:

il valore in DATOUT viene copiato in TSHIFT,

viene fissato ad 1 il bit 0 di STATUS,

viene inviata un'interruzione sulla linea specificata in COM3 ,

infine viene trasmesso un bit '0', detto bit di start.

Successivamente per ogni impulso di clock viene trasmesso il bit 0 di TSHIFT e contemporaneamente il contenuto di questo registro viene shiftato di una posizione verso destra. Questo comportamento continua fin quando non vengono trasmessi tutti i bit d'informazione previsti in MODE. Se il carattere contiene più bit di quelli da noi previsti, allora i bit in eccesso non saranno presi in considerazione.

Il prossimo bit ad essere trasmesso, se esso è stato richiesto in MODE, è il bit di parità, con il giusto tipo di parità, altrimenti viene trasmesso un bit '1' citato come bit di stop. Se in MODE sono stati fisssati due bit di stop, al prossimo colpo di clock verrà trasmesso un'altro '1' riportandoci nello stato iniziale.

Se nel frattempo non è stato inserito un nuovo carattere in DATOUT, sarà trasmesso un '1' per ogni successivo colpo di clock.

Trasmissione sincrona

Dopo aver impostato la trasmissione come di tipo sincrona , dopo aver abilitato il trasmettitore e ricevuto i segnali DSR e CTS, il trasmettitore è pronto a trasmettere, ma fin quando non viene inserito un carattere in DATOUT, verrà posto ad 1 il bit 3 di STATUS e saranno trasmessi in continuazione i caratteri di sincronismo.

Precisamente il prossimo impulso di clock produce le seguenti azioni:

copia del valore di SYNC1 in TSHIFT,

trasmissione del bit 0 di TSHIFT,

shift verso destra di una posizione del valore in TSHIFT.

Successivamente per, ogni impulso di clock, vengono ripetute le ultime due operazioni fino alla completa trasmissione degli otto bit del primo carattere di sincronismo. Se deve essere trasmesso anche il secondo carattere di sincronismo, tutte le operazioni sono ripetute, con la differenza che in TSHIFT viene caricato SYNC2 invece che SYNC1.

Se, nel frattempo, non è stato caricato in DATOUT nessun carattere, viene posto ad 1 il bit 3 di STATUS e vengono trasmessi di nuovo i caratteri di sicronismo previsti. In generale questo avviene ogni volta che il trasmettitore viene a trovarsi nella condizione di underrun.

Quando scriviamo un carattere in DATOUT viene azzerato il bit 0 di STATUS e al prossimo impulso di clock viene:

copiato il valore di DATOUT in TSHIFT,

posto ad 1 il bit 0 di STATUS,

azzerato il bit 3 di STATUS,

inviata un'interruzione sulla linea specificata in COM3,

trasmesso il bit 0 di TSHIFT,

shiftato verso destra di una posizione il valore in TSHIFT.

Le due ultime operazioni vengono ripetute ad ogni impulso di clock fin quando non vengono trasmessi tutti i bit d'informazione previsti in MODE. Anche in questo caso, se il carattere contiene più bit di quelli da noi previsti, i bit in eccesso non saranno presi in considerazione.

Il prossimo bit ad essere trasmesso, se esso è stato richiesto in MODE, è il bit di parità, con il giusto tipo di parità.

Se, nel frattempo, non è stato inserito un nuovo carattere in DATOUT, il trasmettitore viene a trovarsi nella condizione di underrun e quindi verrà posto ad 1 il bit 3 di STATUS e verranno trasmessi di nuovo i caratteri di sicronismo previsti.

Ricezione asincrona

Quando il ricevitore è stato abilitato ed è stato attivato il segnale DSR, esso è pronto a ricevere.

Se viene ricevuto un dato sulla linea RX, esso è inserito sempre nel bit più significativo di RSHIFT, dopo che quest'ultimo è stato shiftato di una posizione verso destra.

Il ricevitore inizia a considerare i bit in arrivo come bit d'informazione solo quando riceve il bit di start.

Una volta ricevuto l'ultimo bit d'informazione del carattere trasmesso, il valore in RSHIFT viene shiftato di un numero di posizioni verso destra pari a otto meno il numero di bit d'informazioni trasmesso, in modo da spostare il carattere al limite destro di RSHIFT.

A questo punto viene copiato il dato di RSHIFT in DATIN e se il bit 1 di STATUS è uno, cioè se il carattere ricevuto prima non è stato letto dal processore, viene segnalato un errore di overrun ponendo il bit 4 di STATUS ad uno.

Il prossimo bit ricevuto se presente è il bit di parità, se viene scoperto un errore di parità, esso viene segnalato ponendo ad uno il bit 3 di STATUS.

Successivamente il ricevitore si aspetta uno o due bit di stop, se, invece, viene ricevuto uno zero, esso segnala un errore di framing ponendo ad uno il bit 5 di STATUS.

Quando viene ricevuto l'ultimo bit di stop viene posto ad uno il bit 1 di STATUS ed è inviata un'interruzione del tipo specificata in COM2.

Quando poi il processore preleva il dato da DATIN il bit 1 di STATUS viene azzerato.

Ricezione sincrona

Anche in questo caso il ricevitore è pronto a ricevere, se esso è stato abilitato ed è stato attivato il segnale DSR.

Se viene ricevuto un dato, esso è inserito sempre nel bit più significativo di RSHIFT dopo che quest'ultimo è stato shiftato di una posizione verso destra.

Le differenze con la ricezione asincrona sono che non esistono nè bit di start, nè bit di stop e che, se il ricevitore è nello stato hunt, esso ricerca non i bit d'informazione ma i caratteri di sincronismo. Quando riconosce i caratteri di sincronismo memorizzati all'inizio in SYNC1 ed eventualmente in SYNC2, esso azzera il bit7 di CNTRL, il quale fa terminare la ricerca, e pone ad uno il bit 6 di STATUS.

Una volta ricevuto tutti i bit d'informazione e l'eventuale bit di parità e dopo aver segnalato i possibili errori di overrun e di parità, in modo identico a quanto visto per il ricevitore asincrono, viene posto ad uno il bit 1 di STATUS ed è inviata un'interruzione del tipo specificata in COM2.

Anche per la ricezione sincrona, quando il dato è prelevato dal processore da DATIN, viene azzerato il bit 1 di STATUS.


Scarica gratis Il dispositivo USART
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...