I test MSCAN in loopback mode, it wors well. but when loop mode disabled, it can't transmit the frame. Pls give me some advice about code below. Is there any code demo about MSCAN not use loop mode in MC56F82748?Thx.
Sending data frame without interrupt service (polling)
The following example demonstrates sending a data frame with standard ID and extended ID.
OnFreeTxBuffer event is called when a frame is successfully transmitted and returns buffer index (in this case 0), which was send.
Required component setup :
Content of ProcessorExpert.c:
volatile bool DataFrameTxFlg;LDD_TDeviceData *MyCANPtr;LDD_TError Error;LDD_CAN_TFrame Frame;uint8_t OutData[4] = {0x00U, 0x01U, 0x02U, 0x03U}; /* Initialization of output data buffer */ void main(void){ . . . MyCANPtr = CAN2_Init(NULL); /* Initialization of CAN2 component */ Frame.MessageID = 0x123U; /* Set Tx ID value - standard */ Frame.FrameType = LDD_CAN_DATA_FRAME; /* Specyfying type of Tx frame - Data frame */ Frame.Length = sizeof(OutData); /* Set number of bytes in data frame - 4B */ Frame.Data = OutData; /* Set pointer to OutData buffer */ DataFrameTxFlg = FALSE; /* Initialization of DataFrameTxFlg */ Error = CAN2_SendFrame(MyCANPtr, 0U, &Frame); /* Sends the data frame over buffer 0 */ while (!DataFrameTxFlg) { /* Wait until data frame is transmitted */ CAN2_Main(MyCANPtr); } . . . Frame.MessageID = (0x123456U | LDD_CAN_MESSAGE_ID_EXT); /* Set Tx ID value - extended */ Frame.FrameType = LDD_CAN_DATA_FRAME; /* Specyfying type of Tx frame - Data frame */ Frame.Length = sizeof(OutData); /* Set number of bytes in data frame - 4B */ Frame.Data = OutData; /* Set pointer to OutData buffer */ DataFrameTxFlg = FALSE; /* Clear DataFrameTxFlg */ Error = CAN2_SendFrame(MyCANPtr, 0U, &Frame); /* Sends the data frame over buffer 0 */ while (!DataFrameTxFlg) { /* Wait until data frame is transmitted */ CAN2_Main(MyCANPtr); } . . . for(;;) {}}
Content of Event.c:
extern volatile bool DataFrameTxFlg;void CAN2_OnFreeTxBuffer(LDD_TUserData *UserDataPtr, LDD_CAN_TMBIndex BufferIdx){ DataFrameTxFlg = TRUE; /* Set DataFrameTxFlg flag */}