在調(diào)試 CH375 和 PC 通信中,用 CH372DBG.ZIP 中的DBG372.EXE測試上位機(jī)時(shí),下傳數(shù)據(jù)成功,上傳數(shù)據(jù)出現(xiàn)問題,我是這樣做的: 1、運(yùn)行CH372DBG,打開設(shè)備 2、端點(diǎn)2下傳,數(shù)據(jù)長度:1,數(shù)據(jù):11,點(diǎn)擊下傳后下傳按鈕下傳成功

問題是:數(shù)據(jù)上傳我需要先點(diǎn)擊上傳按鈕等到按鈕變灰后,在點(diǎn)擊下傳按鈕,然后才能收到的數(shù)據(jù)是:EE,有時(shí)是一個(gè)EE,有時(shí)是十幾個(gè)EE(下傳時(shí)是一個(gè)一個(gè)的傳) 我按照論壇上說的下位機(jī)參考的是CH372EVT\PUB\TEST\MCU\TEST.C ,其中我的中斷部分程序是這樣的: void mCh375Interrupt( ) interrupt 3 using 1

{

unsigned char i; unsigned char InterruptStatus; unsigned char length; unsigned char data buffer[ 64 ];

CH375_CMD_PORT = CMD_GET_STATUS; /* 獲取中斷狀態(tài)并取消中斷請求 */ Delay2us( ); /* 如果時(shí)鐘頻率低于16MHz則無需該指令延時(shí) */ InterruptStatus = CH375_DAT_PORT; /* 獲取中斷狀態(tài) */

switch ( InterruptStatus ){ case USB_INT_EP2_OUT: { /* 批量端點(diǎn)下傳成功 */

CH375_CMD_PORT = CMD_RD_USB_DATA; /* 從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū) */ Delay2us( ); /* 如果時(shí)鐘頻率低于16MHz則無需該指令延時(shí) */ length = CH375_DAT_PORT; /* 首先讀取后續(xù)數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_DAT_PORT;

/* 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機(jī) */ CH375_CMD_PORT= CMD_WR_USB_DATA7 ; /* 向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ CH375_CMD_PORT=length ; /* 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 */ for ( i = 0; i < length; i ++ ) CH375_CMD_PORT= ~ buffer[ i ] ; /* 數(shù)據(jù)取反后返回,由計(jì)算機(jī)應(yīng)用程序測試數(shù)據(jù)是否正確 */ break; }

case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ CH375_CMD_PORT= CMD_UNLOCK_USB ; /* 釋放當(dāng)前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ CH375_CMD_PORT= CMD_UNLOCK_USB ; /* 釋放當(dāng)前USB緩沖區(qū) */ break; }

} }