xiaozhu912
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2005-08-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1697回复:6

如何清空TX Buffer

楼主#
更多 发布于:2005-04-02 18:48
遇到了一个困惑的问题:
我用的是ISP1581,利用端点1作IN 批量传输,
最大包为512字节。
首先没向端点1写数据,利用BusHound读取512字节的数据,
竟然能读取512字节数据,应该没数据阿,这些数据是很随机的。我以为是端点初始化时没清空。
D14_Cntrl_Reg.D14_ENDPT_INDEX=0x03(端点1)
D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB=0x00;
D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB=0x00;
利用上述语句放在初始化程序中,(我个人认为可以清空Tx Buffer)可结果还是一样,没写数据能读上述据.

这是怎么回事,ISP1581的Tx Buffer该如何清空啊。
Data Sheet上说可以利用buffer length register 可以清空啊
应该是我理解的不个深刻,那该如何清空呢?????
谢谢各位
xiaozhu912
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2005-08-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-04 21:32
解决了一小部分问题,依然寻求如何清空TX buffer

自己顶顶
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-05 16:56
tx buffer没法清空,理论上说复位后设备端点是空的,如果你发现能读到数据说明你得固件程序有问题,肯定作了什么处理。
可以通过复位端点来清空端点中的数据,我曾尝试过,不过好像效果不理想,你可以尝试一下
xiaozhu912
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2005-08-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-05 20:07
(1)  端点复位是不是就是重新初始化端点啊,就是给ISP1581的RESET一个复位电平(软件复位)。

(2)如果在端点里写了512字节数据,那么就不要再手动使端点生效,因为这时端点已经自动生效了,如果再手动生效那就会在发送一个空包过去,这是为什么阿???

(3)现在我是每读到一个数据就向端点写数据,当数据写到满包时
,而此时应用程序没读数据,那再次写进去的数据应该会冲掉部分数据还是全部数据呢?????那如果我想要这个数据包,是不是等这个数据包读取后,然后再向相应的端点继续写数据,即响应主机的ACK后再写数据。

(4)我还想问一下每次读写数据是在中断服务程序呢还是其他地方
现在我做这样一个试验:从串口发出数据,然后从USB读出
程序如下:
1。中断服务程序
//串口服务程序
void Comm_ISr(void) interrupt 4 using 1
{
   if(RI)
     {
        DataTemp=SBUF;//DataTemp为全局变量
        RI=0;
        Flag_IN=1;//用来作写的标记
     }
}
//主程序
     if(Flag_IN)  //Flag_IN首先为零
     {
       D14_Cntrl_Reg.D14_ENDPT_INDEX=0x03;
       D14_Cntrl_Reg,D14_DATA_PORT_LSB=DataTemp;
      }

我向串口发出了512个字节,然后不发,然后利用BusHound去读端点但没数据上传,试了好几下,最后endpoint Halted。我不知道这是怎么回事啊,如何判断确实端点写进去数据了??????
谢谢你的帮助
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-06 11:37
1, 不是
2,因为端点连续生效了两次啊!第一次是正常数据,第二次不久是空的数据包吗?或者是512个0,你可以测试一下
3,再写就写不进去了,后面的数据都丢掉了,其实你试试就知道了,用不着什么都问别人的。
4,bushound只是监测总线上的数据,他怎么会读你的设备的数据呢?要启动你自己的应用程序才行。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-06 11:38
问问题连分都没有
谁给你回答啊
xiaozhu912
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2005-08-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-06 22:00
不好意思阿,我不知道怎么该分,这次真的很抱谦
游客

返回顶部