AVR SPI: Will nicht auf SPIF warten

Gast #1769863
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren