LPC11C24 Extended Frame

OP (Firma: keiner) #2767127
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.
#2767213
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
OP (Firma: keiner) #2767227
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren