|
INTRODUZIONE
In questa
tutorial analizzeremo il modulo USART (Universal
Synchronous Asynchronous Receiver Transmitter)
dei
microcontrollori configurato in maniera sincrona nelle due
funzioni di Master e di Slave e come si usa per trasferire i dati
da/verso i microcontrollori PIC. In primo luogo faremo una descrizione
generale del modulo USART introducendo i concetti di base.
Successivamente esamineremo l'uso del modulo USART nei MCU PIC
esaminando nei dettagli la comunicazione sincrona mplementata in essi.
Infine verrà mostrato un esempio di codice in cui saranno messi in
evidenza le parti di codice relative al master e allo slave. Nel
resto del tutorial saranno utilizzate alcuni termini di cui diamo il significalo:
settare: porre ad 1 un bit. resettare. porre a zero un bit.
USART
Il modulo USART presente
nella maggior parte dei micro di ultima generazione permette la
comunicazione seriale ( RS232, RS485) tra diversi dispositivi
tramite un bus a pochi fili ( generalmente due ) in cui viaggiano i dati
ed un eventuale clock di riferimento. La comunicazione seriale in genere
può essere di due tipi: asincrona e sincrona:
Nella modalita asincrona la trasmissione e ricezione avviene in maniera
non sincrona ovvero trasmettitore e ricevitore non sono sincronizzati
tra loro. La comunicazione avviene in modalità full duplex
(trasmissione e ricezione possono essere presenti contemporaneamente) in
quanto esiste una linea dati per la ricezione ( linea RX ) ed una linea
dati per la trasmissione ( linea TX) .
Nella comunicazione sincrona la trasmissione e la ricezione sono sincronizzati
da un clock di sistema presente su un linea CK dedicata. In tal caso la comunicazione
e' di tipo half-duplex: trasmissione e ricezione tra dispositivi non può
avvenire contemporaneamente in quanto la linea dati e' unica e deve essere
condivisa nelle fasi di trasmissione e di ricezione.
A tal proposito si richiede un arbitro che gestisca la comunicazione e
fornisca il clock di sistema . Il dispositivo che ha questo compito e'
detto MASTER. Questo oltre a gestire il bus può
trasmettere e ricevere. Tutti gli altri dispositivi che possono comunicare
con il master e che non possono fissare il clock ma solo riceverlo sono
detti SLAVE.
Di seguito una tabella che riassume per le diversi modalità, i
diversi ruoli e il tipo di comunicazione, e la composizione del bus.
| Modalità |
Ruolo |
Comunicazione |
Linea Dati |
Linea Clock |
| Asincrona |
- |
Full duplex |
separate (RX e TX) |
non presente |
| Sincrona |
Master |
Half duplex |
condivisa (DT) |
pilotata (CK) |
| Sincrona |
Slave |
Half duplex |
condivisa(DT) |
ricevuta (CK) |
Per entrambe le modalità
e' possibile definire la velocità con cui si trasferiscono i bit ( baud
rate), il numero dei bit trasmessi in un singolo frame, il numero di bit
di controllo ( start, stop e parità). Per esempio si puo avere una comunicazione
asincrona a 19200 baud, 8 bit, 1 stop, nessuna parità.
Oggetto di questo tutorial e' l'analisi e l'applicazione del modulo
USART presenti nei microcntrollori PIC a 8 bit nella modalità sincrona.
USART nei
PIC
Il modulo USART presente
nei microntrollori PIC a 8 bit permette l'implementazione di
comunicazioni asincrona e sincrona a diverse velocità, con numeri
di bit ( 8 0 9) e controllo tramite parità. Facendo riferimento al
micro 16F628A, i registri che permettono la configurazione e l'utilizzo
di questo modulo sono : TXSTA, RCSTA, SPBRG, TXREG
e RCREG assieme ai registri per la gestione degli interrupt
e quelli per la gestione dei pin di I/O. In particolare:
TXSTA : registro
di stato e di controllo per la trasmissione
RCSTA: registro di
stato e di controllo per la ricezione
SPBRG: registro
per la definizione del baud rate
TXREG: registro
dei dati da trasmettere
RCREG: registro
dei dati ricevuti
Per i dettagli sui singoli
bit dei registri prima elencati si rimanda al datasheet del micro
16F628A)
PIC
USART SINCRONA
Il modulo USART del micro
e' posto nella modalità sincrona settando il bit SYNC (TXSTA <4>).
I pin di I/O RB2/TX/CK e RB1/RX/DT sono configurati
rispettivamente come linea del clock CK e linea dati DT (dati)
settando il bit SPEN (RCSTA <7>). Il ruolo di MASTER e' settato
ponendo ad 1 il bit CSRC (TXSTA <7>) mentre per il riolo di SLAVE
bisogna resettarlo
| Azione |
registro |
Effetto |
| settare SYNC |
TXSTA <4>=1 |
Modalita sincrona |
| settare SPEN |
RCSTA <7> = 1 |
RB1 e RB2 come DT e CK |
| settare CSRC |
TXSTA <7> = 1 |
Master |
| resettare CSRC |
RCSTA <7> = 1 |
Slave |
TRASMISSIONE SINCRONA:
MASTER
Lo schema a blocchi del trasmettitore USART
è mostrato in Figura 1. Il cuore del trasmettitore
è il registro a scorrimento di trasmissione (TSR). Il registro TSR ottiene i
suoi dati dal buffer di dati di trasmissione TXREG caricato con i dati
via software tramite. Il registro TSR non è
caricato fino a quando l'ultimo bit è stato trasmesso dalla precedente
carico. Non appena l'ultimo bit è trasmessa, la TSR viene caricato con
i nuovi dati dal TXREG (se disponibile). Una volta che il registro TXREG
i trasferimenti di dati al registro TSR (si verifica in uno Tcycle), il
TXREG è vuoto e interrompere bit, TXIF (PIR1 <4>) è impostata.
L'interrupt può essere attivata / disattivata per impostazione /
compensazione consentire bit TXIE (PIE1 <4>). Bandiera bit TXIF
verrà impostata indipendentemente dello stato di consentire TXIE po 'e
non possono essere liquidati nel software. RESET sarà solo quando nuovi
dati è caricato nel registro TXREG.
Mentre bandiera TXIF bit
indica lo stato del registro TXREG, un altro po 'TRMT (TXSTA <1>)
mostra lo stato del registro TSR. TRMT è un po 'di sola lettura che è
fissata al momento della TSR è vuoto. Non interrompere la logica è
legata a questo bit, in modo che l'utente ha a questo sondaggio po 'al
fine di determinare se la TSR registro è vuoto. La TSR non è mappato
in memoria i dati in modo che non è disponibile per l'utente.
Trasmissione è attivata per impostazione consentire bit TXEN (TXSTA
<5>).
L'effettiva trasmissione
non si verifichino TXREG fino a quando il registro è stato caricato con
i dati. Il primo bit di dati verrà spostato sulla prossima aumento di
bordo
l'orologio sulla linea CK.
Dati out è stabile attorno al bordo della caduta il clock sincrono
(Figura 12-12). La trasmissione può anche essere avviato da prima del
caricamento
del registro TXREG e poi
impostazione bit TXEN (Figura 12-13). Questo è vantaggioso quando i
tassi di baud lenta sono selezionati, dal momento che la BRG è
conservato in RESET
quando bit TXEN, CREN, e
SREN sono chiare. Impostazione consentire bit TXEN inizierà il BRG, la
creazione di uno spostamento di clock immediatamente.
Normalmente quando la
trasmissione è la prima volta, la TSR registro è vuoto, per cui un
trasferimento verso il registro TXREG si tradurrà in un immediato
trasferimento a TSR
risultante in un vuoto
TXREG. Back-to-back trasferimenti sono possibili. Consentire la
compensazione bit TXEN, nel corso di una trasmissione, farà sì che la
trasmissione di
essere abortito e
reimpostare il trasmettitore. Il DT e CK spille tornerà a hiimpedance.
Se uno dei due bit CREN o SREN bit è impostato, nel corso di una
trasmissione,
la trasmissione viene
interrotta e il pin DT ritorna a un hi-impedenza di Stato (per un
ricevimento). CK il pin rimarrà un po 'di output se è impostato CSRC
(orologio interno).
Il trasmettitore logica
tuttavia non viene azzerato, anche se è disconnesso dalla pin. Al fine
di reimpostare il trasmettitore, l'utente ha a bit TXEN chiaro.
Se SREN bit è impostato
(per interrompere uno in corso di trasmissione e di ricevere una sola
parola), poi dopo la singola parola viene ricevuto, SREN po 'verra'
cancellata e
la porta seriale tornerà a
trasmettere dal bit TXEN è ancora impostata. Il DT linea di passare
immediatamente dalla Hi-impedenza Ricevi modalità per trasmettere e
iniziare la
guida. Per evitare questo,
bit TXEN dovrebbe essere cancellata. Al fine di selezionare 9 bit di
trasmissione, la TX9 (TXSTA <6>) bit dovrebbero essere fissati e
il nono bit
dovrebbe essere scritto a
bit TX9D (TXSTA <0>). Il nono bit deve essere redatta per iscritto
la prima a 8 bit di dati per il registro TXREG. Questo perché una banca
dati per
scrivere il TXREG può
risultare in un trasferimento immediato dei dati al registro TSR (se il
TSR è vuoto). Se la TSR era vuoto e il TXREG è stato scritto prima di
scrivere
il nuovo TX9D, il valore
attuale dei bit TX9D è caricato.
Passi da seguire quando
l'istituzione di un Master Trasmissione sincroni:
1. SPBRG inizializzare il
registro per le opportune baud rate (sezione 12.1).
2. Consentire al comandante
sincrono porta seriale di impostazione bit SYNC, SPEN, e CSRC.
3. Se interrupt sono
desiderata, quindi impostare consentire TXIE bit.
4. Se 9 bit di trasmissione
è desiderato, quindi impostare TX9 bit.
5. Consentire la
trasmissione di impostazione bit TXEN.
6. Se 9 bit di trasmissione
è selezionata, il nono bit dovrebbe essere caricato in TX9D bit.
7. Avviare la trasmissione
di dati a carico del registro TXREG.
TABLE 12-9: REGISTERS
ASSOCIATED WITH SYNCHRONOUS MASTER TRANSMISSION
FIGURE 12-12: SYNCHRONOUS
TRANSMISSION
FIGURE 12-13: SYNCHRONOUS
TRANSMISSION (THROUGH TXEN)
12.4.2 USART sincrono
MASTER RICEVIMENTO
Una volta in modalità
sincrona è selezionata, la ricezione è attivata per impostazione o
consentire bit SREN (RCSTA <5>) o
attivare bit CREN (RCSTA
<4>). Dati è campione sulla RB1/RX/DT pin sul bordo della caduta
l'orologio. Se consentire SREN bit è impostato, allora solo una singola
parola viene ricevuto. Se consentire CREN bit è impostato, la ricezione
è CREN continuo fino a quando viene cancellata. Se entrambi i bit sono
fissati, quindi CREN ha la precedenza.
Clocking dopo l'ultimo bit,
i dati ricevuti nel Ricevi Maiusc Registrati (RSR) è trasferito al
registro RCREG (se è vuoto). Completato il trasferimento, interrompere
bandiera bit RCIF (PIR1 <5>) è impostata. Interrompere
l'effettiva può essere attivata / disattivata per impostazione /
compensazione consentire bit RCIE (PIE1 <5>).
RCIF po 'di bandiera è un
po' di sola lettura che è di RESET hardware. In questo caso, è RESET
RCREG quando il registro è stato letto e 'vuoto. La RCREG è tamponato
un doppio registro (vale a dire, si tratta di un profondo due FIFO). E
'possibile per due byte di dati che devono essere ricevuti e trasferiti
al RCREG FIFO e un terzo byte per iniziare il trasferimento in RSR
registro. Sulla Clocking degli ultimi bit del terzo byte, se il registro
RCREG è ancora completa quindi il superamento di errore bit OERR (RCSTA
<1>) è impostata. La parola nel RSR andranno perse. RCREG il
registro può essere letto due volte a recuperare i due byte nel FIFO.
Bit OERR deve essere cancellata nel software (di compensazione CREN
bit). Se bit OERR è impostata, i trasferimenti dal RSR per la RCREG
sono inibito, per cui è essenziale per cancellare bit OERR se è
impostata. 9 °ricevere bit è tamponata allo stesso modo come la
ricezione di dati. La lettura del registro RCREG, carico RX9D po 'con un
nuovo valore, pertanto è essenziale per l'utente di leggere il registro
RCSTA prima lettura RCREG per non perdere il vecchio RX9D informazioni.
Passi da seguire quando
l'istituzione di un Master di ricezione sincroni:
1. SPBRG inizializzare il
registro per le opportune baud rate. (Art. 12,1)
2. Consentire al comandante
sincrono porta seriale di impostazione bit SYNC, SPEN, e CSRC.
3. Garantire CREN bit e
SREN sono chiare.
4. Se interrupt sono
desiderata, quindi impostare consentire RCIE bit.
5. Se 9-bit reception è
desiderato, quindi impostare RX9 bit.
6. Se un unico accoglienza
è necessario, impostare SREN bit. Per impostare la ricezione continua
CREN bit.
7. Interrompere bandiera
bit RCIF verrà impostata quando la ricezione è completa e un interrupt
viene generato se consentire bit RCIE è stato fissato.
8. Leggere il registro
RCSTA per ottenere il nono bit (se abilitato) e determinare se si è
verificato alcun errore durante la ricezione.
9. Leggi gli 8 bit di dati
ricevuti la lettura del registro RCREG.
10. Se si è verificato
alcun errore, eliminare l'errore di compensazione CREN bit.
TABLE 12-10: REGISTERS
ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION
SYNCHRONOUS RECEPTION
(MASTER MODE, SREN)
12,5 USART sincroni
sincroni Slave Slave differisce dal modo Master nel fatto che il
passaggio orologio è fornito esternamente a RB2/TX/CK pin (invece di
essere forniti internamente in modo Master). Questo dispositivo permette
di trasferire o ricevere i dati, mentre in modalità stand-by. Slave è
iscritto di compensazione bit CSRC (TXSTA <7>).
12.5.1 USART sincrono SLAVE
trasmettere il funzionamento del sincroni master e slave modalità sono
identiche tranne che nel caso della modalità stand-by.
Se due parole sono scritte
nel TXREG e poi il sonno di istruzioni viene eseguito, il seguente si
verifica: a) La prima parola e trasferire immediatamente il TSR
registrare e trasmettere. b) La seconda parola rimarrà in TXREG
registro. c) Bandiera bit TXIF non viene fissato. d) Se la prima parola
è stata spostata su TSR, il registro TXREG trasferirà
la seconda parola al TSR e
bandiera bit TXIF verrà impostata. e) Se consentire TXIE bit è
impostato, l'interrupt si scia del chip dal sonno e se il mondiale di
interrupt è attivata, il programma succursale a interrompere il vettore
(0004h).
Passi da seguire quando
l'istituzione di un sincroni Slave Trasmissione:
1. Consentire la sincrono
schiavo porta seriale di impostazione bit SYNC e SPEN e CSRC po 'di
compensazione.
2. CREN bit chiaro e SREN.
3. Se interrupt sono
desiderata, quindi impostare consentire TXIE bit.
4. Se 9 bit di trasmissione
è desiderato, quindi impostare TX9 bit.
5. Consentire la
trasmissione di impostazione consentire bit TXEN.
6. Se 9 bit di trasmissione
è selezionata, il nono bit dovrebbe essere caricato in TX9D bit.
7. Avviare la trasmissione
di dati a carico del registro TXREG.
Ricezione USART sincrono
SLAVE RICEVIMENTO
Il funzionamento del
sincroni master e slave modalità è identica tranne che nel caso della
modalità stand-by.
Inoltre, SREN po 'è un non
cura in Slave. Se ricevere è attivata, l'impostazione di bit CREN,
prima del sonno, poi una parola possono essere ricevuti durante il
sonno.
Completamente a ricevere la
parola, il registro RSR trasferire i dati al registro RCREG e se
consentire bit RCIE bit è impostato, l'interrupt generato sarà seguito
il chip
dallo stato di stop. Se il
mondiale di interrupt è attivata, il programma succursale a
interrompere il vettore (0004h).
Passi da seguire al momento
di stabilire uno slave ricezione sincroni:
1. Consentire al comandante
sincrono porta seriale di impostazione bit SYNC e SPEN e CSRC po 'di
compensazione.
2. Se interrupt sono
desiderata, quindi impostare consentire RCIE bit.
3. Se 9-bit reception è
desiderato, quindi impostare RX9 bit.
4. A permettere l'accesso,
l'insieme consentire CREN bit.
5. Bandiera bit RCIF verrà
impostata quando la ricezione è completa e un interrupt viene generato,
se consentire bit RCIE è stato fissato.
6. Leggere il registro
RCSTA per ottenere il nono bit (se abilitato) e determinare se si è
verificato alcun errore durante la ricezione.
7. Leggi gli 8 bit di dati
ricevuti la lettura del registro RCREG.
8. Se si è verificato
alcun errore, eliminare l'errore di compensazione CREN bit.
FIGURE 12-14: SYNCHRONOUS
RECEPTION (MASTER MODE, SREN)
TABLE 12-11: REGISTERS
ASSOCIATED WITH SYNCHRONOUS SLAVE TRANSMISSION
TABLE 12-12: REGISTERS
ASSOCIATED WITH SYNCHRONOUS SLAVE RECEPTION
Baud
Rate Generator (BRG)
Il
modulo generatore del baud rate supporta sia la modalità asincrona e
sincroni del modulo USART. Si tratta di una dedicata a 8 bit baud rate
generatore. Il registro SPBRG controlla il periodo di un'area di libero
in esecuzione a 8-bit timer. Nella modalità asincrona il bit BRGH (TXSTA
<2>) controlla anche il baud rate. In modalità sincrona bit BRGH
viene ignorato.
La Tabella 12-1 mostra la formula per il calcolo della velocità in baud
per i diversi modi USART che si applicano solo in modo Master (orologio
interno).
Tab
12-1: BAUD RATE FORMULA
Dato
il baud rate desiderato e Fosc, il più vicino valore intero per il
registro SPBRG può essere calcolato usando la formula di cui alla
tabella 12-1. Da questo, l'errore in baud rate può essere determinata.
Esempio 12-1 mostra il calcolo del baud rate di errore per le seguenti
condizioni: FOSC = 16 MHz desiderata Baud Rate =
9600 BRGH = 0 SYNC = 0
ESEMPIO
12-1: CALCOLO baud rate ERRORE
Essa può
essere vantaggiosa per utilizzare l'alta baud tasso (BRGH = 1) anche per
gli orologi più lento baud. Questo perché la FOSC / (16 (X + 1))
equazione può ridurre la velocità in baud errore in alcuni casi. La
scrittura di un nuovo valore per il registro SPBRG, fa sì che il timer
per BRG essere RESET (o cancellata), questo garantisce la BRG non
attendere un timer overflow prima di uscire il nuovo baud rate.
TABLE 12-2:
REGISTERS ASSOCIATED WITH BAUD RATE GENERATOR
TABLE 12-3:
BAUD RATES FOR SYNCHRONOUS MODE
|