Forum: Mikrocontroller und Digitale Elektronik stm32 spi-Register


von Grundschüler (Gast)


Lesenswert?

ich quäle mich mit stm.

ich habe einen enc38j60 am stm32f429-board.

Schreiben ins DR-Register funktioniert mit:
  spiENC->DR = value;

Nach meinem Verständnis müsste ich jetzt das SR abfragen bis TXE==1 ist:
while (!(spiENC->SR & SPI_I2S_FLAG_TXE));//not ok

das klappt jedoch nicht. Anscheinend korrekte Ergebnisse bekomme ich nur 
mit
  while (SPI_I2S_GetFlagStatus(spiENC, SPI_I2S_FLAG_BSY));//ok

Direkte ABfrage bsy klappt auch nicht:
  //  while ((spiENC->SR & SPI_I2S_FLAG_BSY));//not ok

auch
// while (SPI_I2S_GetFlagStatus(spiENC, SPI_I2S_FLAG_TXE) == RESET);
liefert ein anderes Ergebnis.

Kann mir jemand die STM-Systematik erklären, warum ich das SR-Register 
nicht direkt abfragen kann, sondern die merkwürdige Funktion 
SPI_I2S_GetFlagStatus benutzen muss?

von Jim M. (turboj)


Lesenswert?

Die Periperial Library wird als Source code ausgeliefert: Use the 
source, Luke!

Das TXE Flag kann bei SPIs mit FIFO anderes Verhalten als BUSY haben. 
Das wäre dann immer 1 solange der FIFO nicht voll ist. Näheres steht im 
Handbuch für die entsprechende STM Familie.

: Bearbeitet durch User
von Grundschüler (Gast)


Lesenswert?

Jim Meba schrieb:
> Die Periperial Library wird als Source code ausgeliefert: Use the
> source, Luke!

danke für den Hinweis.

  SPI_I2S_SendData(spiENC,value);
--- funktion aus der stm-lib ---

bringt kein brauchbares Ergebnis.

Die Erklärung im manual -Seite 872- zur Unterscheidung von bsy und txe 
bzgl. Hardware- bzw. Softwarereset  hilft auch nicht weiter.

von foo (Gast)


Lesenswert?

Grundschüler schrieb:
> Kann mir jemand die STM-Systematik erklären, warum ich das SR-Register
> nicht direkt abfragen kann, sondern die merkwürdige Funktion
> SPI_I2S_GetFlagStatus benutzen muss?

Entweder benutzt du die lib und liest die Anleitung dazu oder du 
schreibst dir deinen SPI Treiber selber.

Bei Benutzung der Lib ist mein Verdacht, dass du keinen direkten Zugriff 
auf die Register hast, sondern die Funktionen benutzen musst.

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.