Forum: Mikrocontroller und Digitale Elektronik CAN BUS XC167 ARbitration Register


von Alex (Gast)


Lesenswert?

Liebe Freunde
Ich beschäftigte mich momentan zum ersten mal mit dem CAN an einem XC167 
von Infinion und habe nun da erste Problem, was ich leider nicht allein 
verstehen kann, deswegen bin auf eure Unterstützung angewiesen.
Im Folgenden Code versuche ich die Arbitration Register zu verstehen. So 
wie ich das verstehe besteht dieser Register aus 12 Bit ( 11 Bit ID+ 1 
BIT RTR)??
Wenn Die ID 0X305 ist und RTR 0 habe ich gedacht dass, CAN_MSGARH1=60A, 
dies ist leider falsch,  Richtig wäre wie im Programm CAN_MSGARH1    = 
0x0C14 wieso???
Ich freue mich auf euere Unterstützung

/// 
-----------------------------------------------------------------------
  ///  Configuration of Message Object 1:  Kennzeichnung der Empfangs 
Nachricht mit Identifier 773
  /// 
-----------------------------------------------------------------------
  ///  - message object 1 is valid
  CAN_MSGCTRL1   =  0x5595;      // load message control register low, 
Message Object Daten gültig
  CAN_MSGCTRH1   =  0x0000;      // load message control register High 
-> Zähler für Messageobject

  ///  - message object is used as EMPFANGS object
  ///  - standard 11-bit identifier
  ///  - 8 valid data bytes
  ///  - this message object works with CAN node A
  ///  - remote monitoring is disabled
  CAN_MSGCFGL1   =  0x0080;      // load message configuration register 
low
  CAN_MSGCFGH1   =  0x0000;      // load message configuration register 
high, keine Interrupt Node wird gesetzt

  ///  - acceptance mask 11-bit: 0x7FF
  CAN_MSGAMRL1   =  0xFFFF;      // load acceptance mask register low, 
-> alle ankommenden Nachrichten werden bearbeitet
  CAN_MSGAMRH1   =  0xFFFF;      // load acceptance mask register high, 
-> alle ankommenden Nachrichten werden bearbeitet

  ///  - identifier 11-bit:      0x305 = 773
  CAN_MSGARL1    =  0x0000;      // load arbitration register low
  CAN_MSGARH1    =  0x0C14;      // load arbitration register high 
11bit Bit 28-18

von Alex (Gast)


Lesenswert?

hat keiner von euch  eine Idee :-(

von Thomas (kosmos)


Lesenswert?

wozu benötigt man das? Wenn eine Nachricht die Arbitrierung verliert, 
wird sie doch nochmals gesendet. Ich könnte mir nur vorstellen das hier 
mitgezählt wird wie oft die Nachricht die Arbitrierung verloren hat um 
sie dann evtl. zu löschen da inzwischen die Werte nicht mehr aktuell 
sind und man neue auf den Weg schicken will.

von B. J. (bjue)


Lesenswert?

Im Register CAN_MSGARH1 stehen die Bits 28..16. Bei 11 Bit Identifiern 
werden laut Handbuch XC167 nur die Bits 28..18 benutzt. Also den 
Identifier 0x305 mal zwei Bits nach links schieben und schon wird 0xC14 
daraus :-)

von Alex (Gast)


Lesenswert?

B. J. schrieb:
> Im Register CAN_MSGARH1 stehen die Bits 28..16. Bei 11 Bit
> Identifiern
> werden laut Handbuch XC167 nur die Bits 28..18 benutzt. Also den
> Identifier 0x305 mal zwei Bits nach links schieben und schon wird 0xC14
> daraus :-)

Perfekt nun ist der Denkknoten gelöst, dafür bin ich dir sehr dankbar
Gruß
Alex

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.