我用的是Delphi語(yǔ)言寫(xiě)的上位機(jī)程序,下位機(jī)是另一個(gè)工程師做的,ch375選用的模式為2,但是在上位機(jī)調(diào)用ch375readdata()時(shí)讀出的數(shù)據(jù)全是0是怎么回事?是不是相應(yīng)的批量上傳緩沖區(qū)沒(méi)有對(duì)應(yīng)上?另外,批量上傳緩沖區(qū)是怎樣定義的?
(1)為確定是問(wèn)題出現(xiàn)在哪一方,下載CH372DBG.ZIP,用這個(gè)軟件調(diào)試下位機(jī) (2)內(nèi)置固件模式下,批量端點(diǎn)號(hào)是:端點(diǎn)2,批量上傳緩沖區(qū)在芯片內(nèi)部,使用WR_USB_DATA7即可向端點(diǎn)2上傳緩沖區(qū)寫(xiě)入數(shù)據(jù),注:CH375做設(shè)備,資料完全參考CH372 (3)建議技術(shù)貼到技術(shù)版面發(fā)表
好的,我再研究研究,謝謝!!
我還想問(wèn)一下,如果我的下位機(jī)是用匯編寫(xiě)的,能不能用CH372DBG.ZIP這個(gè)軟件調(diào)試下位機(jī)
當(dāng)然可以,與下位機(jī)用什么語(yǔ)言沒(méi)任何關(guān)系 下載CH372EVT.ZIP,\CH372EVT\PUB\XFIRM下有外置固件匯編例程,對(duì)于端點(diǎn)2的處理,內(nèi)/外置固件是一樣的
內(nèi)置固件模式下,批量端點(diǎn)號(hào)是:端點(diǎn)2,上位機(jī)的ch375readdata()是不是只從端點(diǎn)2的上傳緩沖區(qū)讀取數(shù)據(jù)?還是說(shuō)ch375readdata()根據(jù)產(chǎn)生中斷的端點(diǎn)而去相應(yīng)的端點(diǎn)上傳緩沖區(qū)讀取數(shù)據(jù)?
只從端點(diǎn)2的上傳緩沖區(qū)讀取數(shù)據(jù)
上傳數(shù)據(jù)流以偽中斷方式發(fā)起的系統(tǒng)中,計(jì)算機(jī)應(yīng)用層初始化時(shí)設(shè)置一個(gè)偽中斷服務(wù)程序,然后 應(yīng)用層就不需要再涉及到上傳數(shù)據(jù)流。當(dāng)單片機(jī)需要上傳數(shù)據(jù)時(shí),首先將數(shù)據(jù)寫(xiě)入批量端點(diǎn)的上傳緩 沖區(qū)中,然后將中斷特征數(shù)據(jù)寫(xiě)入中斷端點(diǎn)的上傳緩沖區(qū)中。在1 毫秒之內(nèi)(理論值),與中斷特征 數(shù)據(jù)對(duì)應(yīng)的偽中斷服務(wù)程序被激活,偽中斷服務(wù)程序通知主程序調(diào)用數(shù)據(jù)上傳API獲得上傳數(shù)據(jù)塊。 在此期間,單片機(jī)將會(huì)收到CH372 芯片通知的兩次中斷,首先是中斷端點(diǎn)上傳成功中斷,然后是批量 端點(diǎn)上傳成功中斷。
首先,CH372 芯片通知的兩次中斷,是CH372向指單片機(jī)產(chǎn)生的兩次中斷,一個(gè)是中斷端點(diǎn)(端點(diǎn)1)上傳成功,一個(gè)是批量端點(diǎn)(端點(diǎn)2)上傳成功;上位機(jī)的偽中斷其實(shí)并不是中斷,只是下位機(jī)向上位機(jī)通報(bào)有數(shù)據(jù)到來(lái)的一種機(jī)制,其實(shí)現(xiàn)原理是,CH375SetIntRoutine在動(dòng)態(tài)庫(kù)中創(chuàng)建了一個(gè)優(yōu)先級(jí)比較高的線程在不停的讀端點(diǎn)1的數(shù)據(jù),如果這個(gè)線程讀到端點(diǎn)1數(shù)據(jù)的的話,那么他將調(diào)用CH375SetIntRoutine設(shè)置的中斷服務(wù)回調(diào)函數(shù),CH372向端點(diǎn)1中寫(xiě)數(shù)據(jù),其實(shí)就是向pc通知有數(shù)據(jù)到了,向端點(diǎn)2寫(xiě)的數(shù)據(jù)一般就是所要上傳的數(shù)據(jù),所以上位機(jī)讀到端點(diǎn)1的數(shù)據(jù)就會(huì)調(diào)用設(shè)置的回調(diào)函數(shù).回調(diào)函數(shù)其實(shí)是在CH375SetIntRoutine創(chuàng)建的線程中執(zhí)行的,而線程的優(yōu)先級(jí)比較高不易做費(fèi)時(shí)的操作,一般就是發(fā)送消息或是激活系統(tǒng)的事件,這樣在消息的處理中做一些讀端點(diǎn)2的操作和對(duì)數(shù)據(jù)的處理,第8樓中的例子中有上位機(jī)和下位機(jī)的代碼,可以參考一下. 如果我只是在CH375SetIntRoutine設(shè)置的中斷服務(wù)回調(diào)函數(shù)中調(diào)用readdata()來(lái)讀取端點(diǎn)2上傳緩沖區(qū)的數(shù)據(jù),這里說(shuō)到的“CH372向端點(diǎn)1中寫(xiě)數(shù)據(jù)”,也就是中斷端點(diǎn)1,是不是中斷數(shù)據(jù)可以隨便寫(xiě)一個(gè)?還有就是先向中斷端點(diǎn)1寫(xiě)數(shù)據(jù)還是先向端點(diǎn)2上傳緩沖區(qū)寫(xiě)數(shù)據(jù)?