大家好!
我最近用28377D和CAN分析仪通信时遇到了一些问题,搞了好多天没想明白,想在此请教。
目的:实现上位机发送数据帧通过CAN分析仪给到一个驱动器控制板上,然后又通过驱动器发送数据给到分析仪;
芯片:28377D;CAN分析仪,CAN配套上位界面,TI例程:can_loopback
例程代码:
int
main(void)
{
InitSysCtrl();
//对应28377D引脚
InitGpio();
GPIO_SetupPinMux(13, GPIO_MUX_CPU1, 2); //GPIO13 - CANRXB
GPIO_SetupPinMux(12, GPIO_MUX_CPU1, 2); //GPIO12 - CANTXB
GPIO_SetupPinOptions(13, GPIO_INPUT, GPIO_ASYNC);
GPIO_SetupPinOptions(12, GPIO_OUTPUT, GPIO_PUSHPULL);
CANInit(CANB_BASE);
CANClkSourceSelect(CANB_BASE, 0);
CANBitRateSet(CANB_BASE, 200000000, 250000);
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// HWREG(CANB_BASE + CAN_O_CTL) |= CAN_CTL_TEST;
// HWREG(CANB_BASE + CAN_O_TEST) = CAN_TEST_EXL;
// HWREG(CANB_BASE + CAN_O_TEST) = CAN_TEST_RX;
CANEnable(CANB_BASE);
*(unsigned long *)ucTXMsgData = 8;
sTXCANMessage.ui32MsgID = 5;
sTXCANMessage.ui32MsgIDMask = 0;
sTXCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;
sTXCANMessage.ui32MsgLen = sizeof(ucTXMsgData);
sTXCANMessage.pucMsgData = ucTXMsgData;
*(unsigned long *)ucRXMsgData = 8;
sRXCANMessage.ui32MsgID = 5;
sRXCANMessage.ui32MsgIDMask = 0;
sRXCANMessage.ui32Flags = MSG_OBJ_NO_FLAGS;
sRXCANMessage.ui32MsgLen = sizeof(ucRXMsgData);
sRXCANMessage.pucMsgData = ucRXMsgData;
CANMessageSet(CANB_BASE, 2, &sRXCANMessage, MSG_OBJ_TYPE_RX);
for(;;)
{
CANMessageSet(CANB_BASE, 1, &sTXCANMessage, MSG_OBJ_TYPE_TX);
DELAY_US(1000*1000);
CANMessageGet(CANB_BASE, 2, &sRXCANMessage, true);
if((*(unsigned long *)ucTXMsgData) != (*(unsigned long *)ucRXMsgData))
{
//asm(" ESTOP0")
}
g_ulMsgCount++;
(*(unsigned long *)ucTXMsgData)++;
}
}
我把测试模式给注释掉了,然后连接测试板用CCS在线调试
现象:CAN分析仪能够接收测试板发来的数据,而且是不断重复发送,发送好几条后数据才++,通过上位机界面设置好消息对象ID和发送的数据,发送后通过CCS的DBUG界面观察数组变量,没有接收到数据,我用了很多方法测试了,都不知道是什么问题。
我是不是漏掉什么了,我该如何解决,希望工程师们能给点建议。
第一次发帖,如有表述错误,望请纠正。