[求助]374的USB上傳函數(shù)

void USB_UpData(UINT8 mAddr, UINT8 mLen, PUINT8 mBuf) { //while(!(Read374Byte( REG_INTER_FLAG )&0x01)==0x01);//等待中斷完成 //Write374Byte(REG_INTER_FLAG, (Read374Byte( REG_INTER_FLAG ))|0x01); while(busy); unsigned char i; buff[0]=0x3f; buff[1]=mLen; for ( i =2; i < mLen+2; i ++ ) buff[i] = *(mBuf+mAddr+i-2); Write374Block( RAM_ENDP2_TRAN, 64, buff ); // USB回傳,此處的長度不需要為h Write374Byte( REG_USB_LENGTH, 64 ); Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) )) ; busy=1; }

busy初始化為0,在in中斷里,將busy清零,在主函數(shù)里調(diào)用上傳函數(shù),發(fā)現(xiàn)程序無法進(jìn)入in中斷,也就是說數(shù)據(jù)沒有發(fā)到pc上邊。我懷疑是 Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) )) ; 的原因,但是不太清楚問題出在哪

需要看下你的完整程序,正常的寫數(shù)據(jù)是這樣寫的: Write374Block( RAM_ENDP2_TRAN, 64, buff ); // USB回傳,此處的長度不需要為h Write374Byte( REG_USB_LENGTH, 64); Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) );//啟動(dòng)發(fā)送 當(dāng)產(chǎn)生上傳中斷之后,需要在中斷函數(shù)里面只有處理: case USB_INT_EP2_IN: { // 批量端點(diǎn)上傳成功,未處理 Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_NAK( Read374Byte( REG_USB_ENDP2 ) ) ^BIT_EP2_TRAN_TOG ); break; } 還有就是你發(fā)送第一包的數(shù)據(jù)的時(shí)候,需要等計(jì)算機(jī)完成對CH374的枚舉過程,具體的是在計(jì)算機(jī)發(fā)送SET_CONFIG的SETUP命令之后在發(fā)送數(shù)據(jù)才是可以的


是這樣的 我的想法是在中斷里將busy清零,但是按照您上述的寫法,根本就無法進(jìn)入in中斷 同時(shí)也應(yīng)該不是枚舉未完成的問題 因?yàn)槲野压俜嚼?/p>

else if ( s & BIT_IF_TRANSFER ) { // USB傳輸完成 s = Read374Byte( REG_USB_STATUS ); switch( s & BIT_STAT_PID_ENDP ) { // USB設(shè)備中斷狀態(tài) case USB_INT_EP2_OUT: { // 批量端點(diǎn)下傳成功 UINT8 buf[64]; if ( s & BIT_STAT_TOG_MATCH ) { // 僅同步包 l = Read374Byte( REG_USB_LENGTH ); Read374Block( RAM_ENDP2_RECV, l, buf ); for ( s = 0; s < l; s ++ ) buf[s] ^= 0xFF; // 數(shù)據(jù)取反由計(jì)算機(jī)驗(yàn)證 Write374Block( RAM_ENDP2_TRAN, l, buf ); // 演示回傳 Write374Byte( REG_USB_LENGTH, l ); Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG ); // Write374Index( REG_USB_ENDP2 ); // 對于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時(shí)間,提高效率 // Write374Data( M_SET_EP2_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP2_RECV_TOG ); } break; }

我把下面for ( s = 0; s < l; s ++ ) buf[s] ^= 0xFF; // 數(shù)據(jù)取反由計(jì)算機(jī)驗(yàn)證 Write374Block( RAM_ENDP2_TRAN, l, buf ); // 演示回傳 Write374Byte( REG_USB_LENGTH, l ); Write374Byte( REG_USB_ENDP2, M_SET_EP2_TRAN_ACK( Read374Byte( REG_USB_ENDP2 ) ) ^ BIT_EP2_RECV_TOG ); // Write374Index( REG_USB_ENDP2 ); // 對于并口連接可以用本行及下面一行代替上一行的程序,減少寫一次index的時(shí)間,提高效率 // Write374Data( M_SET_EP2_TRAN_ACK( Read374Data0( ) ) ^ BIT_EP2_RECV_TOG ); 部分的所有l(wèi)都改成了64,就無法上傳數(shù)據(jù)了,但是按說應(yīng)該和l無關(guān)的 求解釋


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频