This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
TMS570中的can节点通信需要设置相应的Messagebox,那如果跟别的设备can通信的话如何知道应该使用哪个messagebox呢?和多个其他设备进行can通信的话发送和接收可以使用同一个messagebox吗?
就是不太明白这个messagebox应该如何配置,还请指点~
regards,
yong
Hi Yong,
如果TMS570和其他设备通过CAN总线通信的话,选择哪个messagebox无所谓,关键是被选中的messagebox需要设置位输出,同时该messagebox对应的CAN message的ID必须和你需要通信的CAN设备的ID一致,不然通信建立不起来。
如果和多个设备通信的话,我们一般还是建议你选择不同的messagebox,然后每个messagebox对应发送或者是接收,以及不同的ID。如果你要使用同一个messagebox的话,会比较麻烦,需要你不停的改变CAN的设置(发送和接收的切换以及不同ID的切换)。
Ken Wang
Hi Yong
你可以在CAN模块的初始化函数里面设置。即设置canREG1->IFxARB,或者是在HALCOGEN的CAN配置界面里面设置。同时我刚在另外一个帖子里面上传了一个CNA的例程,你可以下载下来看看,参考一下。
Ken
如果将can总线接收mask设置成00000000,既不按ID进行屏蔽,那么可以收到其他节点不同ID的消息,那么接收到的can帧的ID从哪里可以得到呢?
Regards
yong
Hi Yong,
你可以通过使能IF3去监测IF1或 IF2接收的报文,并同步更新接收到的ID,你就可以通过IF3的ARB寄存器得到响应你的总线ID。
举个例子来说,需要考虑下面几个设置:
canREG1->IF3OBS =?
canREG1->IF3UEy[0] =?
Received_ID = (canREG1->IF3ARB & 0x1FFC0000)>>18 ;
Ken
感谢二位的回复,另外有个问题,如果使用有个Message Objects分两次发送不同的数据,这个间隔时间是多少才不会影响第二次发送呢?我试用的后发现如果紧接着用这个messagebox发送另一个数据,接收端则接收不到第二次的数据,但单步调试的时候是可以的,所以想的是会不会是间隔时间太短的原因。
Hi yong,
对于你这种情况,建议使用FIFO来发送和接收数据。
把要发送的数据全都写入发送FIFO后再开始发送。
接收端FIFO接收完所有数据后再依次读取。
Regards,
Jay