ch375的接受問題,求助

/* CH375中斷服務(wù)程序,假定CH375的INT#引腳連接到單片機的INT0,使用寄存器組1 */ void mCH375Interrupt( void ) interrupt 0 using 1 { UINT8 cnt; UINT8 dat; EX0 = 0; #define IntStatus dat /* 節(jié)約一個變量存儲單元 */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ IntStatus = CH375_RD_DAT_PORT( ); /* 獲取中斷狀態(tài) */ IE0 = 0; EX0 = 1;// 清中斷標志,與單片機硬件有關(guān),對應(yīng)于INT0中斷 */ if ( IntStatus == USB_INT_EP2_OUT ) { /* 批量端點下傳成功,接收到命令包 */

CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ cnt = CH375_RD_DAT_PORT( ); /* 首先讀取后續(xù)數(shù)據(jù)長度 */ Print("EP2_OUT."); if( cnt ==1 ) { dat = CH375_RD_DAT_PORT( ); P1 = dat ; if( dat ==0x22 ) { P1 = dat ; CH375_WR_CMD_PORT(CMD_SET_ENDP5); CH375_WR_DAT_PORT(0x0E); Print("ML."); ClrScreen(); } else { P1 = dat ; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(dat); Print("SJ."); }

}

} else if ( IntStatus == USB_INT_EP2_IN ) { /* 批量數(shù)據(jù)發(fā)送成功,狀態(tài)包已發(fā)送 */ /* 釋放當前USB緩沖區(qū),收到上傳成功中斷后,必須解鎖USB緩沖區(qū),以便繼續(xù)收發(fā) */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); GotoXY(0,0); Print("EP2_IN."); } else if ( IntStatus == USB_INT_EP1_IN ) { /* 中斷數(shù)據(jù)發(fā)送成功,本程序未用到 */ //GotoXY(0,1); Print("EP1_IN."); CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當前USB緩沖區(qū) */ CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(0x55); ClrScreen(); }

/* 內(nèi)置固件的USB方式下不應(yīng)該出現(xiàn)其它中斷狀態(tài) */ } 大家?guī)兔匆幌?,這是CH375的中斷,主機先發(fā)送個數(shù)據(jù),然后向端口1發(fā)送數(shù)據(jù),在端口1的發(fā)送完中斷中向端口2發(fā)數(shù)據(jù),本來主機發(fā)一次,端口1,2分別上傳一次,但在主機端如果不讀端口2,端口1就發(fā)兩次,為什么?

看了一下你的程序,沒有大問題,你所說的主機不讀端口2.是指進入批量端點下傳成功后不去讀數(shù)據(jù)嗎?


主機能讀,我的意思是如果主機不讀批量端點,中斷端點可以讀兩次


應(yīng)該是批量端點下載幾個,中斷端點和批量端點上傳幾個吧,但是上傳的比下傳的多,不知為什么?


CH375_WR_CMD_PORT(CMD_SET_ENDP5); CH375_WR_DAT_PORT(0x0E); 這個不對.數(shù)據(jù)呢?你要寫入0X0E個數(shù)據(jù),但是后續(xù)數(shù)據(jù)怎么沒寫?再說端點1怎么可以寫這么多數(shù)據(jù)?一次最多0X08個


我沒執(zhí)行這段程序,我看例子程序有這樣的語句,是設(shè)置,不是要輸出數(shù)據(jù)


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

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