在usb中断处理函数里面设置了发送完成标志,但是我不确定这样是否正确请指教,程序现在出现有时候上一帧数据丢帧现象,也就是实际上上一帧并没有发送出去,直接就发送下一帧了,也就是第一帧丢失,请教一下到底如何判断usb已经上传发送数据完成。
case USBHD_UIS_TOKEN_IN | 3:
USBOTG_FS->UEP3_TX_CTRL ^= USBHD_UEP_T_TOG;
USBOTG_FS->UEP3_TX_CTRL = (USBOTG_FS->UEP3_TX_CTRL & ~USBHD_UEP_T_RES_MASK) | USBHD_UEP_T_RES_NAK;
USBFS_Endp_Busy[ DEF_UEP3 ] = 0;
uep3_sendok=0;
break;
在发送函数里面 判断发送完成标志,发送完成才能发送接下来的数据。
if(bEpNum == ENDP3)
{
//if(USBOTG_FS->UEP3_TX_CTRL & USBHD_UEP_T_RES_MASK == USBHD_UEP_T_RES_ACK) return FAILURE;
//while(USBOTG_FS->UEP3_TX_CTRL & USBHD_UEP_T_RES_MASK == USBHD_UEP_T_RES_ACK);
while((uep3_sendok!=0)&&(i>0)){--i;delay_us(150); }// 发送完成标志,如果连续延时5次发送失败 超时
//USBFS_Endp_DataUp(DEF_UEP3, data, dataNum, 1 );
memcpy( pEP3_IN_DataBuf, data,dataNum);
DevEP3_IN_Deal(dataNum); //设置NAK表示端点3正忙。
// delay_ns(250);
uep3_sendok=1;
return SUCCESS;