TI中文支持网
TI专业的中文技术问题搜集分享网站

IWR1843: 1843 CAN出错

Part Number:IWR1843Other Parts Discussed in Thread:SYSBIOS

我在使用1843 CAN时遇到这么一个问题,

如果我向1843发送一个已经注册过的CAN ID时,比如如下配置0x100,程序不会有问题。

/* Setup the receive message object */
{
CANFD_MCANMsgObjCfgParams rxMsgObjectParams;
int32_t errCode = 0;
rxMsgObjectParams.direction = CANFD_Direction_RX;
rxMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT;
rxMsgObjectParams.msgIdentifier = 0x100;
rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
if (rxMsgObjHandle == NULL)
{
//System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
return -1;
}
}

如果我发送没有被注册的CAN ID 如0X101,程序就会出错,如下所示。

Exception occurred in ThreadType_Hwi.
Hwi handle: 0x0.
Hwi stack base: 0x800eab0.
Hwi stack size: 0x1000.
R0 = 0xbebebebe R8 = 0x00000001
R1 = 0xff040000 R9 = 0x00000000
R2 = 0x00000004 R10 = 0x08000005
R3 = 0x00000000 R11 = 0xff500000
R4 = 0x08005de8 R12 = 0x00000007
R5 = 0xff500000 SP(R13) = 0x0800f9e0
R6 = 0x08006058 LR(R14) = 0x000099ad
R7 = 0x00000001 PC(R15) = 0x00010754
PSR = 0x400c019f
DFSR = 0x00000001 IFSR = 0x00000000
DFAR = 0xbebebee2 IFAR = 0x00000000
ti.sysbios.family.arm.exc.Exception: line 205: E_dataAbort: pc = 0x00010754, lr = 0x000099ad.
xdc.runtime.Error.raise: terminating execution

CAN具体配置如下,CAN配置在1642上使用时没有这种问题:

/* Initialize the CANFD driver */
{
CANFD_MCANInitParams mcanCfgParams;
int32_t errCode = 0;
MCANAppInitParams (&mcanCfgParams);
canHandle = CANFD_init(0,&mcanCfgParams, &errCode);
if (canHandle == NULL)
{
//System_printf ("Error: CANFD Module Initialization failed [Error code %d]\n", errCode);
return -1;
}
}

/*Intialize MCAN Config Params*/
memset (mcanCfgParams, sizeof (CANFD_MCANInitParams), 0);

mcanCfgParams->fdMode = 0x1U;
mcanCfgParams->brsEnable = 0x1U;
mcanCfgParams->txpEnable = 0x0U;
mcanCfgParams->efbi = 0x0U;
mcanCfgParams->pxhddisable = 0x0U;
mcanCfgParams->darEnable = 0x0U;
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 = 0x1U;
mcanCfgParams->filterConfig.anfs = 0x1U;
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;

// Nominal Bit rate = (40)/(((8+6+5)+1)*BRP) = 500khz
{
CANFD_MCANBitTimingParams mcanBitTimingParams;
int32_t retVal = 0;
int32_t errCode = 0;
mcanBitTimingParams.nomBrp = 0x4U;
mcanBitTimingParams.nomPropSeg = 0x8U;
mcanBitTimingParams.nomPseg1 = 0x6U;
mcanBitTimingParams.nomPseg2 = 0x5U;
mcanBitTimingParams.nomSjw = 0x1U;
mcanBitTimingParams.dataBrp = 0x2U;
mcanBitTimingParams.dataPropSeg = 0x2U;
mcanBitTimingParams.dataPseg1 = 0x2U;
mcanBitTimingParams.dataPseg2 = 0x3U;
mcanBitTimingParams.dataSjw = 0x1U;
/* Configure the CAN driver */
retVal = CANFD_configBitTime (canHandle, &mcanBitTimingParams, &errCode);
if (retVal < 0)
{
//System_printf ("Error: CANFD Module configure bit time failed [Error code %d]\n", errCode);
return -1;
}
}

/* Setup the transmit message object */
{
CANFD_MCANMsgObjCfgParams txMsgObjectParams;
int32_t errCode = 0;
txMsgObjectParams.direction = CANFD_Direction_TX;
txMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT;
txMsgObjectParams.msgIdentifier = 0xc1;
txMsgObjHandle = CANFD_createMsgObject (canHandle, &txMsgObjectParams, &errCode);
if (txMsgObjHandle == NULL)
{
//System_printf ("Error: CANFD create Tx message object failed [Error code %d]\n", errCode);
return -1;
}
}

/* Setup the receive message object */
{
CANFD_MCANMsgObjCfgParams rxMsgObjectParams;
int32_t errCode = 0;
rxMsgObjectParams.direction = CANFD_Direction_RX;
rxMsgObjectParams.msgIdType = CANFD_MCANXidType_11_BIT;
rxMsgObjectParams.msgIdentifier = 0x3f5;
rxMsgObjHandle = CANFD_createMsgObject (canHandle, &rxMsgObjectParams, &errCode);
if (rxMsgObjHandle == NULL)
{
//System_printf ("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
return -1;
}
}

Shine:

请问用的是哪个SDK版本?请参考下面的帖子。https://e2echina.ti.com/support/archived-forums/f/other-analog-forum/187181/awr1843-can-fd-idhttps://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/895947/awr1843boost-awr1843-can-fd-receives-unregistered-id-to-crash

赞(0)
未经允许不得转载:TI中文支持网 » IWR1843: 1843 CAN出错
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1