測試CH372是否正常工作

請問我是按CH372的規(guī)格書寫的,但怎么都跟電腦通不了,是什么原因?

void CH375_WR_CMD_PORT( unsigned char cmd ) { ///* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機較快則延時 */

//-------------------creaed by hjb //---- USB_CS=0; //選通CH372 P2=0xFF; //USB_DATA_OUTPUT=0xFF; //拉高引腳 USB_A0=1; //USB_A0=USB_CMD_MODE;//命令模式 USB_WR=0;//準許寫 P2=cmd; //USB_DATA_OUTPUT=cmd;//寫數(shù)據(jù) DelayNus(2); // DelayNus(3); USB_CS=1;//不選通CH372; P2=0xFF; //USB_DATA_OUTPUT=0xFF;//拉高引腳 USB_WR=1;//禁止寫

}

void CH375_WR_DAT_PORT( unsigned char dat ) { ///* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機較快則延時 */

USB_CS=0; //選通CH372 P2=0xFF;// USB_DATA_OUTPUT=0xFF; //拉高引腳 //covered by hjb USB_A0=0;//USB_A0=USB_DAT_MODE;//數(shù)據(jù)模式 //covered by hjb USB_WR=0;//準許寫 P2=dat; //USB_DATA_OUTPUT=dat;//寫數(shù)據(jù)

DelayNus(2);//DelayNus(3); //3uS USB_CS=1;//不選通CH372; P2=0xFF; //USB_DATA_OUTPUT=0xFF;//拉高引腳 USB_WR=1;//禁止寫 }

unsigned char CH375_RD_DAT_PORT( void ) { ///* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機較快則延時 */

//---------------Created by hjb unsigned char dat; //unsigned int dat;

USB_CS=0; //選通CH372 P2=0xFF; //USB_DATA_INTPUT=0xFF; //拉高引腳 USB_A0=0; //hjb// USB_A0=USB_DAT_MODE;//命令模式 USB_RD=0; //準許讀 dat=P2; //dat=USB_DATA_INTPUT//讀取數(shù)據(jù)

DelayNus(2);//DelayNus(3); USB_CS=1;//不選通CH372; USB_RD=1;//禁止讀 P2=0xFF;// USB_DATA_INTPUT=0xFF;//拉高引腳 return dat; //返回讀取到的數(shù)據(jù) } //-----------------------------------------------------------------------

// CH375初始化子程序 void CH375_Init( ) { unsigned char i; // 測試CH375是否正常工作,可選操作,通常不需要 CH375_WR_CMD_PORT( CMD_CHECK_EXIST );// 測試CH375是否正常工作 0x06 CH375_WR_DAT_PORT( 0x55 ); // 寫入測試數(shù)據(jù)

i = ~ 0x55; // 返回數(shù)據(jù)應該是測試數(shù)據(jù)取反 if ( CH375_RD_DAT_PORT( ) != i ) { // CH375不正常 for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL );// 多次重復發(fā)命令,執(zhí)行硬件復位 CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT( 0 ); Delay50ms( ); // 延時50ms }

// 設置USB工作模式, 必要操作 CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 2 );// 設置為使用內(nèi)置固件的USB設備方式 for ( i=100; i!=0; i-- ) { // 等待操作成功,通常需要等待10uS-20uS if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } // if ( i==0 ) { CH372/CH375存在硬件錯誤 }; // 下述啟用中斷,假定CH375連接在INT0 IT0 = 0; // 置外部信號為低電平觸發(fā) IE0 = 0; // /* 清中斷標志 */covered by hjb EX0 = 1; // /* 允許CH375中斷 */ // EA=1;//HJB

}

// CH375中斷服務程序,使用寄存器組1 void mCh375Interrupt( ) interrupt 0 using 1 { unsigned char InterruptStatus; unsigned char i, length; unsigned char data buffer[ 64 ];

CH375_WR_CMD_PORT( CMD_GET_STATUS ); // 獲取中斷狀態(tài)并取消中斷請求 InterruptStatus = CH375_RD_DAT_PORT( );// 獲取中斷狀態(tài)

switch ( InterruptStatus ) { // 分析中斷狀態(tài)處理 case USB_INT_EP2_OUT: { // 批量端點下傳成功 CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); // 從當前USB中斷的端點緩沖區(qū)讀取數(shù)據(jù)塊,并釋放緩沖區(qū)

length = CH375_RD_DAT_PORT( ); // 首先讀取后續(xù)數(shù)據(jù)長度 for ( i = 0; i < length; i ++ )

buffer[ i ] = CH375_RD_DAT_PORT( ); // 接收數(shù)據(jù)包

// 測試數(shù)據(jù)正確性,將接收到的命令包數(shù)據(jù)取反后返回給PC機 CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 );// 向USB端點2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊

CH375_WR_DAT_PORT( length ); // 首先寫入后續(xù)數(shù)據(jù)長度,回傳剛接收到的數(shù)據(jù)長度 for ( i = 0; i < length; i ++ ) CH375_WR_DAT_PORT( ~ buffer[ i ] ); // 數(shù)據(jù)取反后返回,由計算機應用程序測試數(shù)據(jù)是否正確 break; } case USB_INT_EP2_IN: { // 批量數(shù)據(jù)發(fā)送成功 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); // 釋放當前USB緩沖區(qū) break; } default: { // 其它中斷,未用到,解鎖后退出即可 CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); // 釋放當前USB緩沖區(qū) break; } } }

main( ) { USB_A0=1; //USB_A0=USB_CMD_MODE;//命令模式 USB_WR=1; USB_CS=1;USB_RD=1;INT=1; //------------ Delay50ms( );// 延時等待CH375初始化完成,如果單片機由CH375提供復位信號則不必延時 CH375_Init( ); // 初始化CH375 EA = 1; // 允許中斷 while ( 1 ); /// 以下指令開始工作循環(huán),等待PC機命令進行操作 }

首先單片機端確保硬件連接沒有問題,在CH375_Init( );函數(shù)中CMD_CHECK_EXIST和CMD_SET_USB_MODE能夠正常通過。然后,你USB口連接電腦,設備管理器是否彈出未識別的設備。最后,需要安裝我們的CH372DRV的驅動才能正常識別。


我硬件已經(jīng)檢查了,沒發(fā)現(xiàn)什么問題,不知程序哪里有問題,哎 萬事開頭難,沒想到這么難


如果硬件沒有問題,你那檢查一下并口的時序,首先確認你IO能夠正常輸入輸出,必須確保測試命令正確通過,后面的調試簡單了。


我用萬用表量并口IO,但并口輸出 并沒有所謂命令取反(是不是用萬用表量不準,變化太快或者....),但我接入電腦,電腦硬件有顯示CH372/CH375,而且顯示正常,用“DEBUG372調試設備,設備可以正常打開,而且有檢測到CH372/CH375輸入;但輸入下傳數(shù)據(jù)后,上傳不了數(shù)據(jù)(按理上傳取反);請問什么原因,項目緊迫,請多多指教,萬分感謝!


測試命令你最好是先把CH372返回的值存起來,通過打印或者點燈的方式來看。因為單片機收到并口數(shù)據(jù),CH372會進入下一個傳輸階段,這時使用萬用表的話是量不出來的。 從你描述的現(xiàn)象來看,計算機是識別了CH372設備,可以說明通訊接口沒問題。上傳數(shù)據(jù)的話需要提前準備好數(shù)據(jù),然后點擊上傳按鈕,會有中斷產(chǎn)生,然后接收數(shù)據(jù),你看一下有沒有這個中斷?


我用LED燈接單片機并口觀察命令時,就無法識別CH372,把LED燈去掉,就能識別CH372,而且可以正常打開DEBUG372調試設備,只是下傳數(shù)據(jù)后,上傳不了,這樣的話可不可以確定CH372測試命令是正常的嗎? 還有,我目前開發(fā)的項目是跟外面對接的,我只是負責把按鍵開關量通過CH372傳給電腦上位機就行,至于你是所說打印串口命令 一時搞不明白,剛接觸CH372,很多都不懂,而項目又緊,還是請多多指教


還有,我用萬用表量了一下A0端口 ,一直都是低電平,是否跟這有關


點上下傳時,用萬用表量中斷口一直是高電平


關于LED燈:你做個判斷,如果獲取到的數(shù)據(jù)是你發(fā)下去數(shù)據(jù)的取反LED燈亮,否則LED不亮。 關于萬用表測中斷:我們中斷產(chǎn)生到中斷撤銷都是us級,必須要用示波器觀察,用萬用表肯定都是高電平。


用示波器測試,中斷正常,下傳正常,但上傳不了,是不是中斷服務程序上傳沒寫好,可給個例子嗎?謝謝!


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频