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.

[参考译文] TMS320F28379D:C2000可在所有邮箱/对象 ID/接口上进行示例代码写入)

Guru**** 2589280 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, C2000WARE, TMS320F28379D

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/872276/tms320f28379d-c2000-can-example-code-writing-on-all-mailboxes-object-ids-interfaces

器件型号:TMS320F28379D
主题中讨论的其他器件:LAUNCHXL-F28379DC2000WARE

注意:此错误发生在 LAUNCHXL-F28379D 开发套件上

我正在使用的 C2000示例代码位于:\c2000\C2000Ware_2_00_00_03\driverlib\f2837xd\examples\cpu1\cAN_ex4_simple_transmit

据我了解、TX_MSG_OBJ_ID 与邮箱和接口具有相同的含义。 但是、当我运行代码时、我会在接口的每个选项上接收到消息。

(代码指定了500k 波特、但实际上以250k 的速率将其发送出去)

National Instruments NI USB-8473s 高速 CAN


我的目的是在接口 CAN1上发送一条消息、而在 CAN2上发送另一条消息

我使用以下定义来实现这一点

#define TX_MSG_OBJ_ID 1.
#define TX_MSG_OBJ_ID2

使用此功能对其进行设置

CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x955555、CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、 0、CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID2、0x955556、 CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、 0、 CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);

然后循环发送

CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID、MSG_DATA_LENGTH、txMsgData);
CAN_sendMessage (CANB_BASE、TX_MSG_OBJ_ID2、MSG_DATA_LENGTH、txMsgData);

但是、我在每个接口上都收到这两条消息(下面显示的 CAN7)

P.S. 我似乎也遇到了与其他 CAN 示例项目相同的问题:

c2000\C2000Ware_2_00_00_03\device_support\f2837xd\examples\cpu1\can_external_transmit \cpu01\can_external_transmit

以下是来自 CAN.h 的函数:  
Objid 是有问题的变量

//
//
//! 设置消息对象
//!
//! \param base 是 CAN 控制器的基地址。
//! param Objid 是要配置的消息对象编号(1-32)。
//! \param msgid 是用于11或29位
//! 标识符
//! \param 帧是 CAN ID 帧类型
//! \param msgType 是消息对象类型
//! \param msgIDMask 是标识符
//!时使用的 CAN 消息标识符掩码 已启用过滤
//! \param flags 是要为消息设置的各种标志和设置
//! 对象
//! \param msgLen 是消息对象中数据的字节数(0-8)
//!
//! 此函数设置报文对象所需的各种值。
//!
//! 帧参数可以是以下值之一:
//! -\b CAN_MSG_FRAME_STD -标准11位标识
符//! -\b CAN_MSG_FRAME_EXT -扩展的29位标识
符//!
//! e msgType 参数可以是以下值之一:
//! -\b CAN_MSG_OBJ_TYPE_TX -传输消息
//! -\b CAN_MSG_OBJ_TYPE_TX_REMOTE -发送远程消息
//! -\b CAN_MSG_OBJ_TYPE_RX -接收消息
//! -\b CAN_MSG_OBJ_TYPE_RxTx_REMOTE -用
//接收远程消息! 自动传输
//!
//! 如果没有标志
//、可以将\e flags 参数设置为\b CAN_MSG_OBJ_NO_FLAGS! 是必需的、或者参数可以是以下
任何一项的逻辑或//! 值:
//! -\b CAN_MSG_OBJ_TX_INT_ENABLE -启用发送中断
//! -\b CAN_MSG_OBJ_RX_INT_ENABLE -启用接收中断
//! -\b CAN_MSG_OBJ_USE_ID_FILTER -使用基于消息 ID 的过滤
//! -\b CAN_MSG_OBJ_USE_EXT_FILTER -使用基于扩展//
的过滤! 消息 ID
//! -\b CAN_MSG_obj_use_DIR_filter -根据
//的方向使用滤波! 转接
//! -\b CAN_MSG_OBJ_FIFO -消息对象是 FIFO 的一部分
//! 结构、不是最终消息
//! FIFO 中的对象
//!
//! 如果筛选基于消息标识符、则值
//! b CAN_MSG_OBJ_USE_ID_FILTER 必须与\e 标志进行逻辑或运算
//! 参数和\b CAN_MSG_OBJ_USE_EXT_FILTER 也必须为
//进行 OR 运算! 基于扩展标识符的消息标识符过滤。
//!
//! 注意接收消息对象的\b msgLen 参数是"请勿
//! 但由于断言,其价值应介于0-8之间。
//!
//! \无返回。
////
*****************
extern void
CAN_setupMessageObject (uint32_t base、uint32_t Objid、uint32_t msgid、
CAN_MsgFrameType 帧、CAN_MsgObjType msgType、
uint32_t msgIDMask、uint32_t flags、uint16_t msgLen); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于 flags 参数、我在我想进行一些挖掘之前和之后传递 CAN_MSG_OBJ_NO_FLAGS

    CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_USE_EXT_FILTER

    可能可以工作、但它在广播到所有接口时仍然具有相同的行为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我正确地理解了您的设置、您将在 TMS320F28379D 上使用一个 CAN 控制 器、并使用一个 NI CAN 控制器作为总线监控接收器。 在此设置中、只有一条物理总线、所有活动控制器都能看到该总线上的所有流量。 您配置了两个 TX 邮箱、并使用这两个邮箱将相同的数据传输到同一总线上。

    我不熟悉 NI CAN "接口";您必须配置接收控制器/邮箱以过滤相关的消息 ID。

    看起来 TX 端正常工作、但您的 TX MSG-ID 太长 -以 EXT 格式截断为29位、如显示器/RX 端所示。