求助:ch375识别键盘问题,急!!!

用了本站给的操作复合设备键盘的例程,前半部分程序没有问题,最后读键盘数据时,只能读到按下的第一个键的中断,得到键值也没问题,但是之后的再按按键一点反应都没有,不会进入中断里,不知道是不是端点切换同步出现了问题,还是其他问题?我不太懂那个同步切换的原理。出问题的程序在这: while(1) { if(CHECK_DEVICE()==USB_INT_DISCONNECT)break;//检查设备是否存在,断开则退出 else{ status=Interrupt_Data_Trans(Data_Buf,EndpIn1,TogDevice1); if(status==USB_INT_DISCONNECT)break; //设备断开,退出 status=Interrupt_Data_Trans(Data_Buf,EndpIn2,TogDevice2); if(status==USB_INT_DISCONNECT)break; //设备端断开,退出 } }

//复合设备,则可以根据端点地址来切换相应的同步位 unsigned char Interrupt_Data_Trans(unsigned char *buf,unsigned char Endp,unsigned char RecvTog) { unsigned char status,Value=0x00;//,i=0x00,length=0x00 Set_RecvTog(RecvTog); Issus_Token( (Endp<<4)|DEF_USB_PID_IN ); status=wait_interrupt(); if(status==USB_INT_SUCCESS)//事务成功,同步翻转 { Rd_Usb_Data(buf);//读取数据 if(Endp==EndpIn1)//由于在保存参数时,已经限制EndpIn1为键盘的相关参数,是键盘检查是否需要点亮LED { if((buf[2]==0x53)||(buf[2]==0x39)||(buf[2]==0x47))//NUM LOCk,SCROLL LOCK,CAPS LOCK { Value=ReportValueCheck(buf[2]); status=Set_Report(Value); //点亮LED } TogDevice1^=0x40;//获取键盘数据成功,切换相应的同步位 } else TogDevice2^=0x40;//获取其他接口设备的数据成功,切换相应同步位 } return ( status ); //返回设备状态 }

初始化完设备之后,设置一下CH375的重试次数,看看 CH375_WR_CMD_PORT( 0X2B ); //设置CH375重试次数 CH375_WR_DAT_PORT( 0x25 ); CH375_WR_DAT_PORT( 0x00 );


重复次数我也是这样设置的


而且每次执行Issus_Token( (Endp<<4)|DEF_USB_PID_IN );事务后都会有中断,但状态码不是USB_INT_SUCCESS 理论上在执行Issus_Token( (Endp<<4)|DEF_USB_PID_IN );后,如果没有按键按下,他应该不会产生中断吧,应该会一直在执行status=wait_interrupt();这一句吧??????????


那个错误的状态吗好像一直都是0x2A,对应于USB_INT_RET_NAK


如果没有按键按下,返回中断状态是0X2A是正确的,如果有数据的话,则返回USB_INT_SUCCESS 把你获取的描述符贴出来看看。


只有登录才能回复,可以选择微信账号登录