mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [F] ATMega8, SPI


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die unten stehende Funktion stammt aus dem ATMega8-Datenblatt. Um die 
Zeit zu nutzen die zwischen dem Schreiben in das Register SPDR und der 
vollständigen Aussendung des Bytes vergeht, habe ich die beiden 
Anweisungen vertauscht. Nur jetzt funktioniert die Routine nicht mehr 
korrekt (Daten werden verstümmelt). Meine Frage: warum kann ich die 
Anweisungen nicht vertauschen?

void SPI_MasterTransmit(char cData)
{
 SPDR = cData ;  /* Start transmission */
 while(!(SPSR & (1<<SPIF)))  /* Wait for transmission complete */
  ;
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nur jetzt funktioniert die Routine nicht mehr
>korrekt (Daten werden verstümmelt).

Wie werden sie verstümmelt?

>Meine Frage: warum kann ich die
>Anweisungen nicht vertauschen?

Du kannst schon. Allerdings könnte dein Programm dann
stehen bleiben, da SPIF nie gesetzt wird ohne etwas
in SPDR zu schreiben. Die andere Reihenfolge benötigt
also mindestens sowas wie einen Dummy Write z.B. in
der SPI-Init.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

> Wie werden sie verstümmelt?

Beim Löschen eines Displays werden falsche Farben gesetzt. Tausche ich 
die Anweisungen wieder zurück funktioniert es.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt da noch was an SPI dran?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An der SPI hängt nur das Display

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird deine Funktion innerhalb einer Interuptroutine aufgerufen?

Autor: Klaus2m5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat:

Beim Löschen eines Displays werden falsche Farben gesetzt. Tausche ich
die Anweisungen wieder zurück funktioniert es.

Glaskugel:

Nächster Befehl früher, als die Ausführungszeit des Löschbefehls 
zulässt. Funktioniert zufällig noch mit der langsameren Version.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Glaskugel, du hast wahrscheinlich recht. Im Datenblatt 
(HM17CM4096) stehen zwar keine konkreten Wartezeiten, aber hier und da 
haben die chinesischen Kollegen das Wort "wait" eingestreut. Werde mich 
also peu à peu an die Wartezeiten herantasten.

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.