我使用ch375做的一個電路板與pc通訊,使用demo里提供的初始化與中斷設(shè)置,在不操作其它硬件的情況下,正常使用,當(dāng)時一操作其它硬件,進入中斷的時候讀取中斷狀態(tài)的時候,ch375就斷開,在中斷中不操作ch375沒問題,調(diào)試使用的ch372debug。exe,不知道什么原因
可以把你的代碼貼出來看看,你這樣做一下實驗,當(dāng)你讀狀態(tài)的時候,26,25引腳會不會有電平變化,有變化說明被復(fù)位了.
謝謝我先測一下電壓
25,26腳的電壓沒有變化 下面是我的代碼 /*USB設(shè)備的初始化 */ void CH375_Init( ) { unsigned char i; /* 測試CH375是否正常工作,可選操作,通常不需要 */ CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 測試CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 寫入測試數(shù)據(jù) */ i = ~ 0x55; /* 返回數(shù)據(jù)應(yīng)該是測試數(shù)據(jù)取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT( 0 ); Delay50ms( ); /* 延時50ms */ } /* 設(shè)置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 2 ); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ 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; /* 清中斷標(biāo)志 */ EX0 = 1; /* 允許CH375中斷 */ }
/*USB的中斷處理*/ void Ch375Interrupt( ) interrupt 0 using 1 { unsigned char InterruptStatus; unsigned char i, length;
CH375_WR_CMD_PORT ( CMD_GET_STATUS ); /* 獲取中斷狀態(tài)并取消中斷請求 */ InterruptStatus = CH375_RD_DAT_PORT( ); /* 獲取中斷狀態(tài) */ IE0 = 0; switch ( InterruptStatus ) { /* 分析中斷狀態(tài)處理 */ case USB_INT_EP2_OUT: { /* 批量端點下傳成功 */ // CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從當(dāng)前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ù)包 */ delay2us(); /* 測試數(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ù)取反后返回,由計算機應(yīng)用程序測試數(shù)據(jù)是否正確 */ break; } case USB_INT_EP2_IN: { /* 批量數(shù)據(jù)發(fā)送成功 */ // CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } case USB_INT_EP1_OUT: { /* 中斷數(shù)據(jù)接受成功 */ break; } case USB_INT_EP1_IN: { /* 中斷數(shù)據(jù)發(fā)送成功 */ bUsbSend = 0; // CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } default: { /* 其它中斷,未用到,解鎖后退出即可 */ // CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 釋放當(dāng)前USB緩沖區(qū) */ break; } } }
我的程序中還使用51的uart進行串口通訊,不知有影響沒?
別光看呀,各位過路的同志提個建議先
所有的函數(shù)里面USB-ULOCK命令要全部打開,還有就是你需要讀取數(shù)據(jù),否則的話你發(fā)送一次完了之后后面沒辦法進行操作.
打開的情況我試了一下,還是出現(xiàn)問題,單獨不操作其它硬件的情況下比如ad,串口,通訊正常是否與其他操作存在沖突,如存在,可能是哪里,是軟件還是硬件
如果你只設(shè)置模式打開設(shè)備還失敗的話,那你就需要檢查下USB口上面是不是存在問題?包括共地性能,V3引腳的電容是多少?等等.
地址設(shè)置是否有沖突,在數(shù)據(jù)線和控制線共用的時候,操作其它器件的時候不能片選ch375,同樣操作CH375的時候不能片選其他硬件
地址沒有沖突的,v3電容也檢查了,接地使用的覆銅接地
實際的器件地址如下: unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBFFF; /* CH375命令端口的I/O地址 */ unsigned char volatile xdata CH375_DAT_PORT _at_ 0xB7FF; /* CH375數(shù)據(jù)端口的I/O地址 */
unsigned char volatile xdata XCMD_PORT _at_ 0xFAFF; /* x命令端口的I/O地址 */ unsigned char volatile xdata XDAT_PORT _at_ 0xF8FF; /* x數(shù)據(jù)端口的I/O地址 */ unsigned char volatile xdata YCMD_PORT _at_ 0xFEFF; /* y命令端口的I/O地址 */ unsigned char volatile xdata YDAT_PORT _at_ 0xFCFF; /* y數(shù)據(jù)端口的I/O地址 */
幫忙看看,
reti接的是0.47 v3電容0.01
單獨的usb訪問硬件并通訊沒有問題,同時加入串口就出現(xiàn)問題,同時單獨的串口通訊沒有問題
那需要看下你加上串口之后的程序,你可以把程序發(fā)到我們的技術(shù)支持信箱:tech@wch.cn,我們幫您分析下看會是哪的問題