Other Parts Discussed in Thread: C2000WARE
基于例程C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2837xd\examples\cpu1\can_loopback,使用CANA,只是将使用的GPIO口改为GPIO4和GPIO5,并将数组ucTXMsgData 和 ucRXMsgData长度改为8个元素,每次发送成功后自动+1,再将判断发送数据与接收数据是否一致的代码注释掉:if((ucTXMsgData[0] != ucRXMsgData[0]) ||(ucTXMsgData[1] != ucRXMsgData[1]))
其他部分不变。GPIO4和GPIO5 (分别对应CANA_TX和CANA_RX) 的信号经过电路变换 符合CAN总线:
然后通过一个usb-can适配器与电脑通信:
运行程序,可以看到电脑收到了数据:
接下来,我让电脑通过这个软件发送数据帧,让DSP接收,就是类似这样:
当然这此之前要先修改c程序,我的改动是:注释掉这两行代码:
HWREG(CANA_BASE + CAN_O_CTL) |= CAN_CTL_TEST;
HWREG(CANA_BASE + CAN_O_TEST) = CAN_TEST_EXL;
这样就不是外部环回模式了。我的理解是,如果DSP成功接收到CAN帧了, 观察ucRXMsgData的变化就知道。
结果是 ucRXMsgData一直不变,好像一直没收到数据?为什么会这样,我认为电路是没问题的,能发就能收,应该是c程序哪里不对,要怎么改。