choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
阅读:1298回复:4

auto模式下碰到的一个问题!

楼主#
更多 发布于:2007-05-14 15:37
  我用auto in模式传输数据到PC,按说td_poll()函数应该不用做什么工作,该是一个空函数,手册也是这么说的,可现在我碰到的情况是如果为空则读数据失败,我在td_poll中添加如下代码:    
if(EP6CS&&0x04)
    {
        SYNCDELAY; //
        EP6BCH = 0x02;
        SYNCDELAY; //
        EP6BCL = 0x00;
    }
就成功了,很奇怪,请高人指点,估计应该是其他某个地方没设置对,当我又找不到那错了?
SEIZE THE DAYS!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-15 09:36
你的端点设置的不是auto模式
就这么简单
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-15 15:04
下面是我的firmware中的几个关键参数的设置,仔细检查过没错阿,怎么会不是auto in呢:
IFCONFIG = 0xCB;//确保了IFCFG1:0 = 11;
EP6CFG = 0xE0;
EP6FIFOCFG = 0x0C;//确保EP6FIFOCFG.3 = 1;
EP6AUTOINLENH = 0x02;
SYNCDELAY;
 EP6AUTOINLENL = 0x00;
 SYNCDELAY;
SEIZE THE DAYS!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-15 15:36
  // Registers which require a synchronization delay, see section 15.14
  // FIFORESET        FIFOPINPOLAR
  // INPKTEND         OUTPKTEND
  // EPxBCH:L         REVCTL
  // GPIFTCB3         GPIFTCB2
  // GPIFTCB1         GPIFTCB0
  // EPxFIFOPFH:L     EPxAUTOINLENH:L
  // EPxFIFOCFG       EPxGPIFFLGSEL
  // PINFLAGSxx       EPxFIFOIRQ
  // EPxFIFOIE        GPIFIRQ
  // GPIFIE           GPIFADRH:L
  // UDMACRCH:L       EPxGPIFTRIG
  // GPIFTRIG

上述寄存器设置需要加延时
设置完端点reset一下
把没用的端点关掉。比如4,和8
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-15 16:35
您说的我都作了,我上面只是为了描述重点就剩了些代码,详细如下:
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD0) ;//bmCLKSPD1->bmCLKSPD0 CPU clock from 48MHz to 24MHz

   // set the slave FIFO interface to 48MHz
   //IFCONFIG |= 0x40;
   IFCONFIG = 0xCB;//can be changed to 0xDB for test;

   SYNCDELAY;
   REVCTL = 0x03;
   SYNCDELAY;
   EP2CFG = 0xA0;
   SYNCDELAY;
   EP6CFG = 0xE0;
   SYNCDELAY;
   EP4CFG = 0x20;
   SYNCDELAY;
   EP8CFG = 0x60;
  
   SYNCDELAY;
   PINFLAGSAB = 0x00;
   SYNCDELAY;
   PINFLAGSCD = 0x00;

   PORTACFG = 0x00;//need further confirm,now IFCFG[1:0] = 11;
   SYNCDELAY;
   FIFOPINPOLAR = 0x00;
   SYNCDELAY;

   EP6AUTOINLENH = 0x02;
   SYNCDELAY;
   EP6AUTOINLENL = 0x00;
   SYNCDELAY;

   FIFORESET = 0x80;
   SYNCDELAY;
   FIFORESET = 0x02;
   SYNCDELAY;
   FIFORESET = 0x04;
   SYNCDELAY;
   FIFORESET = 0x06;
   SYNCDELAY;
   FIFORESET = 0x08;
   SYNCDELAY;
   FIFORESET = 0x00;

   SYNCDELAY;
   EP2FIFOCFG = 0x00;
   SYNCDELAY;
   EP6FIFOCFG = 0x0C;

   SYNCDELAY;
   INPKTEND = 0x86;
   SYNCDELAY;
   INPKTEND = 0x86;
   SYNCDELAY;
   INPKTEND = 0x86;
   SYNCDELAY;
   INPKTEND = 0x86;
   SYNCDELAY;
   OUTPKTEND = 0x82;
   SYNCDELAY;
   OUTPKTEND = 0x82;
   SYNCDELAY;
   OUTPKTEND = 0x82;
   SYNCDELAY;
   OUTPKTEND = 0x82;
SEIZE THE DAYS!
游客

返回顶部