Hallo, ich wollte mal fragen ob sich jemand mit dem Data overrun vom LPC1768 auskennt. Korrigiert mich bitte aberMeinung nach ist es so, dass bei diesem Controller beim Empfang ein zweifacher Buffer zur Verfügung steht, hierbei kann eine Nachricht verarbeitet werden während eine weitere noch empfangen wird. Tritt nun eine dritte auf handelt es sich um einen Data overrun. Weiß jemand wie sich ein Dataoverrun äußert und wie man diesen verhindern kann ( Reicht das löschen des Buffers nach jeder Verarbeitung indem mal "0" hineinschreibt) Ich danke euch
Um welche Schnittstelle handelt es sich denn? Allgemein: Nutze Dummy-Reads auf das Input-Register der Schnittstelle.
und das senden und empfangen funtkioniert alles ne weile und dann geht gar nichts mehr aber es liegen auch keien Fehler auf dem Bus und aufgrund der beschreibung im Datenblatt vermute ich, liegt es am Data overrun jetzt überschreibe ich den empfnagbuffer nach dem abspeichern der daten mit 0 und ich wüsst halt gern ob jemand schon erfahrungen diesbezüglich gemacht hat und evtl. tipps hat was ich vergesse/falsch mache
1 | pDest = (uint32_t *)&MsgBuf_RX1; |
2 | *pDest = LPC_CAN1->RFS; /* Frame */ |
3 | |
4 | pDest++; |
5 | *pDest = LPC_CAN1->RID; /* ID */ |
6 | |
7 | |
8 | pDest++; |
9 | *pDest = LPC_CAN1->RDA; /* Data A */ |
10 | |
11 | |
12 | pDest++; |
13 | *pDest = LPC_CAN1->RDB; /* Data B */ |
14 | |
15 | CAN1RxDone = TRUE; |
16 | |
17 | data[0]=MsgBuf_RX1.DataA; |
18 | data[1]=MsgBuf_RX1.DataB; |
19 | |
20 | LPC_CAN1->CMR |= (1<<2); |
21 | |
22 | LPC_CAN1->RFS = 0; |
23 | LPC_CAN1->RID= 0; |
24 | LPC_CAN1->RDA= 0; |
25 | LPC_CAN1->RDB= 0; |
26 | return; |
Tom schrieb: > Weiß jemand wie sich ein Dataoverrun äußert und wie man diesen > verhindern kann Finde doch erstmal raus, ob es überhaupt wirklich einen Data Overrun gegeben hat. Steht im Register CANxGSR im Bit DOS.
es ist definitiv ein Data overrun, ich kann beim debuggen in die Register schauen und sobald ich eine Nachricht empfange, die in meine LUT den passenden Identifier besitzt, wird ein Data Overrun ausgelöst.
nachtrag: sobald ich die nachrichten einzeln schicke also nicht hintereinander weg geht auch alles ... hm keiner sonst Erfahrungen mit dem Dataoverrun bzw. CAN beim LPC1768
Dann kann es eigentlich nur noch daran liegen, daß Du die Nachrichten nicht schnell genug aus dem Buffer holst. Oder Du gibst den Buffer nicht frei (bit RRB in CANxCMR), wenn Du den Frame darin fertig verarbeitet hast.
Den zweiten Punkt ignorieren, da ja sonst bei Einzelsendung auch beim Dritten Frame Schluß gewesen wäre.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.