lpcware

LPC11C14 no interrupt when receiving a CAN RTR message, after sending the same COB ID

Discussion created by lpcware Employee on Jun 15, 2016
Latest reply on Jun 15, 2016 by lpcware
Content originally posted in LPCWare by Christian_RX7 on Sun May 03 10:54:58 MST 2015
Hello.

This is my first project with a LPC11C14 and I trying to run CANopen based on the AN11238. SDO and PDO communication are working fine except one thing.
When the controller receives a CAN RTR message after sending the exact same COB ID, nothing happens, no interrupt also nothing to see in the CAN registers during debugging.
For PDO sending I use the message buffer 10.
For receiving RTR PDOs I use the message buffer 11, there I configured DIR=1, RMTEN=0, and UMASK=1, to get an interrupt for handling the answer in software.
Until now there are two PDO COB-IDs 0x181 and 0x281. When the RTR alternates between those two, every request results an interrupt and my software sends an answer. But two times the same request and nothing happens at the second RTR. The same result after sending an event triggered message, then the following request (same COB) is unhanded.

That´s the part where I initialise the CAN controller:
  /* Initialize the CAN controller */
  (*rom)->pCAND->init_can(&ClkInitTable[0], 1);
  /* Configure the CAN callback functions */
  (*rom)->pCAND->config_calb(&callbacks);
  /* Initiate object dictionary */
  CANopen_Init_SDO();
  /* Initialize CANopen handler */
  myCANopen.node_id = CANnodeId;
  myCANopen.od_const_num = NumberOfmyConstODEntries;
  myCANopen.od_num = NumberOfmyODEntries;
  (*rom)->pCAND->config_canopen((CAN_CANOPENCFG *)&myCANopen);
  /* Enable the CAN Interrupt */
  NVIC_EnableIRQ(CAN_IRQn);
  /* Configure message object 3 to receive all 11-bit messages 0x700-0x77F  Network Management Error Control */
  CANopen_Msg_Obj.msgobj = CAN_MSG_BUFFER_HEARTBEAT_RX;
  CANopen_Msg_Obj.mode_id = 0x700;
  CANopen_Msg_Obj.mask = 0x780;
  (*rom)->pCAND->config_rxmsgobj(&CANopen_Msg_Obj);

  /* Configure message object 5 to receive all 11-bit messages 0x000 (Network Management) */
  CANopen_Msg_Obj.msgobj = CAN_MSG_BUFFER_NMT_RX;
  CANopen_Msg_Obj.mode_id = 0x000;
  CANopen_Msg_Obj.mask = 0x7FF;
  (*rom)->pCAND->config_rxmsgobj(&CANopen_Msg_Obj);

  /* Configure message object 7 to receive all 11-bit messages 0x580-5FF (SDO) */
  CANopen_Msg_Obj.msgobj = CAN_MSG_BUFFER_SDO_CLIENT_RX;
  CANopen_Msg_Obj.mode_id = 0x580;
  CANopen_Msg_Obj.mask = 0x780;
  (*rom)->pCAND->config_rxmsgobj(&CANopen_Msg_Obj);

  /* Configure message object 9 to receive all 11-bit messages 0x200+NodeID (PDO) */
  CANopen_Msg_Obj.msgobj = CAN_MSG_BUFFER_PDO_RX;
  CANopen_Msg_Obj.mode_id = SDOS_1400Sub1_Data;
  CANopen_Msg_Obj.mask = 0x7FF;
  (*rom)->pCAND->config_rxmsgobj(&CANopen_Msg_Obj);

  /* Configure message object 11 to receive all 11-bit rtr messages 0x?80+NodeID (PDO request) */
  CANopen_Msg_Obj.msgobj = CAN_MSG_BUFFER_PDO_RXTX_REQ;
  CANopen_Msg_Obj.mode_id = SDOS_1800Sub1_Data | CAN_MSGOBJ_RTR;
  CANopen_Msg_Obj.mask = (~(SDOS_1800Sub1_Data ^ SDOS_1801Sub1_Data) & 0x7FF);
  (*rom)->pCAND->config_rxmsgobj(&CANopen_Msg_Obj);


Has anyone an idea?

Thanks,
Christian_RX7

Outcomes