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.

[参考译文] TMS320F280025C:发送和接收 CAN 消息

Guru**** 2415590 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1103183/tms320f280025c-send-and-receive-can-messages

器件型号:TMS320F280025C
主题中讨论的其他器件:C2000WARE

您好!

需要 发送和接收 CAN 消息的方向。

我想发送具有任意 CANID 和数据的 CAN 消息

2.我想接收  带有任意 CANID 和数据的 CAN 报文

全双工 TX 和 RX。

 

如何设置 CAN 控制器?

在  这两种情况下、CAN_setupMessageObject 中的 Objid、msgIDMask 应该是什么。

谢谢

成形术

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

    成形术、  

    请从 https://www.ti.com/tool/C2000WARE 下载最新的 C2000ware 软件包 、以访问 C2000器件的示例、驱动程序和相关文件。

    在此软件包中、转到"C2000Ware_X_XX_00_00\driverlib\f28002x\examples\cAN"。 具体而言、请查看示例"CAN_Ex5_Transmit _Receive"、其中提供了用于发送和接收 CAN 消息的代码。

    如有其他问题、请告知我们。

    谢谢。

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

    你(们)好

    在建议的示例中、RX 设置预先已知 ID 为0x15555555。 如果我事先不知道 ID、这将不起作用。

    CAN_setupMessageObject (CANA_base、RX_MSG_obj_ID、0x15555555、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_RX、0、
    CAN_MSG_OBJ_RX_INT_ENABLE、MSG_DATA_LENGTH);

    在现实生活中、我可以获得包含任何 ID 的消息。

    如何设置 CAN RX 以获取包含任何 ID 的消息?

    谢谢

    成形术

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

    成形术、

    [引用 userid="359668" URL"~支持/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1103183/tms320f280025c-send-and-receive-can-messages/4093178#4093178"]在实际生活中、我可以收到包含任何 ID 的消息。

    您对此很正确、这就是  为什么它具有验收滤波功能的原因。  

    为了将消息对象设置为接受具有任何 ID 的消息、函数调用将如下所示:

    CAN_setupMessageObject (CANA_base、RX_MSG_obj_ID、0x15555555、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_RX、0、
    CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_USE_ID_FILTER、MSG_DATA_LENGTH);

    设置标志"CAN_MSG_obj_use_ID_filter"将允许使用滤波来解析消息 ID、函数中的前一个参数将允许位掩码接受特定的 msgID。 请查看器件 TRM、了解有关验收滤波的更多信息、尤其是 CAN_IF1MSK 寄存器。  

    请参阅示例"CAN_EX8_MASK"以了解如何利用验收滤波。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="359668" URL"支持/微控制器/C2000-microset-group/c2000/f/c2000-microset-forum/1103183/tms320f280025c-send-and-receive-ca-messages]1. 我希望发送具有任意 CANID 和数据的 CAN 消息[/QUERPLET]

    每次都需要使用 ID 和数据来初始化消息对象。

    [~ userid="359668" URL"支持/微控制器/C2000-microset-group/c2000/f/c2000-microset-forum/1103183/tms320f280025c-send-and-receive-ca-messages"]2. 我希望接收具有  任意 CANID 和数据的 CAN 消息[/QUERPLET]

    您需要以接收任何 ID 的方式设置接受屏蔽。 请参阅 C2000ware 中的掩码示例(C:\ti\c2000\C2000Ware_4_00_00_00\driverlib\f28002x\examples\CAN\CAN_EX8_mask.c)。 我已在应用报告(www.ti.com/lit/SPRACE5)中解释了此示例的操作。  

    [引用 userid="359668" URL"~支持/microset/C2000-microset-group/c2000-f/C2000-microset-forum/1103183/tms320f280025c-send-and-receive-ca-messages"]全双工 TX 和 RX。

    不确定这意味着什么。 根据协议的性质、CAN 是半双工。 在任何给定的时间点、节点都可以发送接收、但不能同时发送或接收。

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

    您好!

    我也尝试过这种方法。

    此示例使用轮询而不是中断。

    如果我使用本示例中的掩码、中断的行为会有所不同。

    也就是说、我获得中断、但是 CAN_getInterruptCuse, (CAN_INT 寄存器(偏移= 10h))改变了它的运行方式。  

    而不是返回"引起中断的报文对象数"、它应该是数字1到32、我得到 0x8000。

    这是预料之中的吗? 我出了什么问题?

    此致

    成形术

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

    成形术、

    函数  CAN_getInterruptCused 本质上读取寄存器 CAN_INT。 如果您提到器件 TRM (请参阅随附的代码段)、则会得到值0x8000表示 CAN 操作中存在错误。 请检查您的工作。 您可以参考示例"CAN_ex2_loopback _interrupts"来了解如何操作中断。  

    谢谢。

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

    您好!

    CAN_ex2_loopback_interrupts 使用特定的消息 ID。 这不是真实使用案例。

    CAN_setupMessageObject (CANA_base、RX_MSG_OBJ_ID、0x1、CAN_MSG_FRAME_STD、
    CAN_MSG_OBJ_TYPE_RX、0、CAN_MSG_OBJ_RX_INT_ENABLE、
    MSG_DATA_LENGTH);

     任何修改 示例和使用 CAN_MSG_OBJ_USE_ID_FILTER 的尝试 都会导致  CAN_INT 的行为发生变化。

    也就是说、我在 CAN_INT 中获得错误指示、而不是对象编号(1或2)。

    尽管  从 CAN_INT 读取了0x8000、但我仍然可以读取 CAN RX 数据并获取有效帧的奇怪之处。 我可以信任这种行为吗?

    我需要有关如何同时正确使用 CAN_MSG_OBJ_USE_ID_FILTER  和 CAN_INT 的说明。

    需要 CAN_MSG_OBJ_USE_ID_FILTER 与 RX 中断一起使用的示例/说明。

    谢谢

    成形术

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

    成形术、

        您是否尝试过:

    CAN_setupMessageObject (CANA_base、RX_MSG_OBJ_ID、0x1、CAN_MSG_FRAME_STD、

    CAN_MSG_OBJ_TYPE_RX、0、(CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_RX_INT_ENABLE)、

    MSG_DATA_LENGTH);

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

    你(们)好

    它看起来、对于每个 RX 和 TX 中断、我都会获得额外的中断  

    CAN_O_INT 中的0x8000U        0x10U  //中断寄存器

    当发生这种情况时、我看到了  

    8英寸 CAN_O_ES       0x4U   //错误和状态寄存器

    为什么我为每个 TX 和 RX 事件获得额外的中断? 这是正常的吗?

    谢谢

    成形术

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

    Randy、

       ISR 将在每一帧执行两次、第一次执行状态更改、第二次执行消息目标中断。  

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

    你(们)好

    是否可以消除不必要的中断?

    谢谢

    成形术

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

    您可以禁用状态中断(CAN_CTL 寄存器的位2)。