Part Number: EK-TM4C123GXL
Hi,
My system is:
LaunchPad TM4C123G
MCP2562
a device who has can bus with message will only be sent if requested by RTR message
I do not understand well how to read a remote message can.
How should I use the following define?
MSG_OBJ_REMOTE_FRAME
MSG_OBJ_TYPE_TX_REMOTE
MSG_OBJ_TYPE_RX_REMOTE
I read page 88 of the peripherical driver library, but it's not clear to me.
Any hints?
Thanks in advance!
This is my code:
// Use ID and mask 0 to recieved messages with any CAN ID
g_sCAN0RxMessage.ui32MsgID =0;//= 0x2c4;
g_sCAN0RxMessage.ui32MsgIDMask =0;//= 0x7ff;
g_sCAN0RxMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER | MSG_OBJ_REMOTE_FRAME;
g_sCAN0RxMessage.ui32MsgLen = 8; // allow up to 8 bytes
// Set up msg object
msgData2 = 0;
g_sCAN0TxMessage.ui32MsgID = ACCELEROMETER_XYZ;
g_sCAN0TxMessage.ui32MsgIDMask = 0;
g_sCAN0TxMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE | MSG_OBJ_REMOTE_FRAME;//
g_sCAN0TxMessage.ui32MsgLen = 0;// sizeof(msgDataPtr2);
//g_sCAN0TxMessage.pui8MsgData = msgDataPtr2;
//
// Now load the message object into the CAN peripheral. Once loaded the
// CAN will receive any message on the bus, and an interrupt will occur.
// Use message object RXOBJECT for receiving messages (this is not the
//same as the CAN ID which can be any value in this example).
//
CANMessageSet(CAN0_BASE, RXOBJECT, &g_sCAN0RxMessage, MSG_OBJ_TYPE_RX);
while(1)
{
CANMessageSet (CAN0_BASE, TXOBJECT, &g_sCAN0TxMessage, MSG_OBJ_TYPE_TX_REMOTE); // send as msg object 1
delay(100); // wait 100ms
if(g_ui32ErrFlag != 0)
{ // check for errors
//UARTprintf("CAN Bus Error\n");
CANErrorHandler();
}
//UARTprintf("Hola\n");
if(g_bRXFlag)
{ // rx interrupt has occured
UARTprintf("Hola-------21\n");
g_sCAN0RxMessage.pui8MsgData = msgData; // set pointer to rx buffer
CANMessageGet(CAN0_BASE, RXOBJECT, &g_sCAN0RxMessage, MSG_OBJ_TYPE_RX_REMOTE); // read CAN message object RXOBJECT from CAN peripheral
g_bRXFlag = 0; // clear rx flag
if(g_sCAN0RxMessage.ui32Flags & MSG_OBJ_DATA_LOST)
{ // check msg flags for any lost messages
UARTprintf("CAN message loss detected\n");
}
}
}