我參考范例,
1 初始化結(jié)束后CH372進入睡眠狀態(tài); 2 喚醒中斷中發(fā)送掛起檢測命令; 3 掛起中斷中再發(fā)送睡眠命令;
問題: 初始化后執(zhí)行睡眠命令后,CH372要自行進入喚醒狀態(tài)一次,不存在文檔中描述的喚醒條件【一是檢測到USB 總線有信號;二是單片機向CH372 芯片寫入新的命令】,之后的喚醒睡眠事件與實際操作一致。
我參考范例,
1 初始化結(jié)束后CH372進入睡眠狀態(tài); 2 喚醒中斷中發(fā)送掛起檢測命令; 3 掛起中斷中再發(fā)送睡眠命令;
問題: 初始化后執(zhí)行睡眠命令后,CH372要自行進入喚醒狀態(tài)一次,不存在文檔中描述的喚醒條件【一是檢測到USB 總線有信號;二是單片機向CH372 芯片寫入新的命令】,之后的喚醒睡眠事件與實際操作一致。
一旦執(zhí)行睡眠命令后,如果CH372檢測到USB總線上沒有有信號,就馬上睡眠。不知道您想表達的意思是什么? 這兩個條件肯定是成立的。如果不成立,詳細的說明一下你是怎么測試的,現(xiàn)象是什么
大部分內(nèi)容都是照搬了貴公司MCU_IF.C文件內(nèi)容 ch372_init(){ //最后一行 CH375_WR_CM_PORT(CMD_ENTER_SLEEP); }
ch372_interrupt(){ //其他中斷略 case USB_INT_USB_SUSPEND: CH375_WR_CM_PORT(CM_UNLOCK_USB); CH375_WR_CM_PORT( CM_CHK_SUSPEND); CH375_WR_DAT_PORT(0X10); CH375_WR_DAT_PORT(0X00); CH375_WR_CM_PORT(CMD_ENTER_SLEEP); display("USB 斷開信息"); break; case USB_INT_WAKE_UP: CH375_WR_CM_PORT(CM_UNLOCK_USB); CH375_WR_CM_PORT( CM_CHK_SUSPEND); CH375_WR_DAT_PORT(0X10); CH375_WR_DAT_PORT(0X04); display("USB 已連接信息"); break; default: CH375_WR_CM_PORT(CM_UNLOCK_USB); break; } 現(xiàn)象:初始化完成即產(chǎn)生一次USB_INT_WAKE_UP中斷,之后沒有誤觸發(fā)現(xiàn)象。
這個要進行設(shè)置才可以,按照下面的方法來做: /* 設(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-- ) if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 等待操作成功,通常需要等待10uS-20uS */ /* if ( i == 0 ) { CH372/CH375芯片內(nèi)部或者物理連接存在硬件錯誤 }; */
/* 設(shè)置檢查USB總線掛起狀態(tài),便于在USB總線掛起時使CH375也進入低功耗狀態(tài) */ CH375_WR_CMD_PORT( CMD_CHK_SUSPEND ); /* 設(shè)置檢查USB總線掛起狀態(tài)的方式 */ CH375_WR_DAT_PORT( 0x10 ); CH375_WR_DAT_PORT( 0x04 ); /* 以50mS為間隔檢查USB掛起 */
初始化過程就設(shè)置為“/* 以50mS為間隔檢查USB掛起 */”,那開機后豈不是要產(chǎn)生USB_INT_USB_SUSPEND中斷?我認為還是在 USB_INT_WAKE_UP中斷中設(shè)置更加合理。只是初始化完成即產(chǎn)生一次USB_INT_WAKE_UP中斷,不知道哪里出了問題。