5楼: 有可能是你设置地址处理不对吧 <br /><br />需要先设置地址,再返回0长度的状态包。<br /><br />关于D12的例子,我的USB小组里有很多。 <br /> <br />//////////////////////////////////////////////////////////<br />//设置地址<br />void set_address(void)<br />{<br />D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &<br />DEVICE_ADDRESS_MASK), 1);<br />single_transmit(0, 0);<br /><br /><br />}<br /><br /><br />上面是我的代码,设置地址代码应该是没有问题的。<br />///////////////////////////////////////////////////////////<br />关于设置断点后枚举成功的问题,我导师说只是多了一个延时,后来我把下面的程序:<br /><br />//USB中断服务子程序<br />void fn_usb_isr()<br />{<br /> unsigned int i_st;<br /> bEPPflags.bits.in_isr = 1;<br /> i_st = D12_ReadInterruptRegister();//读取中断寄存器 调用D12ci.c中的<br /> if(i_st != 0){........}<br /><br />改成:<br /><br />//USB中断服务子程序<br />void fn_usb_isr()<br />{<br /> unsigned int i_st;<br /><br /> bEPPflags.bits.in_isr = 1;<br /><br /> i_st = D12_ReadInterruptRegister();//读取中断寄存器 调用D12ci.c中的子程序<br /> <br /> i_st = D12_ReadInterruptRegister();//此处为加上去的,读中断寄存器两次<br /> if(i_st != 0)<br /><br />这样却能在去掉断点后能成功枚举,电脑能识别到设备。<br />//////////////////////////////////////////////////////////<br /> 请再问大家这是什么问题引起的呢?
|