Hallo,
ich hab zwar gerade einen PIC24EPxxx am Wickel, der sollte da identisch sein, komme aber nicht dazu etwas zu testen. Ich würd das mal anders probieren und das Receivebuffer-Flag testen
Wenn der Receivebuffer am Anfang leer ist, kann er erst voll sein, wenn alle Bits einmal durchgeschoben worden sind.Code:uint8_t Send( uint8_t data) { int temp; CS = 0; temp = SPI1BUF; // empty receive buffer SPI1BUF = data; // data into buffer while( !SPI1STATbits.SPIRBF ) { // all bits are shifted, receivebuffer is full ; } CS = 1; return SPI1BUF; }
Noch zwei Hinweise deinen Code für andere lesbarer zu machen: wenn hier mit CS=0; //no operation gemeint ist, was der Kommentar sagt, schreib Nop(): hin. Sonst muß man dauernd überlegen, warum hier CS behandelt wird. Und rück bei while(IFS2bits.SPI2IF==0); // wait
wenigstens das Semikolon auf die nächste Zeile. Dann erkennt jemand, der den Code nicht gut kennt (und das bist auch du selbst in 3 Monaten) sofort die Schleife. Ich schreib das normalerweise noch etwas ausführlicher. Dann kann man da auch mal schnell irgendwelchen (Debug)Code einfügen und auch wieder rauskommentieren.
Vielleicht hilfts ja
MfG Klebwax
Lesezeichen