1:pc軟件中的CH375ReadData函數(shù),在你們的調(diào)試程序中(vb或vc)的形參說明是可以任意類型,但是真讀取的時候還是按照字節(jié)型數(shù)據(jù)進(jìn)行指針累加的。 2:在c#中引用CH375ReadData函數(shù)不能形參不能聲明為ref形式,否則函數(shù)執(zhí)行完成后原來緩沖區(qū)被破壞。必須強(qiáng)行用指針才可以。(按道理來說兩者應(yīng)該是一樣的) 3:mcu方面,采用stc51系列單片機(jī)總線方式擴(kuò)展ch375b芯片,ch375b的中斷引腳沒用,采用向375發(fā)送中斷查詢命令讀取中斷結(jié)果的查詢方式判斷中斷,以及處理中斷,在mcu向pc發(fā)數(shù)據(jù)時沒有問題。每發(fā)一包數(shù)據(jù)查詢中斷都為0x0A,即使速度再快也正常,但是當(dāng)mcu接收pc數(shù)據(jù)的時候中斷判斷則不準(zhǔn)確。例如:pc發(fā)了10個數(shù)據(jù),mcu第一次查詢時發(fā)現(xiàn)有10個數(shù)據(jù)到來,然后進(jìn)行讀取,讀取完成后釋放375b的緩存,延時后,在一次判斷pc是否發(fā)來數(shù)據(jù)結(jié)果是有時候判斷沒有發(fā)來數(shù)據(jù)(這是正確的沒因為此時pc確實沒有發(fā)),而有時候則判斷是pc發(fā)來了數(shù)據(jù),讀取這些數(shù)據(jù)發(fā)現(xiàn)這些數(shù)據(jù)是上次請緩沖前的數(shù)據(jù),有時候是沒有數(shù)據(jù),但是得到的中斷確是0x02。有時候是對的有時候是錯的。請問這是怎么回事。 注:硬件連接絕對沒有問題,也沒有干擾。因為硬件在操作同樣掛在總線上的ram的時候無論讀寫都沒有錯誤,更重要的是只要不是操作pc下行數(shù)據(jù),其他操作375的所有操作,包括讀取上行中斷狀態(tài),操作作態(tài)等都是對的。 4、你們的pdf上說讀取中斷狀態(tài)的時候是A0為高電平的時候讀取的,而你們的樣例程序都是在A0為低電平的時候讀取的。我都試了一下在A0為高的時候讀出了中斷狀態(tài)最高位都是1,其他位正確,在A0為低電平的時候讀出的中斷狀態(tài)和最高位為0。 請不吝賜教。。。
問題3補(bǔ)充:代碼 if(usb_ptr()==1)//認(rèn)為pc下行數(shù)據(jù) { 。。。 //讀取數(shù)據(jù) 清375b緩沖區(qū)發(fā)送命令0x23 延時1ms while(1) { 延時1ms if(usb_ptr()==1)//無限次的檢查在pc沒有發(fā)數(shù)據(jù)時,中斷情況 { //居然有時能讀出有下行的中斷,有時候有上次的數(shù)據(jù) break; } }
}
3,關(guān)于讀取數(shù)據(jù)的時候,你讀取數(shù)據(jù)的時候是哪條命令來讀取數(shù)據(jù)的?還有就是你讀取數(shù)據(jù)之后你可以再來中斷的話,那么讀取到中斷狀態(tài)之后你在讀取數(shù)據(jù)長度,讀取到的數(shù)據(jù)長度是計算機(jī)發(fā)給你的數(shù)據(jù)長度嗎? 4,是在A0=1的時候讀取是否有中斷,而讀取中斷狀態(tài)則是A0=0的時候。
可能是中斷處理有問題,在不使用CH375中斷引腳的時候,可以通過讀CH375命令端口,判斷位7是否為0,如果為0則說明有中斷產(chǎn)生,這時候進(jìn)入中斷處理程序。讀CH375的命令端口的時候,A0為高電平。
1.CH375ReadData第2個參數(shù)是接受一個void*的類型,實際上是要接受一快連續(xù)的緩沖區(qū)。 2.看下面上傳的文檔,有個CSHARP說明文檔 UploadImages/20105318482250.rar
1、讀取數(shù)據(jù)的命令是RD_USB_DATA命令,讀取后就執(zhí)行了UNLOCK_USB命令,之后再判斷是否有下行數(shù)據(jù)到來,讀到的中斷仍是0x02,讀取的數(shù)據(jù)長度有時候是0有時候是上次執(zhí)行UNLOCK_USB命令前的數(shù)據(jù)。后來我在兩次中斷查詢中加了1ms的延時(夠長了)結(jié)果好多了。 2、void*是無類型指針,可以指向任何類型。既然有這樣的形參我個人認(rèn)為應(yīng)該按照實際傳入的類型進(jìn)行指針變化,如果只能按照字節(jié)操作,那不如形參改為char或byte的準(zhǔn)確。 3、第二個問題我已經(jīng)解決的方法和你們提供的差不多。
1,如果按照你說的估計是你下位機(jī)中斷處理軟件有問題,建議你仔細(xì)查下你的程序,建議你參考我們提供的例子程序去修改程序,還有在發(fā)送RD_USB_DATA命令之后不需要在發(fā)送UNLOCK_USB命令。
中斷處理沒有問題,我覺得是外部總線速度太快了。我看了你的提供的例子程序跟我寫的沒有什么區(qū)別。畢竟下位機(jī)的程序非常簡單啊。我覺得UNLOCK_USB更加保險。 還有一個問題請教: 就是pc的偽中斷設(shè)計,應(yīng)該是在單片機(jī)通過中斷斷點1上傳數(shù)據(jù)后,pc軟件激活那個函數(shù)???????? 請指教...
首先,UNLOCK_USB這個命令不是說你加了更保險的問題,這條命令是不能多也不能少的命令。還有你使用的是什么單片機(jī),速度多快?