MSSP e SPI

PIC18 e registro a scorrimento SIPO

In fase di sviluppo Stesura preliminare In fase di sviluppo

Questa pagina descrive l'uso del modulo MSSP per la trasmissione seriale sincrone di un byte dal PIC18 ad un registro SIPO 74HC164 al quale sono collegati otto LED. A differenza di quanto richiesto nella pagina Usare un registro SIPO la trasmissione è qui realizzata con l'hardware dedicato MSSP, Master Synchronous Serial Port (nota 1)

Prima di proseguire nella lettura di questa pagina è vivamente consigliata la lettura dei fogli tecnici, avendo per esempio ben chiaro il significato del diagramma temporale riportato più avanti.

L'hardware

Lo schema di riferimento è piuttosto semplice:

La foto di apertura mostra il circuito realizzato su breadboard utilizzando il circuito PICdemo R2

Il modulo MSSP

MSSP è il cuore hardware di tutte le interfacce seriali sincrone del PIC18.

Volendo semplificare al massimo, possiamo descrivere questo modulo come un registro a scorrimento in cui il processore scrive in parallelo il byte da trasmettere e l'hardware provvede alla trasmissione seriale, un bit alla volta. Lo schema a blocchi semplificato:

MSSP

I due elementi principali sono:

Dei tre pin esterni gestiti dal modulo MSSP utilizzeremo solo SDO (dato seriale, in uscita dal PIC) e SCK (clock).

Il codice: prima versione

Il codice completo è disponibile a fondo pagina; è suddiviso in due parti, la configurazione del modulo MSSP ed il loop infinito che trasmette una sequenza di byte.

Configurazione del modulo MSSP

Il modulo MSSP è piuttosto complesso in quanto svolge numerose funzioni (nota 2). Di conseguenza la sua configurazione non è banale. Il nostro obbiettivo è utilizzarlo per generare un segnale seriale sincrono in grado di trasferire 8 bit, uno alla volta, sul fronte di salita del clock. La modalità che più si avvicina a ciò è la SPI Master.

Il registro principale per la configurazione del modulo MSSP è il REGISTER 17-2: SSPCON1: MSSP CONTROL 1 REGISTER (SPI MODE).

  1. Innanzitutto occorre abilitare il modulo seriale:
     bsf SSPCON1, SSPEN
  2. Delle 6 modalità base scegliamo quella SPI, con frequenza di clock pari ad ¼ di quella del processore. Per fare ciò è necessario azzerare i quattro flag SSPM:
    bcf SSPCON1, SSPM0
    bcf SSPCON1, SSPM1
    bcf SSPCON1, SSPM2
    bcf SSPCON1, SSPM3
  3. Per la definizione del clock occorre specificare lo stato a riposo (basso) ed il fronte in corrispondenza del quale il dato cambia (il 74HC164 legge l'ingresso sul fronte si salita, quindi il bit di ingresso può essere modificato sul fronte di discesa del clock)
    bcf SSPCON1, CKP
    bsf SSPSTAT, CKE

Trasmissione di un byte

La trasmissione di un byte è semplice: basta scriverlo nell'apposito registro SSPBUF...

 movff DatoTx, SSPBUF

Il reset prima della trasmissione è facoltativo in quanto l'eventuale vecchio contenuto verrebbe comunque spinto fuori dal nuovo byte. Dovesse servire, anche per chiarezza nelle prove:

 bcf LATC, RC7
 bsf LATC, RC7

Un'avvertenza: prima di trasmettere un secondo byte è necessario attendere che il registro SSPBUF si sia svuotato. In questa prima versione è sufficiente attendere qualche ciclo macchina (la serie dei nop nel codice)

Il diagramma temporale

Di seguito il diagramma temporale corrispondente. Dall'alto

Il codice: seconda versione

Un problema della prima versione codice deriva dal fatto che non viene effettuata nessuna verifica della avvenuta trasmissione di un byte prima di trasmetterne un secondo. Nel caso dovesse succedere, il modulo rimane temporaneamente bloccato (nota 3).

Il secondo esempio utilizza il flag BF del registro SSPSTAT che vale 1 solo quando l'intero byte è stato trasmesso.(nota 4):

attendi
 btfss SSPSTAT, BF
 bra attendi

Questo flag non può essere azzerato direttamente, ma per predisporre il modulo MSSP alla ricezione/trasmissione di un nuovo byte è necessario leggere il registro SSPBUF: (nota 5)

  movff SSPBUF, DatoRx

Il codice

Esercizi

Note

  1. Quello mostrato è un uso particolare (e non propriamente convenzionale) del bus seriale SPI
  2. Può infatti essere configurato come master oppure come slave; può generare segnali secondo lo standard SPI oppure secondo lo standard I2C
  3. Si legga sui fogli tecnici quanto scrippo a proposito del flag WCOL del registro SSPCON1
  4. I fogli tecnici fanno riferimento alla ricezione, ma in modalità SPI trasmissione e ricezione di un byte sono contemporanee (full-diplex)
  5. La cosa è assolutamente logica, se si pensa che e stato effettivamente letto un byte... che in questo caso il 74HC164 non ha però mandato

Ultima modifica di questa pagina: 23 maggio 2016 - Una pagina simile: PIC18 come master SPI, in C


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima