在usb中斷處理函數(shù)里面設(shè)置了發(fā)送完成標(biāo)志,但是我不確定這樣是否正確請指教,程序現(xiàn)在出現(xiàn)有時候上一幀數(shù)據(jù)丟幀現(xiàn)象,也就是實際上上一幀并沒有發(fā)送出去,直接就發(fā)送下一幀了,也就是第一幀丟失,請教一下到底如何判斷usb已經(jīng)上傳發(fā)送數(shù)據(jù)完成。
? ? ? ? ? ? ? ? ? ? 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;
在發(fā)送函數(shù)里面 判斷發(fā)送完成標(biāo)志,發(fā)送完成才能發(fā)送接下來的數(shù)據(jù)。
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); }// 發(fā)送完成標(biāo)志,如果連續(xù)延時5次發(fā)送失敗 超時
//USBFS_Endp_DataUp(DEF_UEP3, data, dataNum, 1 );
memcpy( pEP3_IN_DataBuf, data,dataNum);? ?
DevEP3_IN_Deal(dataNum); //設(shè)置NAK表示端點3正忙。
// delay_ns(250);
uep3_sendok=1;
? ?return SUCCESS;