gdutchen
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2181回复:3

请使用68013的slave fifo方式的大侠帮个忙

楼主#
更多 发布于:2004-09-28 09:55
  CPUCS = 0x12;       // CLKSPD[1:0]=10, for 48MHz operation
                    // 01 for 30MHz,00 for 12MHz,11 reserved
                         // CLKOE=0, don't drive CLKOUT

  IFCONFIG = 0x03;            //IFCFG[1:0]=11 for Slave FIFO
 
  SYNCDELAY;                    // see TRM section 15.14
  REVCTL = 0x03;                // use enhanced packet
  
  // EP2 512 BULK OUT 4x
  SYNCDELAY;                    //
  EP2CFG = 0xA0;            // BUF[1:0]=00 for 4x buffering;
  
  // EP6 512 BULK IN 4x
  SYNCDELAY;                    //
  EP6CFG = 0xE0;            // BUF[1:0]=00 for 4x buffering;
  
  // EP4 and EP8 are not used in this implementation...
  SYNCDELAY;                    //
  EP4CFG = 0x20;                // clear valid bit
  SYNCDELAY;                    //
  EP8CFG = 0x60;                // clear valid bit

  SYNCDELAY;                    //
  FIFORESET = 0x80;  // activate NAK-ALL to avoid race conditions
  SYNCDELAY;                    //
  FIFORESET = 0x02;             // reset, FIFO 2
  SYNCDELAY;                    //
  FIFORESET = 0x04;             // reset, FIFO 4
  SYNCDELAY;                    //
  FIFORESET = 0x06;             // reset, FIFO 6
  SYNCDELAY;                    //
  FIFORESET = 0x08;             // reset, FIFO 8
  SYNCDELAY;                    //
  FIFORESET = 0x00;             // deactivate NAK-ALL

  // 8-bit bus (WORDWIDE=0)...

  // use manual out mode...
  SYNCDELAY;                    //
  EP2FIFOCFG = 0x00;         // OEP1=0,AUTOOUT=0, WORDWIDE=0
  
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;             // arm first buffer
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;             // arm second buffer
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;             // arm third buffer
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;             // arm fourth buffer

  // use auto in mode
  SYNCDELAY;                    //
  EP6FIFOCFG = 0x4C; // INFM1=1,AUTOIN=0, ZEROLENIN=0, WORDWIDE=0

  //set program flag
  PINFLAGSAB = 0x8C;           // see p341 of TRM,FLAGB is EP2EF,FLAGA is EP2FF
  SYNCDELAY;
  PINFLAGSCD = 0xAE;           // see p341 of TRM,FLAGD is EP6EF,FLAGC is EP6FF
  SYNCDELAY;
  PORTACFG = 0x80;             // use PA7/FLAGD as a fifo flag

  AUTOPTRSETUP |= 0x07;
  EPIRQ = 0xFF;               //clear all interrupt bit

这是我的程序,当EP2FIFOCFG的autoout=1时,为什么不能向68013写数据。如果还有其它的问题,也请指教。EP2FF标志1是full,0是not full是吗?请帮忙指出。谢谢!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-28 14:23
这是我的程序,当EP2FIFOCFG的autoout=1时,为什么不能向68013写数据。如果还有其它的问题,也请指教。EP2FF标志1是full,0是not full是吗?请帮忙指出。谢谢!

我没看你的程序,因为那些寄存器定义已经忘记了,只是说说我的建议
1,当autoout=1时,主机和外部设备直接连接,68013的8051失效,此时外部设备是master,也就是说读写时序要有外部设备产生,你不能向68013写数据是不可能的,原则上说你至少可以写两个512的数据进去,然后就写不下去了,你可以验证一下是不是这样

如果是这样,并且你的68013工作正常,那么只有一个可能,你的外部设备没有读走数据,可能的原因是时序不匹配或者读信号或者片选信号没有!

2,如果你没有专门的设定相关寄存器,所有的标志默认的都是低有效的,所以应该是0是full,1是not full!

个人见解,欢迎批评指正
gdutchen
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-08 17:31
谢谢!我上周就已经解决了,忘记来论坛灌水了,谢谢大侠呀。
995324
驱动牛犊
驱动牛犊
  • 注册日期2006-07-10
  • 最后登录2007-12-05
  • 粉丝0
  • 关注0
  • 积分120分
  • 威望13点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-19 18:18
需要根据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
游客

返回顶部