Forum: Mikrocontroller und Digitale Elektronik Str91x, SPI und Interrupt


von Der T. (soundso)


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???
  };
};

von Der T. (soundso)


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?

von Der T. (soundso)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.