Data overrun bei LPC1768

Gast #1934392
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
Gast
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;
Gast
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.
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.