請(qǐng)問單片機(jī)如何判斷是否已經(jīng)連接到PC主機(jī)上? 通過(guò)什么指令可以實(shí)現(xiàn)這個(gè)功能? 謝謝!
以372為例: 當(dāng)372連接到PC,并且啟用設(shè)備模式,那么PC會(huì)發(fā)現(xiàn)一個(gè)新的設(shè)備,然后會(huì)向372發(fā)送一系列的初始化請(qǐng)求,372收到以后,會(huì)產(chǎn)生中斷信號(hào)。單片機(jī)可利用該中斷信號(hào)判斷是否連接到PC
請(qǐng)問樓上的,在我的372復(fù)位后并且設(shè)置設(shè)備模式時(shí),但是PC機(jī)應(yīng)用軟件沒有開啟時(shí),372會(huì)收到什么中斷,是USB_INT_BUS_RESET1,還是USB_INT_EP0_SETUP,或者是其他的? 因?yàn)槲以囼?yàn)了幾乎所有的中斷狀態(tài)好像都不行。當(dāng)時(shí)利用PC機(jī)應(yīng)用軟件進(jìn)行端點(diǎn)數(shù)據(jù)發(fā)送接收時(shí)可以檢測(cè)到USB已連接。 謝謝!
(1)372會(huì)產(chǎn)生復(fù)位中斷,掛起中斷(這兩種可能會(huì)產(chǎn)生好幾次),接著就應(yīng)該是USB_INT_EP0_SETUP,即一些標(biāo)準(zhǔn)的USB請(qǐng)求,這是由驅(qū)動(dòng)程序完成的,與應(yīng)用層無(wú)關(guān)
我現(xiàn)在定義了一個(gè)bit變量CH375_exist作為CH375存在的標(biāo)志:1代表存在,0代表不存在。 在中斷程序mCH375Interrupt( ) interrupt 0 using 1中,第一句話為CH375_exist=1;
程序開始CH375_exist=0; 然后Delay50ms(); //延時(shí)50ms 然后CH375_Init( ); 然后EA=1; 然后for(i=0;i<20;i++)Delay50ms( );//延時(shí)1秒 然后讀取CH375_exist,讀的值為0; 單片機(jī)識(shí)別USB沒有連接,但此時(shí)打開PC應(yīng)用軟件就會(huì)顯示USB連接。 請(qǐng)問一開始沒有識(shí)別是什么可能原因? 謝謝
說(shuō)明,上面所有函數(shù)均為貴公司開發(fā)的源程序
(1)中斷程序中的CH375_exist=1語(yǔ)句有沒有執(zhí)行呢?372的設(shè)備模式是內(nèi)置固件還是外置固件?若是前者,那么在設(shè)備配置階段是不會(huì)進(jìn)中斷的,所有的配置工作都是由芯片自動(dòng)完成,不會(huì)產(chǎn)生中斷,這句話自然不會(huì)執(zhí)行,就會(huì)產(chǎn)生你所說(shuō)的現(xiàn)象。 (2)建議你先熟悉一下我們芯片的操作流程,看些資料,網(wǎng)上下載CH372DS1.PDF,CH372EVT.ZIP(上下位機(jī)示例程序)。
謝謝SCM ,我用的是內(nèi)置固件模式。
用內(nèi)部固件的話是不執(zhí)行CH375_exist=1,不會(huì)產(chǎn)生控制傳輸?shù)闹袛酄顟B(tài),底層的控制傳輸372自動(dòng)完成!所以只有在傳輸數(shù)據(jù)的時(shí)候才會(huì)產(chǎn)生中斷.