Hallo, üblicherweise schiebt mal Daten via SPI ja so raus: void SPI_MasterTransmit(char cData) { SPDR = cData; /* Start transmission */ while(!(SPSR & (1<<SPIF))) /* Wait for transmission complete */ ; //mehr Code nop(); nop(); nop(); nop(); nop(); nop(); nop(); PORTA|=(1<<PA1); } Ich habe jetzt den Fall, dass ich nicht bis zum Ende der Übertragung (SPIF==1) warten möchte, sondern schon z.B nach der 3ten SPI-CLK Flanke einen beliebigen PORT-Ausgang (nicht SPI-PORT) setzen möchte. Meine Idee: Da das SPI-Modul mit f_clk/2 taktet, lasse ich die Anweisung while(...) einfach weg und warte während der Übertragung einfach 6 NOPs ab und setzte dann meinen PORT. Leider tauchen dabei dann Fehler auf, wenn while(!(SPSR & (1<<SPIF))) "ausgelassen" wird und währenddessen genoppt und Ports gesetzt werden. Das äußert sich so, dass SPI CLK und MOSI plötzlich "stoppen" und clk nun permanent auf high bleibt. Beeinflusst das PORTsetzen etwa die SPI-Übertragung? Kann mmn nicht sein. Was ist da los?
Dicker Liebhaber schrieb: > Beeinflusst das PORTsetzen etwa die SPI-Übertragung? Kann mmn nicht > sein. Eigentlich nicht. Eher wahrscheinlich ist, dass du die Funktion ja mehrmals aufrufen wirst und so in eine noch nicht vollständig Übertragung reinpfuscht. Zeig mal den kompletten Code her.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.