工具/软件:Code Composer Studio
我尝试使用 TMDSRM48HDK 中的 USB 作为 USB_bulk. 我将 示例 USB_DEV_BULK 从 Tiva C 修改为我的器件。
我将端点1用于输入和输出、然后尝试从我的应用发送数据(它将发送数据并接收数据)
结果
接下来、我将端点2更改为 IN、将端点1更改为 OUT、然后再次测试
结果
第1轮:
第2轮:
我很好奇、为什么我可以使用端点1作为输入和输出。
这里是我的代码
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.
工具/软件:Code Composer Studio
我尝试使用 TMDSRM48HDK 中的 USB 作为 USB_bulk. 我将 示例 USB_DEV_BULK 从 Tiva C 修改为我的器件。
我将端点1用于输入和输出、然后尝试从我的应用发送数据(它将发送数据并接收数据)
结果
接下来、我将端点2更改为 IN、将端点1更改为 OUT、然后再次测试
结果
第1轮:
第2轮:
我很好奇、为什么我可以使用端点1作为输入和输出。
这里是我的代码
您好、QJ Wang
感谢您的回复!
数据表中
我认为它可以配置为输入和输出的方向、类型相同。
例如:
endpoint1 ->输入
endpoint1 ->输出
我弄错了吗?
/*****
*
*用于驱动程序中每个所需端点的端点。
*
(小部分 /
#define DATA_IN_端 点 (USB_EP_1)
#define DATA_OUT_端 点 (USB_EP_1)
const uint8 g_pui8BulkInterface[BULKINTERFACE_SIZE]=
{
/*
*通信类数据接口描述符。
*
9、 /*接口描述符的大小。 *
USB_DTYPE_interface、 /*此描述符的类型。 *
0、 /*此接口的索引。 *
0、 /*此接口的备用设置。 *
2、 /*由此使用的端点数量
*接口。 *
USB_class_vend_specific、 /*由定义的接口类常量
* USB-IF (规范5.1.3)。 *
0、 /*接口子类常量
*由 USB-IF 定义(规范5.1.3)。 *
0、 /*子类的接口协议
*在上面指定。 *
4、 /*此接口的字符串索引。 *
/*
*端点描述符
*
7、 /*端点描述符的大小。 *
USB_DTYPE_EndPoint、 /*描述符类型是一个端点。 *
USB_EP_DESC_IN | USB_EP_TO_INDEX (DATA_IN_端 点)、
USB_EP_ATTR_BULK、 /*端点是批量端点。 *
/*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
USBShort (DATA_IN_EP_MAX_SIZE)、 /*最大数据包大小。 *
0、 /*此端点的轮询间隔。 *
/*
*端点描述符
*
7、 /*端点描述符的大小。 *
USB_DTYPE_EndPoint、 /*描述符类型是一个端点。 *
USB_EP_DESC_OUT | USB_EP_TO_INDEX (DATA_OUT_终结 点)、
USB_EP_ATTR_BULK、 /*端点是批量端点。 *
/*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 185 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
/*SAFETYMCUSW 93 S "原因- LDRA 工具问题。"*/
USBShort (DATA_OUT_EP_MAX_SIZE)、/*最大数据包大小。 *
0、 /*此端点的轮询间隔。 *
};
当我使用2个批量端点时、endpoint1用于 ins、endpoint1用于 outs。
我从主机(PC)发出发送命令、然后是环回命令。
调用函数 ProcessDataFromHost、并将命令返回主机(PC)
但 未调用函数 ProcessDataToHost 将 TX 状态清除为空闲状态。
返回 ulStatus 为0x00020000
HandleEndpoints (void * pvBulkDevice、UINT32 ulStatus)
{
const tUSBDBulkDevice * psBulkDevice;
tBulkInstance * psInst;
assert (pvBulkDevice!= 0);
/*
*确定串行设备是处于单模式还是复合模式是因为
*在这两种情况下,ulIndex 的含义是不同的。
*
psBulkDevice = pvBulkDevice;
psInst = psBulkDevice->sPrivateData;
/*
批量输出数据端点的*处理程序。
*
/*SAFETYMCUSW 184 S "原因- LDRA 工具问题。"*/
if (((ulStatus &(0x10000u << USB_EP_TO_INDEX (psInst->ucBulkOUTEndpoint))!= 0U)
{
/*
*正在从主机向我们发送数据。
*
ProcessDataFromHost (psBulkDevice、ulStatus);
}
/*
数据端点中批量的*处理程序。
*
/*SAFETYMCUSW 184 S "原因- LDRA 工具问题。"*/
if ((ulStatus &(1U << USB_EP_TO_INDEX (psInst->ucBulkINEndpoint))!= 0U)
{
ProcessDataToHost (psBulkDevice、ulStatus);
}
}
和 ProcessDataFromHost 函数中
它称为-->USBDevEndpointStatusClear (psInst->ulUSBBase、
(uint32)(psInst->ucBulkINEndpoint)、
ulEPStatus);
在 USBDevEndpointStatusClear 函数中、它只是返回
问题
如何清除 TX 状态?
为什么在 USBDevEndpointStatusClear 函数中没有任何内容?