主機在發(fā)起一個讀取塊端點請求的時候,開始的時候肯定是個令牌包,USB芯片收到后應(yīng)該產(chǎn)生一個什么樣的中斷呢?即單片機在GET STATUS的時候,取得什么樣的中斷碼呢?在CH372的應(yīng)用手冊中,只有如下三種: 09H 端點1發(fā)送完數(shù)據(jù),IN事務(wù)成功 02H 端點2接受到數(shù)據(jù),OUT事務(wù)成功 0AH 端點2發(fā)送完數(shù)據(jù),IN事務(wù)成功 這三種情況顯然都不適合。 敬請各位高手指點!
主要的中斷有: #define USB_INT_EP0_SETUP 0x0C /* USB端點0的SETUP */ #define USB_INT_EP0_OUT 0x00 /* USB端點0的OUT */ #define USB_INT_EP0_IN 0x08 /* USB端點0的IN */ #define USB_INT_EP1_OUT 0x01 /* USB端點1的OUT */ #define USB_INT_EP1_IN 0x09 /* USB端點1的IN */ #define USB_INT_EP2_OUT 0x02 /* USB端點2的OUT */ #define USB_INT_EP2_IN 0x0A /* USB端點2的IN */
如上面所說,真正的中斷狀態(tài)是上面幾個,而你所說的那幾個只是在內(nèi)置固件模式的情況下才用到的中斷狀態(tài),實際上對于CH372,我們將端點0的操作全部作成固件寫在372里面的了,目的是為了減少客戶編程的時間,你如果想用到上面所說的沒用到的狀態(tài)的話,你只要將模式設(shè)置為0X01就可以了,那你就需要對端點0進行操作了,那這樣的話就比較符合USB協(xié)議里面的操作流程了
我現(xiàn)在要設(shè)計一個用USB芯片和單片機采集信號的系統(tǒng)。 PC 發(fā)起一個讀取的事務(wù),先發(fā)一個IN令牌包,然后讀取數(shù)據(jù)段,再返回一個ACK握手包。USB芯片肯定要通知單片機進行數(shù)據(jù)采集,我的問題是,USB芯片是以中斷方式通知的嗎?如果說是以中斷方式通知的,那么單片機得到的中斷碼是什么?CH372是在哪個階段發(fā)出的中斷?是在接收到IN令牌并譯碼分析后才發(fā)出的中斷嗎?
你實際上可以這樣做,你可以通過批量端點下傳一個數(shù)據(jù),這個時候375收到數(shù)據(jù)并且檢測數(shù)據(jù)是正確的話,那么這個時候給計算機返回ACK,同時將375的INT腳拉低,通知單片機來取數(shù)據(jù),單片機取走數(shù)據(jù)之后,分析是什么樣的數(shù)據(jù),如果是要求你采集的數(shù)據(jù)的話,這個時候你的單片機就進行數(shù)據(jù)采集,采集完數(shù)據(jù)之后在將數(shù)據(jù)通過批量端點將數(shù)據(jù)上傳上去就可以了, 如果按照你上面的做法的話,你應(yīng)該先進行一次數(shù)據(jù)采集,將采集的數(shù)據(jù)寫到375被動的等待計算機將數(shù)據(jù)取走,如果單片機沒有將數(shù)據(jù)寫下去的話,計算機從375取數(shù)據(jù)的話,那么返回的是NAK,只有計算機將數(shù)據(jù)取走之后,375才會產(chǎn)生批量端點上傳成功的中斷狀態(tài),而不是你所理解的計算機發(fā)一個讀取數(shù)據(jù)的令牌就會產(chǎn)生中斷。
明白了,謝謝