主题中讨论的其他器件:C2000WARE
您好!
需要 发送和接收 CAN 消息的方向。
我想发送具有任意 CANID 和数据的 CAN 消息
2.我想接收 带有任意 CANID 和数据的 CAN 报文
全双工 TX 和 RX。
如何设置 CAN 控制器?
在 这两种情况下、CAN_setupMessageObject 中的 Objid、msgIDMask 应该是什么。
谢谢
成形术
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.
您好!
需要 发送和接收 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"以了解如何利用验收滤波。
谢谢。
每次都需要使用 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_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 中断一起使用的示例/说明。
谢谢
成形术