Hallo Martin,
vielen Dank für Deine Nachricht. Ja, Du hast recht! Ich habe die
Interrupt-Handler im Beispielprojekt mal bis an ihre Quelle
zurückverfolgt und mir auch nochmal das Handbuch des DP83848 zu Gemüte
geführt und kann Deine Aussage bestätigen: Der Interrupt, der die
Empfangsroutine per Semaphore freischaltet, kommt nicht über den Pin 7
des dp83848, sondern sollte aus dem Mac-Modul des STM32 kommen.
Ich habe meinen Code wieder in den Ursprungszustand zurückversetzt und
insbesondere auch einen Breakpoint in diese Methode gesetzt:
1 | void ETH_IRQHandler(void)
|
2 | {
|
3 | ETHERNET_IRQHandler();
|
4 | }
|
Mir einem kleinen Umweg über den HAL wird die Funktion
HAL_ETH_RxCpltCallback aufgerufen, die die Semaphore freigibt:
1 | void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)
|
2 | {
|
3 | osSemaphoreRelease(s_xSemaphore);
|
4 | }
|
Sobald ein Paket im MAC angekommen ist, sollte die CPU also in
ETH_IRQHandler springen und damit die weitere Verarbeitung triggern.
Leider passiert dies nicht. Der Code ist mit ganz geringfügigen
Anpassungen dem ST-Beispiel "LwIP_HTTP_Server_Netconn_RTOS" entnommen.
Grundsätzlich funktioniert die Sache ja auch, wenn man eben nicht über
den Interrupt geht, sondern den MAC alle 20ms pollt.
Wo sollte ich mit der Fehlersuche am besten beginnen?
Viele Grüße
Klaus