Comunicazione seriale sincrona nei PIC



 

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