你好。 我正在尝试通过 USB 为我的器件设置数据传输。 我具有此功能、并将其传输到 LabWindow CVI GUI。
它基于计时器、设置为600Hz。 在每次调用 USBBufferWrite 之前、我都会设置一个标志来阻止来自计时器的任何其他传输。 然后、 在我的 TX 处理程序中发生 USB_EVENT_TX_COMPLETE 事件时、我清除该标志。 这样、我就设置了一个阻塞传输(虽然阻塞可能不是正确的字、但它不允许在缓冲区中同时进行多个传输)。 我将发送一个数据结构、因此我知道它的确切大小(310字节)。
将我的 TX 缓冲区大小设置为结构的确切大小是不够的、但是、最后几个字节没有将其设置到 USB 主机(在本例中为计算机/GUI)(仅显示309个字节)。 这对我来说很好、因为我只是将缓冲区大小增加到了下一个2 (512)的功率、并且传输数据工作正常(至少同样、尚未达到600Hz)。 不过、如果有人回答了为什么不起作用、我会很乐意听到。
然后、我尝试将速度提高到600Hz、偶尔它会变得不同步、并且不会从 USBBufferWrite 发送完整字节数。 这对我来说是没有意义的、因为它应该被阻断、因此 TX 缓冲区应该足够容纳每次310个字节?
请注意、清除标志的唯一位置是在 USB_EVENT_TX_COMPLETE 中、调用 USBBufferWrite 的唯一位置是该计时器。