Forum: Mikrocontroller und Digitale Elektronik LPC11C24 Extended Frame


von Johanna B. (Firma: keiner) (berg)


Lesenswert?

Hallo Zusammen,
Ich arbeite mit einem LPC11C24 Mikrocontroller und mit der dazugehörigen 
LPCxpresso Entwicklungsumgebung.

Ich versuche das Beispielprogramm can_onchip zu verstehen. Mein Problem 
ist, dass ich keine Extended Botschaften senden oder empfangen kann.

Wenn ich im Datenblatt: 
http://www.nxp.com/documents/user_manual/UM10398.pdf auf Seite 315 
nachlese, steht da: "Transmit message objects are automatically 
configured when used".
Das versteh ich so, dass automatisch die richtige Framelänge gewählt 
wird.

Versuche ich aber, anstatt "test" "testtest" zu versenden, mit folgendem 
angepassten Code:

   msg_obj.msgobj  = 0;
  msg_obj.mode_id = 0x12345678;
  msg_obj.mask    = 0x0;
  msg_obj.dlc     = 8;
  msg_obj.data[0] = 'T';  //0x54
  msg_obj.data[1] = 'E';  //0x45
  msg_obj.data[2] = 'S';  //0x53
  msg_obj.data[3] = 'T';  //0x54
  msg_obj.data[4] = 'T';  //0x54
  msg_obj.data[5] = 'E';  //0x45
  msg_obj.data[6] = 'S';  //0x53
  msg_obj.data[7] = 'T';  //0x54
  (*rom)->pCAND->can_transmit(&msg_obj);

... erhalte ich in einem Simulationsprogramm immer nur eine Nachricht 
mit der ID 678.

Kann mir jemand sagen, was ich ändern muss, damit ich extended frames 
senden und empfangen kann?

Vielen Dank im Voraus

Berg

P.S. ich hab mich dazu entschlossen nicht mehr Code zu posten, da sich 
die Frage auf einem frei erhältlichen Beispielcode basiert, welchen 
jeder Nutzer von LPCxpresso kostenlos herunterladen kann.

von Erwin R. (er-tronik)


Lesenswert?

Das Datenblatt des 11C24 sollte Deine Frage beantworten:

// control bits for CAN_MSG_OBJ.mode_id
#define CAN_MSGOBJ_STD 0x00000000UL // CAN 2.0a 11-bit ID
#define CAN_MSGOBJ_EXT 0x20000000UL // CAN 2.0b 29-bit ID
#define CAN_MSGOBJ_DAT 0x00000000UL // data frame
#define CAN_MSGOBJ_RTR 0x40000000UL // rtr frame

Du schreibst einfach
msg_obj.mode_id = 0x12345678 | CAN_MSGOBJ_EXT;

Das geht, weil die höchste 29-Bit-Adresse 0x1FFFFFFF ist, das heisst die 
Bits 29..31 sind frei und werden in diesem Fall als Flags für 
29-Bit-Frames und RTR-Frames verwendet.


Erwin

von Johanna B. (Firma: keiner) (berg)


Lesenswert?

Hallo Erwin,
danke für die Antwort. Sie hat mir weitergeholfen. Inzwischen bin ich 
soweit, dass ich versuche den Filter anzupassen.

Der Code-Schnipsel:

  msg_obj.msgobj = 1;
  msg_obj.mode_id =0x1FFFFFFF|CAN_MSGOBJ_EXT;
  msg_obj.mask = 0x000;
  (*rom)->pCAND->config_rxmsgobj(&msg_obj);

Meine Frage wäre jetzt: Was muss ich für mode_id und mask schreiben, 
damit ich z.B. nur Nachrichten empfange, welche die ID 0xFF000FF haben?

Vielen Dank nocheinmal

Johanna

von Heiko (Gast)


Lesenswert?

Hallo,

das Problem mit dem Empfangen einer Nachricht habe ich momentan auch.
Benutze zum Senden das test Programm von LPC "can_onchip"

Danke für Antworten

von Johanna B. (Firma: keiner) (berg)


Lesenswert?


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.