前段時間向貴公司申請了兩片CH375B,想用它做主機來和USB鍵盤通信,單片機用的是MSP430,
程序是參考的論壇里提供的CH375B操作HID設(shè)備的例程,開始程序在執(zhí)行設(shè)置CH375工作模式時中斷返
回正常,但在等待設(shè)備連接時中斷返回的卻是錯誤的,本來按照貴公司提供的頭文件CH375INC.H如果
連接正常,則應(yīng)返回0x15,但我的返回時0x95,硬件應(yīng)該沒問題,因為我仔細檢查過了,并且前面的
模式設(shè)置時中斷返回正常,請問這會是什么原因呢? 附上相關(guān)代碼: #define CH375_INT_WIRE P1IN&0x80 //P1.7 連接CH375的INT#引腳,用于查詢中斷狀態(tài) /************************************* //函數(shù)名稱:Wait_Interrupt //函數(shù)功能:主機端等待操作完成, 返回操作狀態(tài) //入口:無 //出口:Intout--狀態(tài)返回 //備注: ***************************************/ INT8U Wait_Interrupt(void) { while( CH375_INT_WIRE ); //查詢等待CH375操作完成中斷(INT#低電平) Ch375_Wr_Cmd_Port( CMD_GET_STATUS ); // 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) //return( Ch375_Rd_Dat_Port() ); Intout = Ch375_Rd_Dat_Port(); //此處僅僅為了測試,否者應(yīng)打開被屏蔽的語句 return (Intout); }
/************************************* //函數(shù)名稱:Ch375_Rd_Dat_Port //函數(shù)功能:從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機較快則延時 //入口:無 //出口:dout--讀得的數(shù)據(jù),一個字節(jié) //備注: ***************************************/ INT8U Ch375_Rd_Dat_Port(void) { INT8U dout; CH375_A0_CLR; //A0=1時為寫入命令 =0為寫入數(shù)據(jù) CH375_WR_SET; CH375_RD_CLR; //RD=0時表示讀入操作 Delay_X_Us(2);// 因為MSP430單片機較快所以需延時 CH375_DATA_IN; dout= P2IN; Delay_X_Us(1); CH375_RD_SET;//RD=0時表示讀入操作 Delay_X_Us(1); return(dout); }
/************************************* //函數(shù)名稱:Ch375_Wr_Cmd_Port //函數(shù)功能:向CH375寫命令,周期不小于4uS,如果單片機較快則延時 //入口:cmd--待寫命令 //出口:無 //備注: ***************************************/ void Ch375_Wr_Cmd_Port( INT8U cmd ) { CH375_A0_SET;//A0=1時為寫入命令 CH375_RD_SET;//RD=0時表示讀入操作 CH375_DATA_OUT; P2OUT=cmd; CH375_WR_CLR; Delay_X_Us(2); CH375_WR_SET; Delay_X_Us(2); }
貴公司提供的頭文件部分內(nèi)容如下: /* 以下狀態(tài)代碼1XH用于USB主機方式的操作狀態(tài)代碼, 僅CH375支持 */ #ifndef USB_INT_SUCCESS #define USB_INT_SUCCESS 0x14 /* USB事務(wù)或者傳輸操作成功 */ #define USB_INT_CONNECT 0x15 /* 檢測到USB設(shè)備連接事件 */ #define USB_INT_DISCONNECT 0x16 /* 檢測到USB設(shè)備斷開事件 */ #define USB_INT_BUF_OVER 0x17 /* USB控制傳輸?shù)臄?shù)據(jù)太多, 緩沖區(qū)
溢出 */ #define USB_INT_USB_READY 0x18 /* USB設(shè)備已經(jīng)被初始化(已分配
USB地址) */ #define USB_INT_DISK_READ 0x1D /* USB存儲器讀數(shù)據(jù)塊, 請求數(shù)據(jù)讀
出 */ #define USB_INT_DISK_WRITE 0x1E /* USB存儲器寫數(shù)據(jù)塊, 請求數(shù)據(jù)寫
入 */ #define USB_INT_DISK_ERR 0x1F /* USB存儲器操作失敗 */ #endif
這個頭文件應(yīng)該沒問題吧,它對于鍵盤設(shè)備應(yīng)該是一樣的吧? 誰對這方面比較熟悉請幫我分析一下,先謝謝了!