This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

EK-TM4C123GXL: Read a remote frame via CAN BUS

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");
            }
        }

	}