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.
您好!
如今、我们将配置 f28377S CAN FIFO 来接收报文对象、但会出现以下问题:
1) 1) IF3是唯一可用于 FIFO 的接口。 对吗?
2) 2) FIFO 和中断之间的关系是什么? 如果6个对象组成一个 FIFO 缓冲区、何时会发生中断? 接收到6个物体、那么中断? 还是每个接收到的对象、是否启动了一个中断?
3) 3)如何实现客户请求:检查6个物体到达后读取。 在此过程中、还有一些其他问题:
读取所有6个对象需要多长时间? 读取位于 CAN_ISR 中、客户希望尽量缩短时间;
读取期间,如果另一个物体到达,会发生什么情况? 另一个 CAN 中断将被处理? 在退出 CAN_ISR 之前、它们是否需要清除中断位 INT0_FLG_CLR?
4) 4)是否有任何详细的文档供参考?
非常感谢。
BR、Jordan
约旦、您好!
很抱歉、我无法处理此问题。
据我所知、您尝试执行的操作是发送第一个对象、然后在经过3ms 的延迟后立即将三个对象一起发送、而不会有任何延迟。
您正在尝试使用 FIFO。
配置是否正确完成?
您是否使用了相同的 driverlib 示例代码、以及您对其进行了哪些更改? 您能否分享详细信息?
您能提供更多详细信息。
我可以尝试以您描述的相同方式进行复制、并为您举例?
此致
Harshmeet
约旦、您好!
很抱歉耽误你的回答。
因此、我尝试复制您刚才提到的情形。 我正在发送一个消息对象、然后等待3ms 并发送接下来的三个消息对象。
是如果未使用 FIFO、则对象将丢失。 根据我对 CAN 和我的工作的理解、我尝试了以下操作:
我将 C2000Ware 示例(CAN_ex3_external_transmit)分解为两个不同的示例:一个用于传输数据、另一个用于接收数据。 我使用两个 F2837XS Launchpad。
在第一个示例中、我发送根据配置消息框的数据、并在接收到第一个数据后提供3ms 的延迟。
在第二个示例中、我在配置消息对象后接收数据并进入 while (1)循环。 因此、每当接收到数据时、它都会进入 ISR。
如果我使用相同的消息 ID、则消息可能会丢失。 因此、我对数据使用不同的消息 ID、并且能够正确接收数据。
如果要使用相同的消息 ID、则需要延迟等待数据成功接收。
我需要详细了解如何在硬件中实现 FIFO。 希望这些信息有所帮助
谢谢、此致
Harshmeet Singh
约旦、您好!
请在下面找到这两个文件。
根据您提供的信息、我尝试复制它。
我正在使用两个 Launchpad、因为它们具有板载 CAN 收发器。 您可以在 CAN_ex3_external_receive 工程中复制该文件、以替换原始工程文件、
只需如下所示更改 device.h 文件中的 GPIO 配置、然后在项目中选择 define _LAUNCHXL_F28377S 即可。
//
// CANA
//
#define DEVICE_GPIO_PIN_CANTXA 71U // CANTXA 的 GPIO 编号
#define DEVICE_GPIO_PIN_CANRXA 70U // CANRXA 的 GPIO 编号
//
// CAN 外部环回
//
#define DEVICE_GPIO_CFG_CANRXA GPIO_70_CANRXA //针对 CANA RX 的"pinConfig"
#define DEVICE_GPIO_CFG_CANTXA GPIO_71_CANTXA //针对 CANA TX 的"pinConfig"
您必须具有两个 launchpad 和两个 CCS 实例、在这些实例中、您可以在项目中的两个 c 文件上运行、然后运行包含项目的接收 c 文件、然后运行传输项目。 您应该在结尾看到 rxMsgCount 为4
e2e.ti.com/.../can_5F00_ex3_5F00_external_5F00_receive.ce2e.ti.com/.../can_5F00_ex3_5F00_external_5F00_transmit.c
谢谢、此致
Harshmeet Singh
约旦、您好!
接收文件有两个文件、它们有一个 while (1);等待接收数据、接收数据时会有一个中断。
接收代码中的代码中有一个 ISR。 您将接收具有不同 ID 的对象、这些 ID 由传输代码传输。
此致
Harshmeet
约旦、您好!
如果没有 CAN 收发器、则两个 CAN 控制器之间无法通信。
1) 1) CAN_EXTERNAL_Transmit 中配置了四个 FIFO 对象。 这四个报文对象将数据发送到第二个 CAN 控制器、该控制器接收数据。 我这样做是为了在发送数据之间没有延迟。
注意:如果使用同一个报文对象、则两次数据传输之间必须有一定的延迟。
2) 2)在 CAN_EXTERNAL_Receive 中有 while (1)等待接收报文对象。 它进入代码中的 ISR"canaISR()"。 ISR 中有用于清除中断的代码。 读取报文后、会有一个 API CAN_clearInterruptStatus 清除中断状态、以便下一个报文对象可以触发中断。 CAN_clearGlobalInterruptStatus 和 Interrupt_clearACKGroup API 清除全局中断状态和 ACKGroup API。
我有两个 F2837xS Launchpad。 控制卡上有用于 CAN 控制器的片上 CAN 收发器。 我连接 CAN H、CAN L 和接地。 我运行两个代码、这两个代码具有两个 CCS 实例。 现在、我运行 CAN_EXTERNAL_Receive、它进入等待状态以接收数据。 然后、我运行 CAN_EXTERNAL_SEND 代码并发送数据。
指针:时钟配置和 GPIO 配置必须正确。 检查消息 RAM 以查看配置是否正确完成、以及当数据被接收检查时、是否在消息 RAM 中的正确对象中接收到数据。
谢谢、此致、
Harshmeet
发送端代码:
/cfs-file/__key/communityserver-discussions-components-files/171/can_5F00_external_5F00_transmit.c
接收边代码:
/cfs-file/__key/communityserver-discussions-components-files/171/can_5F00_external_5F00_receive.c