CH375設(shè)備模式只能收,不能發(fā)數(shù)據(jù),為何??

用CH375的設(shè)備模式做數(shù)據(jù)傳輸時(shí),只能收數(shù)據(jù),不能發(fā)數(shù)據(jù)。程序如下: if(InterruptStatus==USB_INT_EP1_OUT || InterruptStatus==USB_INT_EP2_OUT){ LED=~LED; CH375_WR_CMD_PORT(CMD_RD_USB_DATA); length=CH375_RD_DAT_PORT(); c1=0; while(length--){ Content[c1++]=CH375_RD_DAT_PORT(); } _nop_(); CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); CH375_WR_DAT_PORT(0x04); for(c1=0;c1<4;c1++){ CH375_WR_DAT_PORT(0xaf); }

_nop_(); } else if(InterruptStatus==USB_INT_EP1_IN || InterruptStatus==USB_INT_EP2_IN){ CH375_WR_CMD_PORT(CMD_UNLOCK_USB); } else{} }

運(yùn)行的時(shí)候,用bus hound監(jiān)視數(shù)據(jù),usb?。悖瑁澹悖氚l(fā)消息。每次發(fā)送消息后,LED是變化的,并且用仿真器設(shè)斷點(diǎn)也能觀察到數(shù)據(jù)接收正確。但就是無法收到CH375發(fā)送的數(shù)據(jù)。 請(qǐng)問為什么??程序流程有錯(cuò)嗎??

else if(InterruptStatus==USB_INT_EP1_IN || InterruptStatus==USB_INT_EP2_IN){ CH375_WR_CMD_PORT(CMD_UNLOCK_USB); //這里應(yīng)該加上發(fā)送的程序!! } else{} } 你現(xiàn)在還沒有寫入程序呢!怎么能發(fā)送? 還有,至少要能夠觸發(fā)In的事件阿! 你是怎么觸發(fā)的?


建議你看看沁恒的例子程序是如何作的??!

看懂了再編程!


發(fā)送程序在這里?。? CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); CH375_WR_DAT_PORT(0x04); for(c1=0;c1<4;c1++){ CH375_WR_DAT_PORT(0xaf); } 手冊(cè)上寫的是,讀操作后,CH375自動(dòng)釋放緩沖;然后就可以寫數(shù)據(jù)了。


In 和OUT是怎么觸發(fā)的?


你看看例子就會(huì)明白了!


不好意思,例子看了以后還是沒懂。 在CH372EVT\PUB\MCU_IF\C\CH372FRM.C或者CH372EVT\PUB\TEST\MCU\TEST.C里都是這種結(jié)構(gòu)的: 在中斷響應(yīng)程序中,如果是OUT中斷,則從緩沖中讀取數(shù)據(jù),然后立刻將發(fā)送數(shù)據(jù)寫入緩沖;如果是IN中斷,則執(zhí)行UNLOCK操作。 即使是使用FLAG_SEND_WAIT標(biāo)志符的時(shí)候,也是在需要發(fā)送數(shù)據(jù)的時(shí)候先查詢?cè)摌?biāo)志是否為0,然后就直接發(fā)送;在IN中斷時(shí)執(zhí)行UNLOCK操作。 至于IN和OUT的觸發(fā),OUT當(dāng)然是在主機(jī)端發(fā)送數(shù)據(jù)時(shí)觸發(fā);而對(duì)于中斷型的端點(diǎn),主機(jī)會(huì)以幾毫秒的間隔查詢?cè)O(shè)備,此時(shí)收到IN中斷。但是我在用仿真器調(diào)試時(shí),設(shè)置在IN中斷里的斷點(diǎn)從來沒有被觸發(fā)過。所以覺得很難理解。 麻煩繼續(xù)給予解答,謝謝??!


一般是通過端點(diǎn)2上傳,wr_usb_data7,而你是通過端點(diǎn)1上傳的,所以上位機(jī)要配套用readinter或者中斷


謝謝你的回答! 但是還是有疑問: 你的意思是不是指,在上位機(jī)(PC)中,需要使用375的DLL進(jìn)行讀數(shù)據(jù)操作,然后才會(huì)單片機(jī)才會(huì)收到IN中斷? 而我的理解是:CH375內(nèi)置固件模式下,端點(diǎn)1是中斷方式,端點(diǎn)2是批量方式。 根據(jù)USB協(xié)議中,中斷方式下主機(jī)端以幾毫秒的周期自動(dòng)發(fā)出IN令牌的。因此對(duì)于端點(diǎn)2,可能需要調(diào)用DLL的讀函數(shù),而對(duì)于端點(diǎn)1,則是不需要的。 我在調(diào)試的時(shí)候,都是用BUS?。龋希眨危陌l(fā)送和讀取數(shù)據(jù)的,所以電腦端在接收數(shù)據(jù)時(shí),不會(huì)發(fā)送IN令牌,是不是這個(gè)原因? 但是以前用過PHILIPS的D12和ISP1581,單片機(jī)主動(dòng)發(fā)送消息配合BUS?。龋希眨危慕邮斩际强尚械?,不需要調(diào)用DLL的。 謝謝?。?!


是的?。?/p>


已經(jīng)調(diào)試成功!謝謝“小小何”和“店小二”兩位的幫助! 不過在我看來,程序和原來的沒有什么變化,比較疑惑。


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

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