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