請問:單片機CH372工作初始正常,并已于PC聯(lián)通,驅(qū)動安裝也正常。但寫WR_USB_DATA5/7,等待中斷,PC上傳數(shù)據(jù),但單片機始終不能等到PIN1的INT低電平中斷,這是為什么?謝謝
PC采用DEBUG372.EXE調(diào)試,謝謝了
(1)上位機找到設(shè)備沒有?有沒有打開? (2)把數(shù)據(jù)寫入端點的上傳緩沖區(qū)后,上位機必須啟動上傳(即點擊上傳按鈕),下位才能產(chǎn)生中斷
非常感謝! 又有一個問題請教: 單片機通過CH372接收數(shù)據(jù)時,中斷后輸入SET_STATUS后,讀出的第一個數(shù)據(jù)是數(shù)據(jù)長度,而不是OUT成功的中斷01H OR 0AH?是我理解有問題?
(1)中斷后,應發(fā)送GET_STATUS獲取CH372的中斷狀態(tài),沒有SET_STATUS這個命令 (2)通過GET_STATUS獲取的是中斷狀態(tài),如果中斷狀態(tài)是OUT成功,則再用RD_USB_DATA讀取數(shù)據(jù),第一字節(jié)表示后續(xù)數(shù)據(jù)的長度,不為0,則應循環(huán)讀取全部數(shù)據(jù)。
呵呵!剛才寫錯成SET_STATUS,實際GET_STATUS。 程序先進入中斷,通過GET_STATUS獲取狀態(tài),如果是OUT成功,但怎么判斷是成功了呢?是否是讀取中斷狀態(tài)01H或0AH(RD_USB_DATA/DATA0),之后才能去讀取長度以及數(shù)據(jù)?謝謝
如果中斷狀態(tài)是0x01,就表示端點1OUT成功(即端點1下傳成功)。之后才去讀長度以及數(shù)據(jù) 建議你看看CH372DS1的GET_STATUS命令,以及CH372上下傳數(shù)據(jù)的流程。
關(guān)鍵是沒有讀到01H,而是讀到了數(shù)據(jù)長度?這是哪里有問題?是說明不成功嗎?
這是因為DEBUG372.EXE沒有做端點1下傳的功能,CH372自然不能產(chǎn)生0x01中斷。
剛有新按子,這事隔了一段時間。 謝謝樓上解釋。 有兩個問題請教: 1、如果DEBUG372.EXE中端點1/2上傳,第一次分別上傳8/64,接收正常,但接著想再次接收8/64,怎么操作? 2、端點2下傳中,能夠?qū)?shù)據(jù)長度以及第一數(shù)據(jù)正常讀,但后面錯誤,這可能是什么問題? 謝謝
(1)再次發(fā)送就可以接收了,在上傳成功中斷里,繼續(xù)上傳你要上傳的數(shù)據(jù),先把數(shù)據(jù)寫入,釋放緩沖區(qū)就好了 (2)能不能詳細的說以下數(shù)據(jù)錯誤的現(xiàn)象?
2、端點2下傳中錯誤現(xiàn)象:假設(shè)8個數(shù)據(jù)分別11,22,33,44,55,66,77,88。中斷正常02H,讀回數(shù)據(jù)長度正確,但后面數(shù)據(jù):11,02,20,33,04,40,55,06。這是什么原因?
從你的現(xiàn)象來說可能你傳送的格式不對
1122334455667788 這樣不加逗號不加空格才對!
可以了。 不知是否有簡單點可以調(diào)使用的VB程序? CH372EVT里面的總是出現(xiàn)“CH375數(shù)據(jù)測試返回的長度錯誤”,而且VB總是出現(xiàn)‘內(nèi)存不能讀’而導致終止。
這個可能和你的下位機的程序有關(guān)系,我們下位機的例子和上位機的例子是相配合才能正常工作的。
'iBuffer 指向一個緩沖區(qū),提供當前的中斷特征數(shù)據(jù) '******建議此程序不要設(shè)置斷點****** Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中斷服務程序 Dim bool As Boolean ' CH371產(chǎn)生中斷后,產(chǎn)生一個消息通知主程序 If mBuffer.buf(0) = 1 Then ' 檢查中斷特征數(shù)據(jù) mKeyCode = mBuffer.buf(1) And &H3F bool = PostMessage(frmMain.hwnd, WM_KEYDOWN, 1, 0) ' 中斷特征數(shù)據(jù)1則鍵被按下 Else If mBuffer.buf(0) = 2 Then bool = PostMessage(frmMain.hwnd, WM_KEYUP, 1, 0) ' 中斷特征數(shù)據(jù)2則鍵被釋放 End If End If End Sub
Public Sub iNotifyRoutine(ByVal iEventStatus As Long) ' 設(shè)備事件和當前狀態(tài)(在下行定義): 0=設(shè)備拔出事件, 3=設(shè)備插入事件 PostMessage frmMain.pnpproce.hwnd, WM_KEYUP, iEventStatus, 0 End Sub
上面是摘自‘CH372EVT\VB\DEMO’中的Module1.BAS,能否解釋下。謝謝了