www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Str91x, SPI und Interrupt


Autor: Der Thomas (soundso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich versuche bei meinem STR912FA die Interupts zu verwenden, leider ohne 
Erfolg. Zuerst wurde der SSP0 IRQ-Handler ständig ausgeführt. Nach etwas 
Testen habe ich gemerkt, das es so aussieht als ob ständig Daten im 
RxBuffer sind und das SSP_FLAG_RxFifoNotEmpty-Flag ständig gesetzt ist. 
Was mache ich falsch??? Im nachfolgenden Code erhalte ich im 
Loopback-Mode die 0xAA zurück, ohne Loopback-Mode wird der Code trotzdem 
ausgeführt und 0xFF empfangen.

while(1){
  SSP_SendData(SSP0, 0xAA);

  while(SSP_GetFlagStatus(SSP0, SSP_FLAG_RxFifoNotEmpty)==SET){
    // Always executed!
    data = SSP_ReceiveData(SSP0);
    SSP_ClearFlag(SSP0, SSP_FLAG_RxFifoNotEmpty); //Necessary???
  };
};

Autor: Der Thomas (soundso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erster Geistesblitz! Logisch das er was im Speicher hat, SPI ließt ja 
auch automatisch bei jedem Senden die Werte vom Slave ein (Pull-up, 
darum 0xFF). Wieso lößt aber auch der RxFifo-Interrupt aus bzw. Flag 
gesetzt, wenn ich auch nichts Sende - also auch nichts eingelesen werden 
sollte? Wo ist dann der Sinn des Flags?

Autor: Der Thomas (soundso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na dann beantworte ich meine Fragen halt selber ;-) Also der 
Rx-Interrupt wird schon nur dann ausgelößt, wenn auch was empfangen 
wurde. Da SPI aber bidirektional ist und der Controller im Master-Mode 
arbeitet, wird von MISO immer dann gelesen wenn auch Daten über MOSI 
gesendet werden (Master taktet den CLK und bei jedem Takt auf CLK wird 
ein Bit auf MOSI ausgegeben und ein Bit von MISO eingelesen). Bei jedem 
Senden wird also auch der Empfangs-Interrupt ausgelößt. Eigentlich ganz 
logisch wenn man mal ne Nacht drüber schläft, aber wollte es noch mal 
festhalten, falls sich irgendwann mal einer für diesen Thread 
interessiert! Auch wenn es mir nun das Problem bringt das ich überlegen 
muss, wie ich Daten lese kann ohne zu schreiben...

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.