各位工程師幫忙看看,上位機收到的前四個都是0 0 0 0 上位機: VOID CALLBACK mInterruptEvent( PUCHAR iBuffer ) { if(iBuffer[0]==48)update=1; printf("interrupt receive success ");} void main ( ) {printf( "*** Load DLL: CH375DLL.DLL \n" ); if ( LoadLibrary( "CH375DLL.DLL" ) == NULL ) return; printf( "*** CH375OpenDevice: 0# \n" ); if ( CH375OpenDevice( 0 ) == INVALID_HANDLE_VALUE ) return; update=0; CH375SetIntRoutine(0,mInterruptEvent); Sleep(50); while(1){ while(update==0); if ( CH375ReadData( 0, &mReadBuf, &mLength ) ) printf("bulk receive success %02XH,%02XH,%02XH,%02XH",mReadBuf[0],mReadBuf[1],mReadBuf[2],mReadBuf[3]); } 下位機: void mCh375Interrupt( ) interrupt 0 {... else if ( InterruptStatus == USB_INT_EP1_IN ) { CH375_WR_CMD_PORT(CMD_UNLOCK_USB); CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(60); for ( i = 0; i < 60; i ++ ) CH375_WR_DAT_PORT(i); FLAG_INT_WAIT = 0; } main( ) {。。。。 EX0 = 0; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); Delay_us(2); CH375_WR_DAT_PORT(1); FLAG_INT_WAIT = 1; CH375_WR_DAT_PORT(0x30); EX0 = 1; } 運行結(jié)果:interrupt receive success bulk receive success 00h,00h,00h,00h
測到mLength為0,沒有讀成功嗎?
長度為0的話說明下位機沒有給計算機傳輸數(shù)據(jù)。 下位機程序估計有問題,你設(shè)置好模式之后,你可以讓計算機先下傳數(shù)據(jù)下來之后在傳輸數(shù)據(jù)?;蛘咴谠O(shè)置好模式之后加50-100MS之后在傳輸數(shù)據(jù),因為在你設(shè)置好模式之后,計算機還沒初始化好CH372芯片,所以你往端點1寫的數(shù)據(jù)CH372芯片是無響應(yīng)的。
引用你們技術(shù)人員的話 “首先是通過中斷端點(端點1)傳數(shù)據(jù),中斷端點上傳成功中斷之后,然后再往批量端點寫數(shù)據(jù),等到批量端點上傳成功之后再傳下一次數(shù)據(jù),還有PC機中的中斷服務(wù)程序不要做太多費時的操作,一般都是發(fā)個消息,然后在消息響應(yīng)中做相應(yīng)處理(一般是讀端點2的數(shù)據(jù))” 我想讓單片機往端點1寫數(shù)據(jù),告訴上位機要發(fā)數(shù)據(jù)上去了,再用批量端點傳數(shù)據(jù)給上位機?,F(xiàn)在端點1的數(shù)據(jù)能收到,但之后的批量傳送的數(shù)據(jù)上位機沒收到。 調(diào)試的時候發(fā)下下位機可以執(zhí)行到else if ( InterruptStatus == USB_INT_EP2_IN ) {CH375_WR_CMD_PORT(CMD_UNLOCK_USB); }里面。是不是說明下位機的批量端點發(fā)送時成功的?
不好意思,上位機讀數(shù)據(jù)mlength沒有賦值,現(xiàn)在賦了值就好了~