Forum: Mikrocontroller und Digitale Elektronik Data overrun bei LPC1768


von Tom (Gast)


Lesenswert?

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

von Tom (Gast)


Lesenswert?

kann mir niemand sagen wie er seinen Empfangsbuffer löscht?

von Frank B. (f-baer)


Lesenswert?

Um welche Schnittstelle handelt es sich denn?
Allgemein: Nutze Dummy-Reads auf das Input-Register der Schnittstelle.

von Tom (Gast)


Lesenswert?

CAN schnittstelle

von Tom (Gast)


Lesenswert?

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;

von Lutz (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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

von Lutz (Gast)


Lesenswert?

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.

von Lutz (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.