TI中文支持网
TI专业的中文技术问题搜集分享网站

28075 can通信例程选择问题

问题1:C2000Ware_3_02_00_00_setup 安装后。C:\ti\c2000\C2000Ware_3_02_00_00\device_support\f2807x\examples\cpu1\can_loopback\cpu01 路径下的can信息发送接收的驱动函数

CANMessageSet(uint32_t ui32Base, uint32_t ui32ObjID, tCANMsgObject *pMsgObject,
tMsgObjType eMsgType)

。和 C:\ti\c2000\C2000Ware_3_02_00_00\driverlib\f2807x\examples\cpu1\can 驱动函数不一样。

CAN_setupMessageObject(uint32_t base, uint32_t objID, uint32_t msgID,
CAN_MsgFrameType frame, CAN_MsgObjType msgType,
uint32_t msgIDMask, uint32_t flags, uint16_t msgLen);

CAN_sendMessage(uint32_t base, uint32_t objID, uint16_t msgLen,
const uint16_t *msgData);

前者在邮箱发送时会配置寄存器,而后者先配置邮箱寄存器,然后发送can通信时无需再次配置寄存器。缩短发送函数的运行时间。请问这两种方式该如何选择?

robin y:

回复 Susan Yang:

//// Enable CAN test mode with external loopback//CAN_enableTestMode(CANA_BASE, CAN_TEST_EXL);//
can通信按照例程配置为外部循环模式。// Initialize the transmit message object used for sending CAN messages.// Message Object Parameters://Message Object ID Number: 1//Message ID: 0x3FF (STDID should be from 0x1 through 0x7FF only)//Message Frame: Standard//Message Type: Transmit//Message ID Mask: 0x0//Message Object Flags: None//Message Data Length: 2 Bytes//CAN_setupMessageObject(CANA_BASE, 1, 0x3FFF, CAN_MSG_FRAME_EXT,CAN_MSG_OBJ_TYPE_TX, 0xFFFF, CAN_MSG_OBJ_NO_FLAGS,2);
CAN_setupMessageObject(CANA_BASE, 3, 0x3F01, CAN_MSG_FRAME_EXT,CAN_MSG_OBJ_TYPE_TX, 0xFFFF, CAN_MSG_OBJ_NO_FLAGS,2);
//// Initialize the receive message object used for receiving CAN messages.// Message Object Parameters://Message Object ID Number: 2//Message ID: 0x3FF (STDID should be from 0x1 through 0x7FF only)//Message Frame: Standard//Message Type: Receive//Message ID Mask: 0x0//Message Object Flags: None//Message Data Length: 2 Bytes (Note that DLC field is a "don't care"//for a Receive mailbox//CAN_setupMessageObject(CANA_BASE, 2, 0x3FFF, CAN_MSG_FRAME_EXT,CAN_MSG_OBJ_TYPE_RX, 0xFFFF, (CAN_MSG_OBJ_USE_EXT_FILTER | CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_NO_FLAGS),2);CAN_setupMessageObject(CANA_BASE, 10, 0x3F01, CAN_MSG_FRAME_EXT,CAN_MSG_OBJ_TYPE_RX, 0xFFFF, (CAN_MSG_OBJ_USE_EXT_FILTER | CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_NO_FLAGS),2);
配置了邮箱1 和3 是发送邮箱,邮箱1 的 Message ID 是 0x3FFF 。邮箱3 的 Message ID 是0x3F01。
邮箱2和邮箱10是接收邮箱。把邮箱2 的 Message ID 配置为 0x3FFF 。邮箱10 的 Message ID 配置为0x3F01。
以上可以正常接收,邮箱2 接受的是邮箱1 的数据。邮箱10 接收的是邮箱3的数据。
但是把邮箱2 和邮箱10 的 Message ID 对调,就无法接收到数据。想问下是什么逻辑导致的呢?

Susan Yang:

回复 robin y:

应该是Message ID Mask的设置问题,请将第6个参数0xFFFF改为0xFF00试一下

robin y:

回复 Susan Yang:

谢谢。我再找下原因。刚替换Message ID 的目的是想测试,多帧can数据,能不能通过Message ID和 Message ID Mask 实现指定的邮箱接收数据。比如:配置了发送邮箱1 和接收邮箱3 。接收邮箱2 和接收邮箱10 。想看下能不能实现邮箱1的数据邮箱10接收。邮箱3的数据邮箱2接收。

robin y:

回复 Susan Yang:

对调接收邮箱的 Message ID是可以的。之前是我的应用程序有异常。可以实现指定的邮箱接收can信息。谢谢!

Susan Yang:

回复 robin y:

很高兴您能解决问题!

赞(0)
未经允许不得转载:TI中文支持网 » 28075 can通信例程选择问题
分享到: 更多 (0)