大家好!
我最近用28377D和CAN分析仪通信时遇到了一些问题,搞了好多天没想明白,想在此请教。
目的:实现上位机发送数据帧通过CAN分析仪给到一个驱动器控制板上,然后又通过驱动器发送数据给到分析仪;
芯片:28377D;CAN分析仪,CAN配套上位界面,TI例程: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界面观察数组变量,没有接收到数据,我用了很多方法测试了,都不知道是什么问题。
我是不是漏掉什么了,我该如何解决,希望工程师们能给点建议。
第一次发帖,如有表述错误,望请纠正。
Shine:
28377D属于C2000系列,有专门的论坛可以咨询。
e2echina.ti.com/…/