阅读:3153回复:32
D12急问:为什么进不去IN中断。急急,(给分)
我向端点2IN缓冲区,写10个数,为什么进不去IN中断。
unsigned char ExBuf[10]={'1','2','3','4','5','6','7','8','9','0'}; D12_WriteEndpoint(5,10,ExBuf); 在此语句之后,是点亮一个指示灯,灯亮。可以确定,上语句确实执行了。 究竟为什么不进入IN中断呢,是不是主机没有把数取走,为什么呢?急急急! |
|
沙发#
发布于:2004-09-22 19:59
buff里的数据要等HOST发送IN令牌,才会取走.取走后,才产生中断.
这些是在你的设备驱动或应用程序里干的事. |
|
|
板凳#
发布于:2004-09-23 08:29
buff里的数据要等HOST发送IN令牌,才会取走.取走后,才产生中断. 如何判断HOST发送了IN令牌呢?是不是中断寄存器的值会变化?HOST不发送IN令牌怎么办? 批量传输IN令牌是命令块包吗?是发送到端点索引4缓冲区中吗? |
|
地板#
发布于:2004-09-23 08:39
如何判断HOST是否发了IN令牌,老实说我也不太清楚.我只是通过USB
控制芯片端点BUFF内的数据取没取走来判断是否发了IN令牌.而取走 的话,相应的端点中断就会产生.如果HOST不发送IN令牌,那你的数据 就一直发不走,相应的中断也就一直不会产生.BULK的IN令牌与中断的 差不多,但发送到那是跟你的配置有关的.不过,如果你有USB分析仪的 话,我想应该能够很好的看到HOST有没有发IN令牌. |
|
|
地下室#
发布于:2004-09-23 08:53
我现在就是进不去中断,主机不是隔一段时间就发送in令牌得吗,所以它应该是发送了in的,只是数没有取走,所以进不去中断。
怎么会这样呢?数也是应该写入了缓冲区的呀,郁闷死了! |
|
5楼#
发布于:2004-09-23 08:56
我用的设备的驱动是周立功给的,应该没有什么问题
|
|
6楼#
发布于:2004-09-23 09:23
给你一个建议,你做的不是串口吗,先把串口调通,然后把单片机收到的数据通过串口发送到主机,问题不就一目了然了吗。
|
|
7楼#
发布于:2004-09-23 10:13
串口已经调通了,收发均没有问题,枚举时设备发送的描述符和主机发送的命令都能用串口调试工具中看到。
我刚才用了一下usb分析仪,这个东西连上以后,设备上电后,枚举都没法子进行了,不知道是不是我的机子配置太差 的原因,因为它对机子的要求,偶满足不了。 |
|
8楼#
发布于:2004-09-23 16:13
我原来装的是周立功给 dp-51h实验装置上D12的驱动,不知道是不是适合我的板子?
现在想换一个驱动试试,应该怎么办?一连上设备,主机就能识别出设备,认出是philips PDIUSBD12 SMART Evaluation Board,卸载了也没用。 |
|
9楼#
发布于:2004-09-23 16:24
我的QQ:59996522 可以交流一下吗
|
|
10楼#
发布于:2004-09-23 19:49
------------------------------------
BULK的IN令牌与中断的 差不多,但发送到那是跟你的配置有关的. ------------------------------------------ to metalwing: 我不太明白,IN令牌还分中断的还是批量的吗?难道不是,看到谁的缓冲区有数就去走谁吗,跟那里配置有关呀? |
|
11楼#
发布于:2004-09-24 09:03
IN令牌包包含了PID,ADDR,ENDP,CRC几个字段,也就是说每个IN令牌指
定了不同的设备(ADDR),端点(ENDP).如果你仅收到IN令牌,而没有收 到相应端点的IN令牌的话,数据也是发不出去的. 对于你将数据写入端点BUFF,然后你还要主动让HOST发送IN令牌,不然 好象发不出去.我试过,将数据写入后,不管他,结果他也不管你.我的 结论是:HOST只保证在指定时间内给你的中断端点响应,而不是每个时 间间隔给你响应.因为我没有USB分析仪,所以以上只是猜测.但你最好 在你写入端点BUFF数据后,主动让HOST给你发送个IN令牌. |
|
|
12楼#
发布于:2004-09-24 18:03
我只是做它的固件,在固件里做应该怎样做,才能主动让HOST给你发送个IN令牌,这是对应的ADDR,ENDP,CRC应该是多少?我往端点2里写,这时的endp应该是5了。
|
|
13楼#
发布于:2004-09-25 00:12
是不是你的主机驱动里没有激活配置,而使用的是默认配置(仅端口0可见),从而主机看不见你的端点2,也就不会向端点2发送IN令牌了
|
|
|
14楼#
发布于:2004-09-25 09:00
让HOST主动给你发IN令牌是在驱动或应用程序里做的,固件里没有.
|
|
|
15楼#
发布于:2004-09-25 16:26
那怎么办,我用的驱动是周立功给的,有一次偶发的贴子,曾经问到周立功给的驱动我能不能直接用,回答说是可以,而且很好用。不知道里面怎么写的,而且我也没有做过驱动,难道非要自己写吗?
|
|
16楼#
发布于:2004-09-25 16:51
你用的测试程序也应当是ZLG的,而且要对应起来.据我所知,ZLG的驱
动好象和他的测试程序是对应的. [编辑 - 9/25/04 by metalwing] |
|
|
17楼#
发布于:2004-09-25 23:30
真是焦头烂额了,一个星期都没有进展,他的驱动和测试程序是不是仅仅是针对他做的板子,我的板子,用不了他的D12test测试程序了。
按下Start 提示,“Requesting data transfer on PIPE failed!Aborted”。 这是什么意思呢。点D4 D3 D2 D1,goodlink闪一下, 唉,郁闷死了,什么才能结束. |
|
18楼#
发布于:2004-09-29 00:30
兄弟,别急!
有些问题要从根上解决。 usb是主从通信方式,且是一对多的。 所以,usb host 与 slave并不存在真正的中断方式,只有查询方式。所谓的中断方式只是总线驱动(由操作系统提供)帮你查询后再通知你的驱动和应用。 任何通信都得有一个发起方。对于Bulk方式,发起方只能是应用程序。也就是说,应用程序调用你的驱动,你的驱动调用总线驱动,token IN才会发出。否则怎么说Bulk传数比较节约带宽呢?因为它平时根本不工作。 另外一个就是驱动中读处理。标准驱动(或者说简化版)不提供超时处理,当要求读16字节时,如果固件只给10个字节,它会一直死在那里,如果加了超时,则可以返回错误代码,但这些完全由Driver作者指定。所以,如果driver不是你写的,或者你无法与作者沟通,那你会比较麻烦的。 |
|
|
19楼#
发布于:2004-09-29 09:46
他的驱动和测试程序是不是仅仅是针对他做的板子,我的板子,用不了他的D12test测试程序了。
是的,但也不是说你用不了.只要你的固件跟着他的固件走就可以了. 也就是说,你的设备的接口,使用端点及类型,设备描述符==要和他的 一样就可以了. |
|
|
上一页
下一页