whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1193回复:3

<PDIUSBD12USB固件编程与驱动开发》中一个不明白的地方!

楼主#
更多 发布于:2004-02-26 18:41
看这书中的固件中,看到了这个位置P83页:
void trans_data()
{
 ussigned char len,exp;
 if(controlData.dataBuffer[5]==0x81)
  {
    D12_writeendpoint(5,controldata.databuffer[3],epbuf);
  }
  if(controldata.databuffer[5]==0x80)
 {
   exp=d12_readendpointstatus(4);
  exp&=0x60;
 if(exp==0x60)
   len=d12_readendpoint(4,64,epbuf);
 }
 single_transmit(0,0);
}
大家看看,有一个问题:
我觉得读取端点得操作,应该是在相应端点的中断处理程序中,而不应该是在这个程序里,假如在这里进行读入操作,会不会不会读到数据呢?很有可能在这时pc还没发送数据过来呢!
zhangzhuoliang
驱动牛犊
驱动牛犊
  • 注册日期2003-06-23
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望42点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-27 11:58
你说的没错!在ep0_rx中的第一个if语句中就复职了
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-27 09:47
这样来说应该是这样的了,当setuppacket标志被设置以后,不仅是setup包已经接受到了,而且只要是setup包以后还有数据包也已经收到了,所以在void trans_data()函数里用读出数据命令是可以读出数据的,但是实际上数据已经被读入到了contorl_xfer的databuffer数组里啦,我想应该可以直接拿出来用了,不用再读了吧。而且再读的话,好像缓存区里的数据已经被清除了呀,是不是?
ychnm
驱动牛犊
驱动牛犊
  • 注册日期2004-01-27
  • 最后登录2004-04-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-26 19:24
trans_data( )是处理厂商请求时被调用,见P70页的control_handler( )函数和P83页的read_write_register( ),而在MAINLOOP.C中调用control_handler( )(请参见87页)之前需要判断是否是SETUP包,当然已经收到数据了!


原来是这样,你听我说...
游客

返回顶部