Code-Strukturen in stm32f4xx_hal_eth

OP #5509160
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe mich gefragt warum in der HAL-Bibliothek für den STM32F4 
beispielsweise folgende Funktion genau so geschrieben ist wie sie es 
ist:
1
static void ETH_MACTransmissionEnable(ETH_HandleTypeDef *heth)
2
{ 
3
  __IO uint32_t tmpreg1 = 0U;
4
  
5
  /* Enable the MAC transmission */
6
  (heth->Instance)->MACCR |= ETH_MACCR_TE;
7
  
8
  /* Wait until the write operation will be taken into account:
9
     at least four TX_CLK/RX_CLK clock cycles */
10
  tmpreg1 = (heth->Instance)->MACCR;
11
  ETH_Delay(ETH_REG_WRITE_DELAY);
12
  (heth->Instance)->MACCR = tmpreg1;
13
}

Ganz genau geht es mir um folgendes:
In der Zeile
1
(heth->Instance)->MACCR |= ETH_MACCR_TE
 wir das Register MACCR bearbeitet und direkt beschrieben. Anschließend 
wird mit
1
tmpreg1 = (heth->Instance)->MACCR
 der geschriebene Wert ausgelesen, nur um ihn nach einer kurzen 
Wartezeit mit
1
(heth->Instance)->MACCR = tmpreg1
 erneut in das Register zu schreiben.

Ich habe keine Ahnung warum das so geschrieben ist wie es ist und was 
das genau soll. Hat jemand von euch eine plausible Erklärung dafür?

Viele Grüße
Michael
#5509226
Lesenswert?
• ▲
▼
Das ist ein Workaround fuer ein Erratum des Ethernet-Peripherals:

2.10.5
Successive write operations to the same register might not be fully 
taken into account

Falls mehrere Schreiboperationen direkt hintereinander in bestimmte 
Ethernet-Register erfolgen, uebernimmt das Ethernet-Peripheral die neuen 
Werte nicht, obwohl beim Auslesen des Registers der richtige Wert 
ausgelesen wird.

Daher: Schreiben (beliebig oft), letzten Wert auslesen, 4 
Ethernet-Clocks warten, gelesenen Wert nochmal schreiben.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.