Forum: Digitale Signalverarbeitung / DSP / Machine Learning SPI Status Bit ADSP21262?


von nides (Gast)


Lesenswert?

Hallo!

Ich arbeite dzt. mit dem ADSP 21262 (SHARK) an einer SPI-Übertragung.
Diese soll ohne Interrupt oder DMA laufen.
Allerdings möchte ich durch pollen des SPIF-Bit im SPISTAT Register 
prüfen, ob gerade eine Übertragung läuft.

Lt. Datenblatt sollte dieses Bit 1 sein sobald ein Transfer 
abgeschlossen ist. Das Bit ist read-only und nach dem Reset auch 1.

Ich nehme daher eigentlich an, dass wenn das Bit 0 ist, gerade eine 
Übertragung läuftn (sonst würde es keinen Sinn ergeben).

Bei meinem DSP wird das Bit allerdings nie 0.
Die Übertragung (MOSI, SCK) läuft aber korrekt, wurde mit OSZI geprüft.

Hat jemand schon mal dieses Problem gehabt?

Danke für Hinweise,

Nides

von nides (Gast)


Lesenswert?

Das Problem hab ich mittlerweile gelöst:

Mein code sah so aus:

*pTXSPI = data;  // daten ins transferregister schreiben
while ((0x01 & *pSPISTAT) == 0); // warten bis fertig gesendet
...
...

Die while-Schleife wurde jedesmal übergangen, obwohl die Übertragung 
noch nicht fertig war.

Der Grund ist, dass es vom Schreibzugriff auf das Senderegister bis zum 
löschen des SPIF-Bits mindestens 2 Zyklen dauert.
Da ich mich mit verschiedenen Takteinstellungen nichtmehr rumplagen 
wollte kann ich nicht sagen ob es bei anderen Einstellungen schneller / 
langsamer geht. (4MHz SPI, 16Bit, ~190MHz core)
Jedenfalls hab ich das Problem durch einfügen von
asm volatile("nop;nop;nop;nop;");
vor der Schleife beheben können.

Laut Email-Support von Analog Device exisitiert das Problem nicht! 
nerv


Vielleicht ist ja mal wem mit der Info geholfen.

Grüße,

Nides

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.