CH573/CH573 USB IN端點(diǎn)發(fā)送數(shù)據(jù)給PC,怎么知道數(shù)據(jù)已經(jīng)發(fā)送完成?
由于項(xiàng)目中UART都使用了,于是USB CDC例程通過USB打印log,發(fā)現(xiàn)有些log打印不出來,判斷問題出在端點(diǎn)發(fā)送上,代碼沒有實(shí)現(xiàn)發(fā)送完成判斷,每次調(diào)用usb發(fā)送都是簡單機(jī)械的往端點(diǎn)2里面填充
void?USBSendData(uint8_t?*SendBuf,uint8_t?l) { ????usb_sent_flag=0; ????memcpy(pEP2_IN_DataBuf,SendBuf,l); ????DevEP2_IN_Deal(l); }
我想再每次填充、寫完發(fā)送長度后等待主機(jī)把緩沖區(qū)的數(shù)據(jù)取走后再跳出發(fā)送函數(shù),查看USB中斷處理代碼,發(fā)現(xiàn)在中斷處理代碼中會將端點(diǎn)2的發(fā)送狀態(tài)寫成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); ????//等待發(fā)送完成 ????while((R8_UEP2_CTRL&MASK_UEP_T_RES)?==?UEP_T_RES_ACK) ????{ ????????WWDG_SetCounter(0x0); ????} }
但是發(fā)現(xiàn)不行,會一直等在這里,我這野路子估計不行,希望官方能給支個招,提前祝你國慶假期玩的開心?。。。?/p>
編輯原因,修改代碼樣式