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
约旦、您好!
每个 CAN 数据将触发一个中断。
您能否参阅 CAN 的 c2000ware 示例: CAN_ex3_external_transmit
在本示例中、数据从 CAN A 发送到 CAN B。清除中断和中断。
谢谢、此致
Harshmeet
约旦、您好!
我可以共享这两个 c 文件吗?
但愿这有所帮助。
此致
Harshmeet
约旦、您好!
请在下面找到这两个文件。
根据您提供的信息、我尝试复制它。
我正在使用两个 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