In questa pagina viene mostrato come utilizzare SPI in modalità master per collegare una periferica esterna al PIC18 sfruttando il modulo SPI presente nel PIC18(L)F26K42 utilizzando MCC (MPLAB Code Configurator).
In questa pagina non è spiegato cosa è e come si usa il bus SPI. Se serve, qui trovate qualche informazione.
La configurazione è estremamente semplice e presentata nell'immagine seguente:
Occorre inoltre impostare in Pin Manager quali pin esterni utilizzare:
Si noti che non è presente il CE (Chip Enable), in quanto non gestito dall'hardware SPI. Occorre utilizzare un pin generico di uscita e gestirlo esplicitamente via software.
L'uso delle funzioni è particolarmente semplice, attraverso le funzioni SPI1_Exchange8bit() oppure SPI1_Exchange8bitBuffer(). La prima permette di leggere e scrivere contemporaneamente un singolo byte, la seconda un buffer.
Per esempio, il seguente codice legge e scrive due byte, attivando esplicitamente il CE.
CE_SetLow(); // Enable Chip Select (active low)
RX1 = SPI1_Exchange8bit(TX1);
RX2 = SPI1_Exchange8bit(TX2);
CE_SetHigh(); // Disable Chip Select (active low)
Il diagramma temporale corrispondente è mostrato di seguito:
Nel caso specifico il codice è stato eseguito con il clock del processore impostato a 4 MHz (quindi relativamente basso) ed il clock SPI a 2 MHz (quindi relativamente alto). L'effetto è una trasmissione veloce del singolo byte, ma un tempo significativo tra un byte e l'altro: il throughput è piuttosto basso, ben inferiore ai 2 Mbit/s.
Il problema è meno grave aumentando la frequenza del clock del processore (nel diagramma temporale seguente portato a 64 MHz) oppure nel caso di clock SPI inferiore.
Per ottenere la trasmissione degli stessi dati è possibile utilizzare anche il codice seguente, sostanzialmente equivalente:
dataIn[0] = TX1; // Data to send
dataIn[1] = TX2;
CE_SetLow(); // Enable Chip Select (active low)
SPI1_Exchange8bitBuffer(dataIn, 2, dataOut); // Read and write buffer (2
bytes)
CE_SetHigh(); // Disable Chip Select (active low)
Data di creazione di questa pagina: novembre 2019
Ultima modifica: 11 novembre 2019
PIC18 in C - Versione 0.991 - luglio 2019
Copyright 2014-2019, Vincenzo Villa (https://www.vincenzov.net)
PIC18 in C di Vincenzo Villa è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale