lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:3162回复:32

D12急问:为什么进不去IN中断。急急,(给分)

楼主#
更多 发布于:2004-09-22 14:43
我向端点2IN缓冲区,写10个数,为什么进不去IN中断。
 unsigned char  ExBuf[10]={'1','2','3','4','5','6','7','8','9','0'};

 D12_WriteEndpoint(5,10,ExBuf);
在此语句之后,是点亮一个指示灯,灯亮。可以确定,上语句确实执行了。
  究竟为什么不进入IN中断呢,是不是主机没有把数取走,为什么呢?急急急!

 
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-12 21:35
大侠们回答一下我的问题呀,下面这个结果对不对

对于端点1,在固件里向端点1写数,打开d12test才可以进入in中断,在固件里向端点2写数,需要选中扫描方式才可以进入in中断,这结果对不对呀。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-11 10:49
wly76:你说的在d12test中加入文件操作,把输入输出数据写入文件分析,这个我不会。
你有没有qq,我有很多问题想和你聊聊。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-11 10:34
    厂商处理请求确实是在main()中轮训的。但我一直都不太明白,厂商处理请求有什么作用。

    现在我手边有两个d12test,同样的缓冲区,为什么他们测试出的速率是不相同的呢?

    现在IN中断是都可以进去的,对于端点1,向端点1写数就可以进入in中断,向端点2写数,需要选中扫描方式才可以进入in中断,这结果应该是正确的吧?
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-11 08:48
zlg端点2的厂商请求写处理是在main()中轮巡的。 :D :P
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-11 08:45
d1,d2就是测试端点1的,循环读写没有报错就说明端点2传输是成功的,建议在d12test中加入文件操作,把输入输出数据写入文件分析
就一切明了。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-10 16:14
各位大侠好:
   to wly76:我的固件 基本上是跟着周立功的走的, 端点2的处理是在中断里完成的。正确的循环读写应该怎样的呢? 每次均为成功,失败为零吗?

    d12test只能测试端点2,想测试端点1,应该怎么办,是不是要自己写一个应用程序?
  
    
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-10 13:55
大家好,希望大家十一过得愉快.
TO BREEZE_WANG:
 令牌包包含了几个部分:PID,ADDR,ENDPT,DATA...(好象,可能有遗漏
的).其中,PID标识该令牌种类,如:IN令牌,SETUP令牌==;ADDR标识设
备地址,就是给你分配的地址(通过SET ADDRESS命令),在设备ADDRESS
状态阶段之前是默认地址(00H);ENDPT标识令牌接收端点,即要用的管
道.所以,如果你的中断端点(假设为1端点)有数据要上传,HOST给你发
个端点0(CONFIG管道)的IN令牌,那你的数据还是上不去.
新手上路,请多关照.
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-10 10:50
D12TEST的扫描仪方式读,打印机方式写,循环读写交替重复上面两个步骤,要求的速度比单独一个工作方式要高,建议你把端口2的处理在中断
里直接处理。十一期间我仔细分析了D12TEST的源代码,我的理解是只要
单片机的处理速度够的话,他们的配合不会有问题,虽然仍有一些不尽人意的地方。
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-09 19:21
wly76,metalwing,wanggang508大家好,好久没见,回家放长假去了,说一下目前的情况。

 1 首先,我想要实现的是,串口和usb的通信,数据从usb的端点1发向串口,端点1用的是中断传输,这个方向不难实现。数据从串口发向usb口,将收到的数据写入端点2,我的本意是写入端点后,等待主机的 in令牌包,取走数据,进入in中断。 但是进不去,看了大家给我的建议,原因是不是这样的:
   我用的是周立功给的驱动和应用程序,它的端点2使用的是批量传输,正如zmwk所说,对于Bulk方式,发起方只能是应用程序,现在我在固件里将数据写入端点2,应用程序根本不知道,所以不发in令牌包。
  如果在固件里,将端点2改为中断传输的话,与驱动程序是不是又不对应了?

 2还有一个问题:现在d12test的扫描和打印方式都可以用了,循环方式总是成功为零,全部都失败,什么原因呢?
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-09 12:32
搞好了吗?我知道你的问题出在什么地方了,ZLGD12TEST用的同步方式与驱动通信,有时会造成堵赛,不过没有关系,你用的单片机ZLG
的C程序,在MAIN()中处理SETUP包,如果MAIN()中你加入了很多你的
处理程序,会影响到对SETUP包处理的响应速度,导致上为机要求端
点得不到回应,建议,MAIN()中轻装,不要主循环中加延时,D12TEST和ZLG驱动可以用,没有问题,以上结论,我已经过验证,没有问题。
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-10-02 10:19
不知,lhaih采用的是那种传输方式?是中断传输方式吗?为什么还存在:HOST发送IN令牌,取走后buff里的数据产生中断呢?这个中断做啥用的?

多多交流,少走弯路!!!
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-30 16:30
''Requesting data transfer on PIPE failed!Aborted''

bResult = ReadFile(hFile,
threadParam->pcIoBuffer,
threadParam->uiLength,
&nBytes,
NULL);
time1 = timeGetTime();
if (bResult != TRUE) {
DeviceIoControl(hFile,
IOCTL_D12_RESET_PIPE,
0,
0,
0,
0,
&nBytes,
NULL);
threadParam->bInThread = FALSE;
wsprintf (cc, "Reading ");
strcat( cc, threadParam->pipe_name);
strcat( cc, " failed! Aborted.");
testDlg->MessageBox((LPCSTR)cc, "Test Error");
break;
}
else
{
threadParam->ulCount += nBytes;
threadParam->total_time += (time1-(threadParam->Last_time));
threadParam->Last_time=time1;
if(time1 != time0 && (time1-time0-1)!=0)
{
threadParam->cur_rate = (nBytes*1000)/(time1-time0);
if(threadParam->cur_rate > threadParam->max_rate)
threadParam->max_rate = threadParam->cur_rate;
threadParam->bUpdate = TRUE;
}
}
}while(threadParam->bInThread == TRUE);
PIPE请求没有成功,查一下端点设置,这一段是D12TEST的代码,你自己仔细看一下代码可能对你有帮助。国庆快乐
 :cool:
breeze_wang
驱动牛犊
驱动牛犊
  • 注册日期2004-05-17
  • 最后登录2006-03-01
  • 粉丝0
  • 关注0
  • 积分66分
  • 威望10点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-09-30 15:30
metalwing:
如果你仅收到IN令牌,而没有收
到相应端点的IN令牌的话,数据也是发不出去的.

这句话是什么意思?
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-09-29 09:46
他的驱动和测试程序是不是仅仅是针对他做的板子,我的板子,用不了他的D12test测试程序了。
是的,但也不是说你用不了.只要你的固件跟着他的固件走就可以了.
也就是说,你的设备的接口,使用端点及类型,设备描述符==要和他的
一样就可以了.
新手上路,请多关照.
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-09-29 00:30
兄弟,别急!
有些问题要从根上解决。
usb是主从通信方式,且是一对多的。

所以,usb host 与 slave并不存在真正的中断方式,只有查询方式。所谓的中断方式只是总线驱动(由操作系统提供)帮你查询后再通知你的驱动和应用。

任何通信都得有一个发起方。对于Bulk方式,发起方只能是应用程序。也就是说,应用程序调用你的驱动,你的驱动调用总线驱动,token IN才会发出。否则怎么说Bulk传数比较节约带宽呢?因为它平时根本不工作。

另外一个就是驱动中读处理。标准驱动(或者说简化版)不提供超时处理,当要求读16字节时,如果固件只给10个字节,它会一直死在那里,如果加了超时,则可以返回错误代码,但这些完全由Driver作者指定。所以,如果driver不是你写的,或者你无法与作者沟通,那你会比较麻烦的。
A strong man can save himself. A great man can save another.
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-09-25 23:30
真是焦头烂额了,一个星期都没有进展,他的驱动和测试程序是不是仅仅是针对他做的板子,我的板子,用不了他的D12test测试程序了。
按下Start 提示,“Requesting data transfer on PIPE failed!Aborted”。 这是什么意思呢。点D4 D3 D2 D1,goodlink闪一下,
唉,郁闷死了,什么才能结束.
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-09-25 16:51
你用的测试程序也应当是ZLG的,而且要对应起来.据我所知,ZLG的驱
动好象和他的测试程序是对应的.

[编辑 -  9/25/04 by  metalwing]
新手上路,请多关照.
lhaih
驱动小牛
驱动小牛
  • 注册日期2004-04-28
  • 最后登录2007-10-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-09-25 16:26
那怎么办,我用的驱动是周立功给的,有一次偶发的贴子,曾经问到周立功给的驱动我能不能直接用,回答说是可以,而且很好用。不知道里面怎么写的,而且我也没有做过驱动,难道非要自己写吗?
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-09-25 09:00
让HOST主动给你发IN令牌是在驱动或应用程序里做的,固件里没有.
新手上路,请多关照.
上一页
游客

返回顶部