Other Parts Discussed in Thread: AWR1843
Tool/software:
Hello,
Issue Description: The MRR code crashes when connecting the RADAR (AWR1843) with our ECU, which dumps multiple messages on the CAN bus. The RADAR's CAN is configured to receive classic CAN messages at 500kbps bitrate. While the code works fine when the radar is monitored as a standalone system, it crashes during integration with the ECU. The ECU and radar communicate exclusively through CAN.
I have seen similar issues in other threads.
Current Configuration:
memset (mcanCfgParams, sizeof (CANFD_MCANInitParams), 0); mcanCfgParams->fdMode = 0x0U; //disabled fd mode mcanCfgParams->brsEnable = 0x0U; //disabled bitrateswitching mcanCfgParams->txpEnable = 0x0U; mcanCfgParams->efbi = 0x0U; mcanCfgParams->pxhddisable = 0x0U; mcanCfgParams->darEnable = 0x1U; mcanCfgParams->wkupReqEnable = 0x1U; mcanCfgParams->autoWkupEnable = 0x1U; mcanCfgParams->emulationEnable = 0x0U; mcanCfgParams->emulationFAck = 0x0U; mcanCfgParams->clkStopFAck = 0x0U; mcanCfgParams->wdcPreload = 0x0U; mcanCfgParams->tdcEnable = 0x1U; mcanCfgParams->tdcConfig.tdcf = 0U; mcanCfgParams->tdcConfig.tdco = 8U; mcanCfgParams->monEnable = 0x0U; mcanCfgParams->asmEnable = 0x0U; mcanCfgParams->tsPrescalar = 0x0U; mcanCfgParams->tsSelect = 0x0U; mcanCfgParams->timeoutSelect = CANFD_MCANTimeOutSelect_CONT; mcanCfgParams->timeoutPreload = 0x0U; mcanCfgParams->timeoutCntEnable= 0x0U; mcanCfgParams->filterConfig.rrfe = 0x1U; mcanCfgParams->filterConfig.rrfs = 0x1U; mcanCfgParams->filterConfig.anfe = 0x2U; // Reject all non matching extended can-ids //chnaged from 0x1U to 0x2U mcanCfgParams->filterConfig.anfs = 0x2U; // Reject all non matching standard can-ids //chnaged from 0x1U to 0x2U mcanCfgParams->msgRAMConfig.lss = 127U; mcanCfgParams->msgRAMConfig.lse = 64U; mcanCfgParams->msgRAMConfig.txBufNum = 32U; mcanCfgParams->msgRAMConfig.txFIFOSize = 0U; mcanCfgParams->msgRAMConfig.txBufMode = 0U; mcanCfgParams->msgRAMConfig.txEventFIFOSize = 0U; mcanCfgParams->msgRAMConfig.txEventFIFOWaterMark = 0U; mcanCfgParams->msgRAMConfig.rxFIFO0size = 0U; mcanCfgParams->msgRAMConfig.rxFIFO0OpMode = 0U; mcanCfgParams->msgRAMConfig.rxFIFO0waterMark = 0U; mcanCfgParams->msgRAMConfig.rxFIFO1size = 64U; mcanCfgParams->msgRAMConfig.rxFIFO1waterMark = 64U; mcanCfgParams->msgRAMConfig.rxFIFO1OpMode = 64U; mcanCfgParams->eccConfig.enable = 1; mcanCfgParams->eccConfig.enableChk = 1; mcanCfgParams->eccConfig.enableRdModWr = 1; mcanCfgParams->errInterruptEnable = 1U; mcanCfgParams->dataInterruptEnable = 1U; mcanCfgParams->appErrCallBack = MCANAppErrStatusCallback; mcanCfgParams->appDataCallBack = MCANAppCallback;
Two RX message objects were created with IDs 0x3F5 and 0x3F7:
/* Setup the receive message object */ rxMsgObjectParams.direction = CANFD_Direction_RX; rxMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT; rxMsgObjectParams.msgIdentifier = CAN_RX_ID_3F5; rxMsgObjHandle3F5 = CANFD_createMsgObject(canHandle, &rxMsgObjectParams, &errCode); if (rxMsgObjHandle3F5 == NULL) { System_printf("Error: CANFD create Rx message object failed [Error code %d]\n", errCode); return; } rxMsgObjectParams.direction = CANFD_Direction_RX; rxMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT; rxMsgObjectParams.msgIdentifier = CAN_RX_ID_3F7; rxMsgObjHandle3F7 = CANFD_createMsgObject(canHandle, &rxMsgObjectParams, &errCode); if (rxMsgObjHandle3F7 == NULL) { System_printf("Error: CANFD create Rx message object failed [Error code %d]\n", errCode); return; }
Attempted Solutions:
1.Modified filter configuration:
mcanCfgParams->filterConfig.anfe = 0x2U; // Reject all non matching extended can-ids //changed from 0x1U to 0x2U
mcanCfgParams->filterConfig.anfs = 0x2U; // Reject all non matching standard can-ids //changed from 0x1U to 0x2U
2.Commented out the system_printf error checking:
if (rxFrameType != frameType)
{
//System_printf ("Error: CAN received incorrect frame type Sent %d Received %d for iteration %d failed\n", frameType, rxFrameType, iterationCount);
return;
}
3.Attempted using the CANFD_createRxRangeMsgObject API as suggested in similar thread. Still of no avail
Is there a correct way to set CAN filters and masks to receive only these two specific CAN IDs (0x3F5 and 0x3F7), preventing other CAN IDs from triggering the CANRX interrupt?