while( 1 ) { while(wait_interrupt() != USB_INT_CONNECT); /* 等待设备端连接上来 */ Delay_ms( 5 ); reset_device( ); Delay_ms( 5 ); //get_descr(0x01); //获取设备描述符 set_addr( 5 ); //设置地址 设置设备端的USB地址 get_descr(0x02); //获取配置描述符 parse_config_descr( ); //保存描述符中一些值 set_config(config_value);//设置配置,config_value取自USB设备的配置描述符 if(set_idle( ) != 1) err(); Delay_ms(250); _SEI( ); //打开中断,从中断端点接收数据 get_int_in( ); //发送从中断端点读数据的令牌 do{ if(flag_output == 1) // { P1_2 ^= 0x01; flag_output = 0; } if(device_disconnect == 1) //如果在中断程序中操作状态是USB_INT_DISCONNECT, { 则程序跳出do{ }while(1)这个循环,重新检测鼠标的 _CLI(); 连接. PORTC_Bit0 = 0; break; } }while( 1 ); }
我的枚举也有些问题,就是加上 get_descr(0x01) 这个函数,有些鼠标不能通过,所以我就把这个函数给注释了,但是 get_descr(0x02) 这个函数却能通过.怎么回事?
还是当我的鼠标拨出来后,中断是可以接收到 USB_INT_DISCONNECT 这个状态码,程序也跳出了do{ }while(1) 这个循环,这时我再插上鼠标,375就怎么也找不到鼠标了. 但是开机的第一次热插上375时,375是能够找到鼠标并工作的