helloxieyu
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2011-05-25
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度83点
  • 原创分0分
  • 专家分0分
阅读:3012回复:4

cypress例子bulkloop改进版,请大侠们指教!

楼主#
更多 发布于:2007-08-23 18:48
===========================================================================
功能:EP2out写入2048字节数据,用“AUTOPOINTER”复制到
      EP6,再重EP6读出。
现象:只有第一和第三个512字节的数据是正确的,第二和第四个
      512字节的数据是错误的。
请大侠们指正啊!            
===========================================================================

以下代码跟上述图片的代码是一样的,图片有彩色,是为了让大侠们看着更方便!
void TD_Init(void)             // Called once at startup
{
   // set the CPU clock to 48MHz
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;

   // set the slave FIFO interface to 48MHz
  IFCONFIG |= 0x40;

  EP1OUTCFG = 0xA0;
  EP1INCFG = 0xA0;
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA0;     //512*4
  SYNCDELAY;                    
  EP6CFG = 0xE0;  //512*4
  SYNCDELAY;                    

  // enable dual autopointer feature
  AUTOPTRSETUP |= 0x01;

  Rwuen = TRUE;                 // Enable remote-wakeup
}

void TD_Poll(void)              // Called repeatedly while the device is idle
{
  WORD i;
  WORD count;

  if(!(EP2468STAT & bmEP2EMPTY))
  { // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
     if(!(EP2468STAT & bmEP6FULL))
     {  // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
        APTR1H = MSB( &EP2FIFOBUF ); //取高8位  //old name,new name is AUTOPTR1H
        APTR1L = LSB( &EP2FIFOBUF ); //取低8位
            
        AUTOPTRH2 = MSB( &EP6FIFOBUF );  //Autopointer 2 Address HIGH
        AUTOPTRL2 = LSB( &EP6FIFOBUF );

        count = (EP2BCH << 8) + EP2BCL;  //妈的,即使EP2写入一个数count也会=2048
 
      // loop EP2OUT buffer data to EP6IN
//        for( i = 0x0000; i < count; i++ )
         for( i = 0x0000; i < 2048; i++ )
        {
           // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
           EXTAUTODAT2 = EXTAUTODAT1;
        }
//        EP6BCH = EP2BCH;  
//        SYNCDELAY;  
//        EP6BCL = EP2BCL;        // arm EP6IN
//        SYNCDELAY;                    
//        EP2BCL = 0x80;          // re(arm) EP2OUT
     }
  }
 EP6BCH =0x02;  //好像只能是0x0200,其他都有问题
 SYNCDELAY;  
 EP6BCL = 0x00;        // arm EP6IN
 SYNCDELAY;    
}
helloxieyu
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2011-05-25
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度83点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-24 11:22
感觉这个例子很重要啊,能解决很多问题,是新手的必经之路啊!
请成功调试过bulkloop例子的大侠出来讲两句啊!!
helloxieyu
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2011-05-25
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度83点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-25 10:06
============================================================================
怎么还没大侠出来解救啊?我问问题都是搜索过以前的帖子才问的,以前也有人问过类似的问题,但是解答得不够具体而一了了之,望大侠们能再次出手相救,把问题解决得彻底一点。
还有,PDF上明明说EP6BCH 和EP2BCH 能设为1024大小的,可是我设EP6BCH =0x04;就会出错,
非的设EP6BCH =0x02; 才行,为什么??
那位大侠能详细的解释一下EP2BCH,EP2BCL,EP6BCH,EP6BCL,在out或in的情况下的用法及含义啊?
helloxieyu
驱动牛犊
驱动牛犊
  • 注册日期2005-04-10
  • 最后登录2011-05-25
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度83点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-27 10:07
还没人回贴,我每天来报到一次,我顶......
fudeli
驱动牛犊
驱动牛犊
  • 注册日期2006-01-06
  • 最后登录2010-04-01
  • 粉丝0
  • 关注0
  • 积分312分
  • 威望53点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-03 09:05
dsar.a51对EP的定义修改过没有?
游客

返回顶部