|
||||||||||||||||||||||||||||||||||||
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:
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à. 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:
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
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. 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
|
|
|||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|