OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6438|回复: 7

求助STM32实验PS2鼠标转换成USB鼠标问题

[复制链接]

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-10-20
在线时间
7 小时
发表于 2013-1-18 16:26:57 | 显示全部楼层 |阅读模式
用原子哥的实验33 PS2鼠标实验和实验49 触控USB鼠标实验整合。发现做出来的鼠标不好使,在Win7系统上还ok,在XP系统上感觉卡顿,左右快速移动鼠标更能感觉出来,请问有哪位高手能解释一下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-18 16:37:20 | 显示全部楼层
原子哥的触控USB鼠标程序并不是写的很好,我感觉。
因为USB发送数据,需要进入端点输入中断后,才可以发下一帧数据。但是原子哥的程序里面没有对这个问题进行处理。
电子圈圈的书里面是说过这一点的。

不知道是不是这个原因引起的。
回复 支持 0 反对 1

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-18 16:33:28 | 显示全部楼层
建议你使用bushound来检测一下数据的发送接收情况。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-10-20
在线时间
7 小时
 楼主| 发表于 2013-1-18 16:45:40 | 显示全部楼层
下面是我的调用程序  
 if ((PS2_Status&0x80) && (bDeviceState == CONFIGURED))
    {
// (PS2_Status&0x80)//得到了一次数据
if(gunlun==0)
{
    USB_To_PC_Send_Data(ENDP2,PS2_DATA_BUF, 4);  
}
 if(PS2_DATA_BUF[3]==0) gunlun=0;
 if(PS2_DATA_BUF[3]==255||PS2_DATA_BUF[3]==1) gunlun=1;
    S2_Status=MOUSE;
    S2_En_Data_Report();//使能数据报告
   

// }
#ifdef DebugPS2
printf("PS2_DATA_BUF[0]%d\r\n",PS2_DATA_BUF[0]);
printf("PS2_DATA_BUF[1]%d\r\n",PS2_DATA_BUF[1]);
printf("PS2_DATA_BUF[2]%d\r\n",PS2_DATA_BUF[2]);
printf("PS2_DATA_BUF[3]%d\r\n",PS2_DATA_BUF[3]);
#endif
    }
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-10-20
在线时间
7 小时
 楼主| 发表于 2013-1-18 16:49:20 | 显示全部楼层
PS2的解码程序完全按照原子哥的程序,解码完全正确,就是发现会滞后很多,72M的速度,按道理不应该啊,win7系统挺流畅的,XP就卡
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-1-18 17:01:21 | 显示全部楼层
发送数据后,应该置标志BUSY为1,在端点1输入中断中把BUSY清0,,
BUSY为1时不可以发送数据,BUSY为0时才可以发送数据。

我不知道是不是这个原因。
滞后很多事什么意思?
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-10-20
在线时间
7 小时
 楼主| 发表于 2013-1-21 10:19:16 | 显示全部楼层
void EP2_IN_Callback(void)
{
EP2BUSY = 0;
printf("EP2_IN_CallbackEP2BUSY = %d\r\n",EP2BUSY) ;
PS2_En_Data_Report();//使能数据报告


}
增加这样的程序更郁闷了,只会进入1次就不会进入USB中断了
在USB中断服务函数增加串口打印代码
void USB_Istr(void)
{

  wIstr = _GetISTR();
if(EP2BUSY)UartPutChar('a');
发现连续进入几次USB中断服务程序
打印情况:0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2aEP2_IN_CallbackEP2BUSY = 0
0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。。。。
之后USB不会工作啦,请高手帮忙解决,O(∩_∩)O谢谢。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-10-20
在线时间
7 小时
 楼主| 发表于 2013-1-21 10:55:44 | 显示全部楼层
发现不停进到ISTR_SOF中断,不明白为什么一直进入ISTR_SOF中断
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 21:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表