/*
* Julien VILLEMEJANE - LEnsE - IOGS
*
* Bibliothèque de fonctions pour la liaison SPI - PIC16F150x
* version 1.1 - 2016-05-01
*
* A inclure dans les projets
* #include "spi.h"
*/
#include <xc.h>
#include "../headers/config.h"
#include "../headers/spi.h"
/*
* Initialisation de la liaison SPI
* entree : mode de fonctionnement compris entre 0 et 3
*/
void initSPI(char mode){
// INPUT / OUTPUT
TRISBbits.TRISB6 = 0; // CK
TRISCbits.TRISC7 = 0; // SDO
TRISBbits.TRISB4 = 1; // SDI
// MODE
switch(mode){
case 1:
SSPSTATbits.CKE = 0;
SSPCON1bits.CKP = 0;
break;
case 2:
SSPSTATbits.CKE = 1;
SSPCON1bits.CKP = 1;
break;
case 3:
SSPSTATbits.CKE = 0;
SSPCON1bits.CKP = 1;
break;
case 0:
SSPSTATbits.CKE = 1;
SSPCON1bits.CKP = 0;
default:
SSPSTATbits.CKE = 1;
SSPCON1bits.CKP = 0;
break;
}
// SSPxSTAT
SSPSTATbits.SMP = 0; // Echantillonnage au milieu de la donnée
// SSPxCON1
SSPCON1bits.SSPEN = 1; // Validation du module MSSP
SSPCON1bits.SSPM = 0b0001; // FCLK = FOSC/4
// Avec FOSC = 16 MHz -> Vitesse de l'horloge = 4 MHz
// SSPxCON2/3 - only for I2C
return;
}
/*
* Envoi d'une donnee en SPI
* entree : octet à envoyer
*/
void sendSPI(char data){
SSPBUF = data;
while(!SSPSTATbits.BF); // Wait for Data Transmit/Receipt complete
return;
}