junjieye
驱动牛犊
驱动牛犊
  • 注册日期2005-11-05
  • 最后登录2007-12-30
  • 粉丝0
  • 关注0
  • 积分224分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:2175回复:6

关于68013的slave fifo的auto in&out问题。

楼主#
更多 发布于:2007-03-29 23:36
  请问各位大虾!FX2在autoout时,主机out是直接放在fifo中,如果不取出,主机的此次out是否成功?
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-03-30 08:12
算成功
mcu_boy
junjieye
驱动牛犊
驱动牛犊
  • 注册日期2005-11-05
  • 最后登录2007-12-30
  • 粉丝0
  • 关注0
  • 积分224分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-30 14:11
那麻烦请看一下下面的初始化程序,主要是做海量存储类的slave fifo。
void TD_Init(void)             // Called once at startup
{
  // set the CPU clock to 48MHz
  CPUCS = 0x30;
  SYNCDELAY;
    
  EP2CFG = 0xA2;     // EP2OUT, bulk, size 512, 2x buffered
  SYNCDELAY;                        
  EP4CFG = 0x00;     // EP4 not valid
  SYNCDELAY;              
  EP6CFG = 0xE2;     // EP6IN, bulk, size 512, 2x buffered    
  SYNCDELAY;
  EP8CFG = 0x00;     // EP8 not valid
  SYNCDELAY;
                
  REVCTL = 0x03;
  SYNCDELAY;
  
  IFCONFIG = 0x43; //外部有 150/4 MHz的脉冲    
  SYNCDELAY;

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

  EP2FIFOCFG = 0x00; // allow core to see zero to one transition of auto out bit
  SYNCDELAY;      
  EP2FIFOCFG = 0x70; // EP2 is AUTOOUT=1, AUTOIN=0, ZEROLEN=0, WORDWIDE=0
  SYNCDELAY;
  EP4FIFOCFG = 0x00; // EP4 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0
  SYNCDELAY;    
  EP6FIFOCFG = 0x68; // EP6 is AUTOOUT=0, AUTOIN=1, ZEROLEN=1, WORDWIDE=0
  SYNCDELAY;
  EP8FIFOCFG = 0x00; // EP8 is AUTOOUT=0, AUTOIN=0, ZEROLEN=0, WORDWIDE=0
  SYNCDELAY;  
              
  OUTPKTEND = 0x02;  // Arm both EP2 buffers to ¡°prime the pump¡±
  SYNCDELAY;        
  OUTPKTEND = 0x02; //也是过了0x80的情况。
  SYNCDELAY;            
              
  EP6AUTOINLENH = 0x00;  // set AUTOIN commit length to 64 bytes
  SYNCDELAY;                  
  EP6AUTOINLENL = 0x40;
  SYNCDELAY;

  PORTACFG = 0x40;    
  SYNCDELAY;
  PINFLAGSAB = 0xc8; //flaga = ep2ef,flagb = ep2ff;
  SYNCDELAY;            
  PINFLAGSAB = 0x88; //重点做调试观察用;
  SYNCDELAY;
  FIFOPINPOLAR = 0x00;
  SYNCDELAY;

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

  Rwuen = TRUE;                 // Enable remote-wakeup
}
现在的现象:
1.是bulk端点2有时不能收OUT数据(在Bus Hound中观察);
2.是FLAGA,FLAGC复位后高过一段时间就低了,即使看到有数据OUT了。
是不是有什么地方忽略了,烦请提示提示。
谢谢!
junjieye
驱动牛犊
驱动牛犊
  • 注册日期2005-11-05
  • 最后登录2007-12-30
  • 粉丝0
  • 关注0
  • 积分224分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-30 19:52
自己顶一下!!!
junjieye
驱动牛犊
驱动牛犊
  • 注册日期2005-11-05
  • 最后登录2007-12-30
  • 粉丝0
  • 关注0
  • 积分224分
  • 威望26点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-01 12:19
怎么没有人看看啊!
请老手指教一下!
tkcat
驱动牛犊
驱动牛犊
  • 注册日期2003-07-21
  • 最后登录2007-06-29
  • 粉丝0
  • 关注0
  • 积分124分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-29 13:03
要先设置成AUTOOUT=0
然后OUTPKTEND=0x8x skip=1 N次 ,释放所有的USB缓冲区给USB控制器准备接受out数据
最后设置AUTOOUT=1
995324
驱动牛犊
驱动牛犊
  • 注册日期2006-07-10
  • 最后登录2007-12-05
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-07-19 18:28
Cypress的手册上对于AUTOOUT=1的初始化代码是有问题的,请参照Cypress提供的Example,你会发现这样的Note:

需要根据Cypress提供的流程来处理,否则会出现问题的。
  //  (2)...when REVCTL.1=1, core blocks auto arming of OUT endp's
  //      ...see above EPxBCL/OUTPKTEND sequence(s)
  //      ...sequence is as follows:
  //      ...(a) REVCTL.1=1
  //      ...(b) FIFORESET (as above)
  //      ...(c) EPxBCL/OUTPKTEND (as above)
  //      ...(d) AUTOOUT=1
游客

返回顶部