Gast
#1250459
Hallo Zusammen!
Ich bin schon total verzweifelt! Hänge schon seit über einer Woche an
einem Problem und bekomm dieses einfach nicht gebacken.
Ich habe einen pic24fj128ga010. Diesen habe ich am SPI1 als Slave
konfiguriert.
Ich springe nachdem ich die SS Leitung abgefragt habe in die Routine und
will die Daten die über SPI gesendet werden in Variablen ablegen. Es
werden immer 16 Byte geschickt.
Aber das Unterprogramm hängt immer an der folgenden Stelle:
while (!SPI1STATbits.SPIRBF) set_bit(PORTA,0) ;
Led leuchtet ständig und bringt mein ganzes restliches Programm zum
erliegen.
Anbei mal das Unterprogramm:
void SPI1Service(void){
unsigned char SPI1[16];
int i;
unsigned char rbuf = SPI1BUF; //Clear
receive buffer full bit
for(i=0; i<16;i++){
while (!SPI1STATbits.SPIRBF) set_bit(PORTA,0) ; //setze led0
clear_bit(PORTA,0); //lösche led0
SPI1 = SPI1BUF;
}
switch (SPI1[0])
{
case 0x80 :
Jahr = SPI1[1];
Monat = SPI1[2];
Tag = SPI1[3];
Wochentag = SPI1[4];
Stunde = SPI1[5];
Minute = SPI1[6];
Sekunde = SPI1[7];
break;
case 0x81 :
geobreit = (long)SPI1[1]<<24 | (long)SPI1[2]<<16 |
(long)SPI1[3]<<8 | (long)SPI1[4];
geolaeng = (long)SPI1[5]<<24 | (long)SPI1[6]<<16 |
(long)SPI1[7]<<8 | (long)SPI1[8];
break;
case 0x82 :
set_bit(PORTA,7); //Referenzflag
break;
}
}
Habe mit dem Oszi das senden der 16 Daten Bytes überprüft und diese
werden korrekt übertragen.
Danke für jede Hilfe!
lG
Daniel