你看下前面的枚举都成功吗?你可以用BUSHOUND抓下计算机操作扫描枪的步骤,然后你在参照这个步骤来写你单片机的枚举程序,可能你枚举的时候有点问题,在说你的这个程序有点问题,你用这段程序试下: void intt0() { unsigned char len_temp,status,i; unsigned char *BUF=buffer_r; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ status=CH375_RD_DAT_PORT();//printf("%02x ",(unsigned int)status);printf("\n"); if(status!=USB_INT_SUCCESS)//&&((status&0xf0)==0x20)) { CH375_WR_CMD_PORT( CMD_CLR_STALL );//printf("13\n"); CH375_WR_DAT_PORT(1); /* 如果设备端不是CH37X芯片,那么需要修改端点号 */ toggle_recv(1); issue_token_s(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } else{ len_temp=rd_usb_data(buffer_r); //键盘中断端点数据长度一般为8字节,鼠标为4字节 for(i=0;i!=8;i++)printf("%02x ",(unsigned int)buffer_r[i]); printf("\n"); // flag_output=0; tank=((~tank)&0x01); toggle_recv(tank); issue_token_s(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } }
查看: 7594
回复: 19
关于中断的问题,请教hcn!
hcn: 其实前面的枚举并不成功,我发现rd_usb_data();这个函数读不了数据,不管是前面的获取描述符,还是后面的接收数据。 所以,我走了条捷径,用相关软件抓取了扫描枪的描述符,然后根据这个来进行相关的设置,所以后面的代码里我就直接用1代替了endp_int。 其他部分跟你给的代码基本没分别。
hcn: 请问针对我们这样的课题,贵公司是否有比较实用的设备来进行调试? 我始终觉得仿真器有缺陷。
我们公司没有相关的设备,所以没帮法调试。
请勿发布广告和违法内容, 代码可以选择编辑器代码语言格式, 更易他人阅读帮助您, 或者留下联系方式,以便更好更快服务您
只有登录才能回复,可以选择微信账号登录