大家好!
我最近用28377D和CAN分析仪通信时遇到了一些问题,搞了好多天没想明白,想在此请教。
目的:实现上位机发送数据帧通过CAN分析仪给到一个驱动器控制板上,然后又通过驱动器发送数据给到分析仪;
芯片:28377D;CAN分析仪,CAN配套上位界面,TI的controlsuite例程:can_loopback
例程代码:
int
main(void)
{InitSysCtrl();//对应28377D引脚InitGpio();GPIO_SetupPinMux(13, GPIO_MUX_CPU1, 2); //GPIO13 - CANRXBGPIO_SetupPinMux(12, GPIO_MUX_CPU1, 2); //GPIO12 - CANTXBGPIO_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界面观察数组变量,没有接收到数据,我用了很多方法测试了,都不知道是什么问题。
我是不是漏掉什么了,我该如何解决,希望工程师们能给点建议。
第一次发帖,如有表述错误,望请纠正。
user6154130:
上位机界面能够查看测试板发送过来的数据,而且是不断重复发送,但我通过上位机界面发送数据给测试板时,CAN分析仪指示灯显示数据没有被接收,我通过CANMessageSet()函数设置消息编号2为接收,但为什么不能够接收数据呀
mangui zhang:
回复 user6154130:
简单的原理分享帖,看看能不能帮到你
e2echina.ti.com/…/187227
user6154130:
回复 mangui zhang:
好的谢谢,我先看看