top of page

/*
 * 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;
}
 

bottom of page