[求助] CH376 初始化

我設(shè)計(jì)的的電路是CH376的參考電路,只有A0接口是單片機(jī)P0.0口引出經(jīng)74LS373輸出的Q0口連到376上面,其他跟沁恒參考電路幾乎一樣,就是初始化不成功串口反饋ERR_USB_UNKNOWN

UINT8V xdata CH376_CMD_PORT _at_ 0x8001; /* 假定CH376命令端口的I/O地址 */ UINT8V xdata CH376_DAT_PORT _at_ 0x8000; /* 假定CH376數(shù)據(jù)端口的I/O地址 */

#define CH376_INT_WIRE INT0 /* 假定CH376的INT#引腳,如果未連接那么也可以通過查詢狀態(tài)端口實(shí)現(xiàn) */

void CH376_PORT_INIT( void ) /* 由于使用標(biāo)準(zhǔn)并口讀寫時(shí)序,所以無需初始化 */ { }

void mDelay0_5uS( void ) /* 至少延時(shí)0.5uS,根據(jù)單片機(jī)主頻調(diào)整 */ {

}

#define xEndCH376Cmd( ) /* 結(jié)束CH376命令,僅用于SPI接口方式 */

#define xReadCH376Status( ) ( CH376_CMD_PORT ) /* 從CH376讀狀態(tài),僅用于并口方式 */

void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ { UINT8 i; CH376_CMD_PORT = mCmd; mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( ); /* 延時(shí)1.5uS確保讀寫周期大于1.5uS,或者用下面幾行的狀態(tài)查詢代替 */ for ( i = 10; i != 0; -- i ) { /* 狀態(tài)查詢,等待CH376不忙,或者上面一行的延時(shí)1.5uS代替 */ if ( ( xReadCH376Status( ) & PARA_STATE_BUSY ) == 0 ) break; /* 檢查狀態(tài)端口的忙標(biāo)志位 */ } }

#ifdef FOR_LOW_SPEED_MCU /* 不需要延時(shí) */ #define xWriteCH376Data( d ) { CH376_DAT_PORT = d; } /* 向CH376寫數(shù)據(jù) */ #define xReadCH376Data( ) ( CH376_DAT_PORT ) /* 從CH376讀數(shù)據(jù) */ #else void xWriteCH376Data( UINT8 mData ) /* 向CH376寫數(shù)據(jù) */ { CH376_DAT_PORT = mData; mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ }

UINT8 xReadCH376Data( void ) /* 從CH376讀數(shù)據(jù) */ { mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ return( CH376_DAT_PORT ); }

#endif

/* 查詢CH376中斷(INT#低電平) */ UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 */ #else return( xReadCH376Status( ) & PARA_STATE_INTB ? FALSE : TRUE ); /* 如果未連接CH376的中斷引腳則查詢狀態(tài)端口 */ #endif }

void mInitSTDIO( void ) { SCON = 0x50; PCON = 0x80; TMOD = 0x21; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; }

void main() {

UINT8 a; UINT8 i; for ( i = 0; i<250; i++ ); mInitSTDIO( ); printf("start\n"); for ( i = 0; i<250; i++ ); while(1) { a = mInitCH376Host( ); if(a==USB_INT_SUCCESS) { for ( i = 0; i<250; i++ ); printf("USB_INT_SUCCESS\n"); for ( i = 0; i<250; i++ ); } else if(a==ERR_USB_UNKNOWN ) { for ( i = 0; i<250; i++ ); printf("ERR_USB_UNKNOWN\n"); for ( i = 0; i<250; i++ ); } else printf("abc\n"); for ( i = 0; i<250; i++ ); while(1); } }

UINT8 mInitCH376Host( void ) /* 初始化CH376 */ { UINT8 res; CH376_PORT_INIT( ); /* 接口硬件初始化 */ xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 測試單片機(jī)與CH376之間的通訊接口 */ xWriteCH376Data( 0x65 ); res = xReadCH376Data( ); // xEndCH376Cmd( ); // 并口方式不需要 if ( res != 0x9A ) return( ERR_USB_UNKNOWN ); /* 通訊接口不正常,可能原因有:接口連接異常,其它設(shè)備影響(片選不唯一),串口波特率,一直在復(fù)位,晶振不工作 */ xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 設(shè)備USB工作模式 */ xWriteCH376Data( 0x06 ); mDelayuS( 20 ); res = xReadCH376Data( ); // xEndCH376Cmd( ); // 并口方式不需要 if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS ); else return( ERR_USB_UNKNOWN ); /* 設(shè)置模式錯(cuò)誤 */ }

是測試命令不通過?檢查硬件VCC,晶振是否起振,25腳是否為電平?你可以把你的原理圖發(fā)到我郵箱。


好的 郵箱是不是個(gè)人信息保護(hù),已隱藏


是的餓


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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