Mein code sieht folgendermaßen aus,
//Initialisierung des SPI-Buses -> MC = Master ; Bsens = slave
void initSPI(void)
{
SPI_CS_bsens = 1; //init idle value CS --> bsens off
LATBbits.LATB4 = 1; //init idle value CLK
LATBbits.LATB5 = 1; //init idle value SDO
LATBbits.LATB6 = 1;
ANSELCbits.ANSC2=0; //Digital on
//Engänge und Ausgänge des SPI-Busses definieren
TRISCbits.TRISC2=0; //Ausgang RC2 -> CS
TRISBbits.TRISB4=0; //Ausgang RB4 -> CLK
TRISBbits.TRISB5=0; //Ausgang RB5 -> SDO
TRISBbits.TRISB6=1; //Eingang RB6 -> SDI
RB4PPS = 0x10; //PORTbelegung CLK
RB5PPS = 0x12; //PORTbelegung SDO
/*SPI Mode 1,0*/
SSP1CON1 = 0b00010000; // Clock = FOSC/4 und CKP = 1 (Idle is
high)
SSP1STATbits.CKE = 0; // CKE = 0
SSP1STATbits.SMP = 1; //1=INPUT data sampled at end of data output
time
SSP1CON1bits.SSPEN = 1; // SPI Modul nur einschalten wenn nötig
PIE1bits.SSP1IE = 1;
INTCONbits.GIE = 1;
}
//----------------------------------------------------------------------
-----
//SPI Singelübertragung, schreiben und lesen. Adresse und Data muss
übergeben werden
unsigned char SPI_s_rtx_bsens(unsigned char reg_id, unsigned char data)
{
unsigned char dummy;
SPI_CS_bsens = 0; //Übertragung freigeben
SSP1BUF = reg_id; //Adresse übertragen
while(!SSP1STATbits.BF); //Übertragung fertig
while(!PIR1bits.SSP1IF); //Interrupt gesetzt?
PIR1bits.SSP1IF = 0; //Interrupt zurücksetzten
dummy = SSP1BUF; //SSP1BUF sicher leeren
SSP1BUF = data; //Daten übertragen
while(!SSP1STATbits.BF); //Übertragung fertig
while(!PIR1bits.SSP1IF); //Interrupt gesetzt?
PIR1bits.SSP1IF = 0; //Interrupt zurücksetzten
dummy = SSP1BUF; //Daten lesen
SPI_CS_bsens = 1; //Übertragung sperren
return(dummy); //Daten zurückgeben
}