warzzard
驱动牛犊
驱动牛犊
  • 注册日期2007-06-12
  • 最后登录2009-07-16
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1863回复:3

请教关于68013 Asynchronous Slave FIFO IN 的问题

楼主#
更多 发布于:2007-09-29 05:09
各位,

我现在用68013 (56管脚)单芯片,想实现从外围设备异步读入16bits数据。目前我想通过将SLWR置高或置低来实现异步读入。SLWR由外围设备给出。

我已经按照技术手册写了firmware,但是无法通过控制SLWR来读入,目前的情况是可以用control panel 读入数据,但是一旦将SLWR拉低,PC就无法识别USB。

我想问是否可以单用68013实现异步读入?如果可以,firmware需要注意什么?

谢谢。

wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-09-29 12:37
可以的,前提是你得设置 slave fifo mode
mcu_boy
warzzard
驱动牛犊
驱动牛犊
  • 注册日期2007-06-12
  • 最后登录2009-07-16
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-30 01:53
Hi, wjt810907,
谢谢你的回答。
我付上我的firmware初始化的部分,其中已经按照技术手册将其置成了slave FIFO AUTO IN 模式了。但不知为什么还是SLWR一旦接低,PC就不能识别USB

void TD_Init(void)             // Called once at startup
{
  // set the CPU clock to 48MHz
  SYNCDELAY;
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
  //CPUCS = 0x10;
  SYNCDELAY;
  REVCTL = 0x03;
  IFCONFIG = 0xCB;   // slave FIFO AUTO IN
  SYNCDELAY;

  EP2CFG = 0xA0;     // EP2OUT, bulk, size 512, 4x buffered
  SYNCDELAY;                        
  EP4CFG = 0x00;     // EP4 not valid
  SYNCDELAY;              
  EP6CFG = 0xE0;     // EP6IN, bulk, size 512, 4x buffered    
  SYNCDELAY;
  EP8CFG = 0x00;     // EP8 not valid
  SYNCDELAY;
  
  SYNCDELAY;
  PINFLAGSAB = 0x00;
  SYNCDELAY;
  PINFLAGSCD = 0x00;
  SYNCDELAY;

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

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

  SYNCDELAY;
  EP2FIFOCFG = 0x11; // EP2 is AUTOUT=1,AUTOIN=0,ZEROLEN=0,WORDWIDE=1,auto out mode, disable PKTEND zero length send, word ops
  SYNCDELAY;
  EP6FIFOCFG = 0x09; // EP6 is AUTOOUT=0,AUTOIN=1,ZEROLEN=1,WORDWIDE=1, auto in mode, disable PKTEND zero length send, word ops
  SYNCDELAY;

  SYNCDELAY;
  INPKTEND = 0x86;
  SYNCDELAY;
  INPKTEND = 0x86;
  SYNCDELAY;
  INPKTEND = 0x86;
  SYNCDELAY;
  INPKTEND = 0x86;
  SYNCDELAY;
  OUTPKTEND = 0x82;
  SYNCDELAY;
  OUTPKTEND = 0x82;
  SYNCDELAY;
  OUTPKTEND = 0x82;
  SYNCDELAY;
  OUTPKTEND = 0x82;

  FIFORESET = 0x80;  // set NAKALL bit to NAK all transfers from host
  SYNCDELAY;
  FIFORESET = 0x02;  // reset EP2 FIFO
  SYNCDELAY;
  FIFORESET = 0x06;  // reset EP6 FIFO
  SYNCDELAY;
  FIFORESET = 0x00;  // clear NAKALL bit to resume normal operation
  SYNCDELAY;

}



也请各位给个建议,谢谢。
warzzard
驱动牛犊
驱动牛犊
  • 注册日期2007-06-12
  • 最后登录2009-07-16
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-02 00:36
结贴了。

改用了GPIF模式slave-FIFO AUTO IN. 现在读入数据和外围设备写信号同步。可以设置GPIF波形,使得每次只读入一个,并可以达到很高的速度。因为没有使用8051的single read, 而是slave-FIFO(这是达到高速并不丢速据的关键)。现在取样频率到2MHz (16bits)没有任何问题。
游客

返回顶部