stm32 spi-Register

Gast #3748031
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?
#3748142
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.
Gast #3748384
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.
Gast #3748460
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.

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