CH573/CH573 USB IN端点发送数据给PC,怎么知道数据已经发送完成?
由于项目中UART都使用了,于是USB CDC例程通过USB打印log,发现有些log打印不出来,判断问题出在端点发送上,代码没有实现发送完成判断,每次调用usb发送都是简单机械的往端点2里面填充
void?USBSendData(uint8_t?*SendBuf,uint8_t?l) { ????usb_sent_flag=0; ????memcpy(pEP2_IN_DataBuf,SendBuf,l); ????DevEP2_IN_Deal(l); }
我想再每次填充、写完发送长度后等待主机把缓冲区的数据取走后再跳出发送函数,查看USB中断处理代码,发现在中断处理代码中会将端点2的发送状态写成NAK:
case?UIS_TOKEN_IN?|?2: ????R8_UEP2_CTRL?=?(?R8_UEP2_CTRL?&?~MASK_UEP_T_RES?)?|?UEP_T_RES_NAK; break;
于是我想可不可以判断这个值呢,有了以下代码:
void?USBSendData(uint8_t?*SendBuf,?uint8_t?l) { ????usb_sent_flag?=?0; ????memcpy(pEP2_IN_DataBuf,SendBuf,l); ????DevEP2_IN_Deal(l); ????//等待发送完成 ????while((R8_UEP2_CTRL&MASK_UEP_T_RES)?==?UEP_T_RES_ACK) ????{ ????????WWDG_SetCounter(0x0); ????} }
但是发现不行,会一直等在这里,我这野路子估计不行,希望官方能给支个招,提前祝你国庆假期玩的开心!!!!
编辑原因,修改代码样式