SPI Status Bit ADSP21262?

Gast #887617
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
Gast #894270
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren