liugmx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1770回复:12

请教一个怪问题(about an2131QC)

楼主#
更多 发布于:2002-08-07 15:22
我把cypress公司提供的例子bulktest的firmware的ISR_Ep1out修改如下:
void ISR_Ep1out(void) interrupt 0
{int count=10;
 for (i=0; i < count; i++)  //write data to the IN endpoint
   {
      IN1BUF【i】 = i;
   }
 IN1BC = count;      // Arm the IN endpoint

 OUT1BC = 0;   // Arm the OUT to receive the next packet
  
 EZUSB_IRQ_CLEAR();   // clear the IRQ
 OUT07IRQ = bmEP1;
}

    在开发板上调试时发现,当我先用control panel通过BULK OUT1传输数据时如果传输的字节数小于10(即IN1BC),再用BULK IN1读数据时就会产生read fail。
    谢谢!


[编辑 -  8/7/02 by  liugmx]
study
驱动牛犊
驱动牛犊
  • 注册日期2001-05-14
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-07 16:03
你向管道里送了10个子节。(实际没有送,只是计数),可是主机读的时候你设置成小于10。一定会出错,可以设大雨、等于10。
学无止境
ts_hayes
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2002-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-07 18:11
我把cypress公司提供的例子bulktest的firmware的ISR_Ep1out修改如下:
void ISR_Ep1out(void) interrupt 0
{int count=10;
   // Loop the data to the IN endpoint
   for (i=0; i < count; i++)
   {
      IN1BUF = i;
   }

   // Arm the IN endpoint
   IN1BC = i;

   // Arm the OUT so it can receive the next packet
   OUT1BC = 0;

   // clear the IRQ
EZUSB_IRQ_CLEAR();
OUT07IRQ = bmEP1;
}

    在开发板上调试时发现,当我先用control panel通过BULK OUT1传输数据时如果传输的字节数小于10(即IN1BC),再用BULK IN1读数据时就会产生read fail。
    谢谢!


奇怪      IN1BUF = i;的括号怎么会没了呢?
liugmx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-07 18:21
应该是有括号的,不知道怎么搞的帖子上显示没了
我重新家了个中文的中括号。
谢谢!
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-07 18:27
control panel上bulk in请求的字节长度是多少?

[编辑 -  8/7/02 by  sunkai]
ts_hayes
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2002-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-07 18:30
bulk in的时候请求的长度是不起作用的
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-07 18:33
请求不该有个字节长度?
ts_hayes
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2002-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-07 18:47
是啊,那个长度和内容是给bulk out时提供的
IN token里面又没有长度字段
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-07 19:22
的确有的,也就是同一个textbox,in token没有长度如何读得回数据来.
liugmx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-07 22:09
感谢sunkai大侠!
我确实是没有设BULK IN的长度,我一直都以为那个长度没有用,而且以前也没出现什么问题。
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-08 03:50
感谢sunkai大侠!
我确实是没有设BULK IN的长度,我一直都以为那个长度没有用,而且以前也没出现什么问题。
 

客气了.好像有个默认值是64B.
ts_hayes
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2002-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-08 10:27
的确有的,也就是同一个textbox,in token没有长度如何读得回数据来.

又用开发器作了一下实验,果然如此
但是IN token 确实不包含长度字段啊
我想大概是control-panel自己要求吧

FORMAT OF A TOKEN PACKET:
     8bits PID:containing Type&Check fields
     7bits ADDR
     4bits ENDPOINT:containing a direction bit
     5bits CRC
liuxf66
驱动中牛
驱动中牛
  • 注册日期2001-08-15
  • 最后登录2003-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-11 15:56
你帖的程序和你遇到的问题确实比较奇怪,就好象你执行OUT字节的次数小于10时,你的程序没有运行到下面这一行似的
IN1BC = count; // Arm the IN endpoint
因为只要运行到这一行,在control panel执行IN操作时,都应该能读回数据的.(当然,你读取的字节数必须小于或等于10,否则会出现pending,然后是read fail)
liuxf66
游客

返回顶部