基于論壇上ch375_host_int_para.c程序,用串口操作USB鼠標,在do-while中加上if ( wait_interrupt()==USB_INT_DISCONNECT ){EA=0;break;}或 CH375_WR_CMD_PORT(CMD_TEST_CONNECT )命令均未成功-----希望得到各位論壇朋友的支持分析一下原因,程序如下: do{ if(flag_output==1) {flag_output=0; my_program( );} if ( wait_interrupt()==USB_INT_DISCONNECT ){EA=0;break;} //CH375_WR_CMD_PORT(CMD_TEST_CONNECT );//status = CH375_RD_DAT_PORT( ); //if(status== USB_INT_DISCONNECT ){EA=0;break;} }while (1); 現(xiàn)將判斷程序做在中斷中可以支持熱插拔了,在中斷中建立一個flag_USBbreak標志,在do-while中做break處理,中斷程序修改如下: void intt0() interrupt 0 { unsigned char len_temp,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); status=CH375_RD_DAT_PORT(); /******以下為增加的程序********/ if(status==USB_INT_DISCONNECT) { flag_USBbreak=1; } /******************************/ else if(status!=USB_INT_SUCCESS)//&& 。。。。。。同原程序 else 。。。。。。同原程序 } do-while中判斷程序: do{ if(flag_USBbreak==1) { flag_USBbreak=0; EA=0; break; } 。。。。。。后面同原程序
這個問題可能原因是在執(zhí)行wait_interrupt()或者CH375_WR_CMD_PORT(CMD_TEST_CONNECT )函數(shù)的時候進入了intt0中斷導致自身的中斷沒等到跳不出do-while循環(huán)。 至于并口因為執(zhí)行速度比較快等到自身中斷后跳出了循環(huán)所以正常。
再補充一個問題:原來能正常操作鼠標,在do-while中加上if ( wait_interrupt()==USB_INT_DISCONNECT ){EA=0;break;}或 CH375_WR_CMD_PORT(CMD_TEST_CONNECT )命令后,鼠標也不能正常操作了。
鼠標拔出之后再插上能正常工作,必須對它重新枚舉。你循環(huán)都跳不出,所以不能正常使用。
抱歉,關于第二樓的“再補充一個問題”沒有說清楚----再說清楚一點:原來能正常操作鼠標,在do-while中加上if ( wait_interrupt()==USB_INT_DISCONNECT ){EA=0;break;}或 CH375_WR_CMD_PORT(CMD_TEST_CONNECT )命令后,在不拔出鼠標的情況下,鼠標也不能正常操作了----如果這個問題分析清楚了,也就分析出為什么不能在do-while中加上述語句解決熱插拔問題了。
void intt0() interrupt 0 這里你用的中斷方式來處理中斷的。 在do while函數(shù)你又去查詢中斷。會造成程序死在這個函數(shù)里。
如果采用中斷方式 這邊就不要查詢中斷了?;蛘呷扛某刹樵兊姆绞?。
void intt0() interrupt 0 這里你用的中斷方式來處理中斷的。 在do while函數(shù)你又去查詢中斷。會造成程序死在這個函數(shù)里。
如果采用中斷方式 這邊就不要查詢中斷了?;蛘呷扛某刹樵兊姆绞健?/p>