yjf7777
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:968回复:4

当PC发IN token 我要怎漾才能给pc data??(20分喔)

楼主#
更多 发布于:2004-01-12 17:33
我是用89c52+pdiusbd12自己做板子的
当收到pc给的setup时:
我的程序是
1.read interrupt register(commond F4h)读出的值为01h
2.select endpoint(commond 00h)读出的值为01h
3.read last transaction status register(commond 40h)读出的值为21h
4.read buffer(commond F0h),有读出host送的setup data
可是接下莱的事我就不知道要怎漾才能把pc要的IN data给pc
请帮我看哪里错了
5.acknowledge setup(commond F1h)
6.clear buffer(commond F2h)
7.收到interrupt read interrupt register(commond F4h)读出的值为02h
8.select endpoint(commond 01h)读出的值为00h
9.read lasdt transaction status register(commond 41h)读出的值为92h
10.select ednpoint(commond 01h)
11.write buffer(commond F0h)将我要给pc的值写入
12.validata buffer(commond FAh)
之後应该pc发IN token之後就可以收到才对啊??
可是我发现pc仍是一直只收到nak....到底要怎漾他才能收到我给它的data呢??
如能解答困惑感激不尽.....

[编辑 -  1/12/04 by  yjf7777]
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-13 08:15
用户被禁言,该主题自动屏蔽!
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-13 08:39
如果你没有使用DMA,那么你写入Buffer数据应该遵循:


选择端点

等待端点空

写入“数据长度”(1个字节)
写入“0”(1个字节)

写入你的数据(“数据长度”个字节)

端点有效


这是D12要求的格式。
好好学习,天天向上,做一个乖宝宝。
yjf7777
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-13 10:05
选择端点时因为我是控制型的IN,所以在d12里面的endpoint index
yjf7777
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-14 10:28
ok了.....
原莱acknowledge setup(F1h)要set endpoint(01h)之後才能冻作
我以为在之前收到setup 时(endpoint 00H)就要下acknowledge了
结果造成後面的validate buffer不能冻....
游客

返回顶部