CH375 的設(shè)備方式 端點(diǎn)2上傳出現(xiàn)問(wèn)題

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

問(wèn)題是:數(shù)據(jù)上傳我需要先點(diǎn)擊上傳按鈕等到按鈕變灰后,在點(diǎn)擊下傳按鈕,然后才能收到的數(shù)據(jù)是:EE,有時(shí)是一個(gè)EE,有時(shí)是十幾個(gè)EE(下傳時(shí)是一個(gè)一個(gè)的傳)

我按照論壇上說(shuō)的下位機(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)并取消中斷請(qǐng)求 */ Delay2us( ); /* 如果時(shí)鐘頻率低于16MHz則無(wú)需該指令延時(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則無(wú)需該指令延時(shí) */ length = CH375_DAT_PORT; /* 首先讀取后續(xù)數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) buffer[ i ] = CH375_DAT_PORT;

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

} }


熱門(mén)產(chǎn)品 : CH32X035: 32位USB+USB PD單片機(jī)

中斷程序沒(méi)有問(wèn)題,其他地方有沒(méi)有上傳數(shù)據(jù)?


上位機(jī)數(shù)據(jù)下傳成功之后,單片機(jī)端程序有沒(méi)有進(jìn)入中斷函數(shù)?


1:是這樣的,其他地方應(yīng)該沒(méi)有上傳數(shù)據(jù),因?yàn)橹鞒绦蚓褪茄h(huán)等待中斷發(fā)生 2:因?yàn)榘遄佑昧艘粔KCPLD,也不知和這個(gè)芯片有關(guān)沒(méi),我想把下傳的數(shù)據(jù)在液晶屏ST7920上顯出來(lái),如果要顯出來(lái)肯定中斷進(jìn)去了,但是我沒(méi)有做成功。(液晶部分我曾用此板做過(guò)一個(gè)菜單,是可以實(shí)現(xiàn)的),但是_study_說(shuō)的中斷有沒(méi)有進(jìn)去,我把“ CH375_CMD_PORT= CMD_WR_USB_DATA7 /* 向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 */ CH375_CMD_PORT=length /* 首先寫(xiě)入后續(xù)數(shù)據(jù)長(zhǎng)度,回傳剛接收到的數(shù)據(jù)長(zhǎng)度 */ for ( i = 0; i < length; i ++ ) CH375_CMD_PORT= ~ buffer[ i ] /* 數(shù)據(jù)取反后返回,由計(jì)算機(jī)應(yīng)用程序測(cè)試數(shù)據(jù)是否正確 */ ” 這一段代碼屏蔽后,點(diǎn)擊上傳按鈕,上傳按鈕一直變灰沒(méi)有反應(yīng)了,不能再上傳了。所以我覺(jué)得中斷應(yīng)該是進(jìn)去的。不然屏蔽的這段就不會(huì)對(duì)它有影響。 現(xiàn)在關(guān)鍵問(wèn)題是我要是能把下傳的數(shù)據(jù)能顯出來(lái)就好了。中斷的數(shù)據(jù)該怎樣再主程序中顯示呢?


既然是調(diào)試,那么調(diào)試環(huán)境越簡(jiǎn)單越好,不要用什么CPLD,液晶之類,把簡(jiǎn)單的東西復(fù)雜化,把這些東西全去掉 你的程序其實(shí)也能上下傳了,只是有時(shí)不對(duì),說(shuō)不定就是這些東西影響了


我點(diǎn)擊下傳按鈕一次就有反應(yīng)了,而點(diǎn)擊上傳按鈕需要點(diǎn)擊2到3次才變灰有反應(yīng),并且只有點(diǎn)擊了上傳按鈕后再點(diǎn)擊下傳按鈕,數(shù)據(jù)才上傳過(guò)來(lái)。順序不應(yīng)該這樣對(duì)嗎?這些是怎么回事呢?


你貼出來(lái)的程序,應(yīng)該是點(diǎn)擊一次下傳在點(diǎn)擊一次上傳數(shù)據(jù)。先下傳數(shù)據(jù),然后在上傳。


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

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