工具/软件:Code Composer Studio
你(们)好。
通过修改 CSL_USB_CdcExample、我一直在专有电路板上使用 CDC 正确处理 USB、使用 CSL 库和 C5517器件。
由于应用的速度限制、我决定使用 USB 控制器随附的 CPPI DMA。
首先、我现在的目标是正确枚举主机上的 CDC 连接并从目标连续发送4字节有效载荷(0xABCD1234)。 周期为1秒。 为此、我不使用主机应用程序:我只需打开一个终端(TeraTerm)、即可监控从器件传输的数据包。
在"CSL_USB_DMA_example"之后、我初始化 USB DMA 调用
USB_initQueueManager (&hpdtx、linking_ram0);
usb_initdma();
操作模式仅作为 DMA Tx:
USBConfig.opMode = CSL_USB_OPMODE_DMA_TXONLY;
我在主机上正确地看到 CDC 枚举和 COM、但当我尝试从目标发送数据包时、我在终端(TeraTerm)上看不到它、并且使用 USB 流量监控器时也不会捕获数据包。
我正在配置 DMA 一次、就在"USB_connectDev"之后
/*连接 USB 设备*/
状态= USB_connectDev (gUsbDevHandle);
if (status!= CSL_Sok)
{
printf ("USB 连接失败\n");
返回(结果);
}
// DMA 初始化。
usb_initdma();
USB_initQueueManager (&hpdtx、linking_ram0);
EP3上的// DMA Tx 配置。
USB_confDmaTx (CSL_USB_EP3、&hpdtx、USB_INLITY_num_Bytes_test、usbDataBuffer3、false);
变量定义如下(buffer2和 buffer3根据示例在命令文件上定义、因此它位于 SARAM 上):
CSL_UsbHostPtcr Deshpdtx;
uint16 usb_income num_Bytes_test = 4;
#define CSL_USB_DATA_SIZE 64
#pragma DATA_SECTION (usbDataBuffer3、".buffer3")
uint16 usbDataBuffer3[CSL_USB_DATA_SIZE];
#define CSL_USB_LRAM_SIZE (256)
#pragma DATA_SECTION (linking_ram0、".buffer2")
uint32 linking_ram0[CSL_USB_LRAM_SIZE];
为了传输数据包、我执行以下函数:
while (1)
{
USB_dmaTxStart (CSL_USB_EP3);
等待1秒...
}
我使用的是全速 USB、由于硬件限制、我无法配置高速连接。
为什么您认为这不起作用?
我从"CSL_USB_DMA_example"中看到配置了多个 EP:使用 CDC 将目标 到主机的数据传输到通信 EP3。 我是否可以仅为 DMA Tx 配置 EP3?
CSL 函数"CDC_OpenFullspeed"会强制 每个 EP 的 USBConfig.opMode 为"CSL_USB_OPMODE_Polled"、原因是什么?
谢谢你