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
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.
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.