mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR SPI: Will nicht auf SPIF warten


Autor: Dicker Liebhaber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.