Ein Atmega328 und ENC28J60 arbeiten ansich gut zusammen. Ich kann jede
Menge Ethernet-Frames über Stunden empfangen bis ich irgendwann merke,
dass die gesendeten Pakete mit einer deutlichen Verzögerung verarbeitet
werden.
Ich gehe wie folgt vor:
1 | forever:
|
2 | warten bis EPKTCNT != 0
|
3 | paket verarbeiten und ERXRDPT weiter setzen (Errata berücksichtigt)
|
4 | PKTDEC bit schreiben um EPKTCNT herunterzuzählen
|
Dabei beobachte ich folgendes:
ERXRDPT und ERXWRPT klaffen im Laufe der Zeit immer weiter auseinander.
EPKTCNT ist am Anfang der Schleife manchmal plötzlich um 2 kleiner als
beim letzten Durchlauf. Das kann zwar nicht sein, erklärt aber das
zunehmende Hinterherhinken der Pakteverarbeitung.
Das Verhalten lässt sich relativ gut dadurch reproduzieren, dass man den
ENC28J60 mit ein paar Ethernet Frames "bombardiert". EPKTCNT springt
dadurch um deutlich mehr als nur 1 pro Schleifendurchlauf.
Was geht hier vor?