[求助]用375控制鼠標(biāo)不能實(shí)現(xiàn)熱插撥,怎么回事?

while( 1 ) { while(wait_interrupt() != USB_INT_CONNECT); /* 等待設(shè)備端連接上來 */ Delay_ms( 5 ); reset_device( ); Delay_ms( 5 ); //get_descr(0x01); //獲取設(shè)備描述符 set_addr( 5 ); //設(shè)置地址 設(shè)置設(shè)備端的USB地址 get_descr(0x02); //獲取配置描述符 parse_config_descr( ); //保存描述符中一些值 set_config(config_value);//設(shè)置配置,config_value取自USB設(shè)備的配置描述符 if(set_idle( ) != 1) err(); Delay_ms(250); _SEI( ); //打開中斷,從中斷端點(diǎn)接收數(shù)據(jù) get_int_in( ); //發(fā)送從中斷端點(diǎn)讀數(shù)據(jù)的令牌 do{ if(flag_output == 1) // { P1_2 ^= 0x01; flag_output = 0; } if(device_disconnect == 1) //如果在中斷程序中操作狀態(tài)是USB_INT_DISCONNECT, { 則程序跳出do{ }while(1)這個(gè)循環(huán),重新檢測鼠標(biāo)的 _CLI(); 連接. PORTC_Bit0 = 0; break; } }while( 1 ); }

我的枚舉也有些問題,就是加上 get_descr(0x01) 這個(gè)函數(shù),有些鼠標(biāo)不能通過,所以我就把這個(gè)函數(shù)給注釋了,但是 get_descr(0x02) 這個(gè)函數(shù)卻能通過.怎么回事?

還是當(dāng)我的鼠標(biāo)撥出來后,中斷是可以接收到 USB_INT_DISCONNECT 這個(gè)狀態(tài)碼,程序也跳出了do{ }while(1) 這個(gè)循環(huán),這時(shí)我再插上鼠標(biāo),375就怎么也找不到鼠標(biāo)了. 但是開機(jī)的第一次熱插上375時(shí),375是能夠找到鼠標(biāo)并工作的

你可以將你的主程序全部的帖出來看下,以及你插上鼠標(biāo)之后,程序停在了什么地方??插上去之后375有沒有產(chǎn)生中斷??你可以測下375的中斷腳是高還是低?


void main(void) { AVR_Device_Init( ); //設(shè)置波特率為9600 Delay_ms(250); if(modify_baudrate(0x03,0xcc) != 1) //在9600下將CH375波特率修改為115200,或其他值 err( ); if(set_usb_mode( 6 ) != 1) //設(shè)置USB主機(jī)模式, 如果設(shè)備端是CH37X,5和6均可 err( ); #ifdef TEST_LOW_SPEED set_freq(0x01); //work in 1.5M,設(shè)置系統(tǒng)工作頻率 Delay_ms( 5 ); UBRRH = 0X00; //設(shè)置波特率 UBRRL = 0X2F; //14.4Kbps #endif while( 1 ) { while(wait_interrupt() != USB_INT_CONNECT); /* 等待設(shè)備端連接上來 */ Delay_ms( 5 ); reset_device( ); Delay_ms( 5 ); //get_descr(0x01); //獲取設(shè)備描述符 set_addr( 5 ); //設(shè)置地址 設(shè)置設(shè)備端的USB地址 get_descr(0x02); //獲取配置描述符 parse_config_descr( ); //保存描述符中一些值 set_config(config_value);//設(shè)置配置,config_value取自USB設(shè)備的配置描述符 if(set_idle( ) != 1) err(); Delay_ms(250); _SEI( ); //打開中斷,從中斷端點(diǎn)接收數(shù)據(jù) get_int_in( ); //發(fā)送從中斷端點(diǎn)讀數(shù)據(jù)的令牌 do{ if(flag_output == 1) // { P1_2 ^= 0x01; flag_output = 0; } if(device_disconnect == 1) //如果在中斷程序中操作狀態(tài)是USB_INT_DISCONNECT, { 則程序跳出do{ }while(1)這個(gè)循環(huán),重新檢測鼠標(biāo)的連接. _CLI(); PORTC_Bit0 = 0; break; //程序跳出do{ }while(1) } }while( 1 ); } }

枚舉時(shí),我是用查詢法查詢375的狀態(tài),枚舉完后,單片機(jī)用中斷接收375的狀態(tài).這跟你們給我那個(gè)鼠標(biāo)程序一樣.


在你拔出鼠標(biāo)之后在插上去之后,你監(jiān)測下你的程序跑到什么地方去了?


hcn,軟件復(fù)位375怎么做,我想試一下在鼠標(biāo)撥去后,復(fù)位一下375,再重新初始化,


你可以發(fā)設(shè)置07模式復(fù)位USB總線 ,例如: CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 設(shè)置USB工作模式 */ CH375_WR_DAT_PORT( 7 ); /* 模式代碼,復(fù)位USB設(shè)備 */ mDelay10mS( ); /* 復(fù)位時(shí)間應(yīng)該在10mS左右 */ 也可以進(jìn)行硬件復(fù)位,例如: 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( ); /* 延時(shí)50ms */


在for循環(huán)里為什么要CH375_RD_DAT_PORT( ); 循環(huán)完后為什么要CH375_WR_CMD_PORT( 0 );

這樣行不行: for ( i=80; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ } Delay50ms( ); /* 延時(shí)50ms */


CH375_RD_DAT_PORT( )只是看發(fā)了復(fù)位命令后讀出來的數(shù)據(jù)是什么.成功后就寫命令0. 下面的也可以


loveapple,謝謝


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

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