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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.