微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > C8051F120+CY7C68013A输出数据正常输入数据全是0

C8051F120+CY7C68013A输出数据正常输入数据全是0

时间:10-02 整理:3721RD 点击:
C8051F120+CY7C68013A,遇到的问题是从计算机输出数据到单片机的时候正常,从单片机输出数据到计算机的时候不正常,数据全为0。表现为单片机无法拉高数据总线,但是当把USB的数据总线脚挑起来之后,数据线的信号能改变了。这说明USB芯片这端始终把单片机引脚拉低了。但是在总线中间接个245总线芯片,其他信号不变,之后就能正常使用,IN正常OUT也正常。现在感觉可能出现的问题是:1,USB芯片本身有缺陷,同时买的两片,都有类似问题,其他批次的以前买的也有类似问题,所以这个不太成立;2,配置问题,也就是在初始化的是时候没有配置好,但是问题在哪里没有找到;3,在IN和OUT方向通过A0A1切换时,USB芯片应该自动切换总线方向,所以第二点可能 不会有结果。现在该问题还没解决,请各位大侠帮帮忙看看。
初始化代码如下:
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 = 0xcb;
  REVCTL=0x03;                                        // REVCTL.0 and REVCTL.1 to set to 1
  SYNCDELAY;
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA2;
  SYNCDELAY;                    
  EP4CFG = 0xA0;
  SYNCDELAY;                    
  EP6CFG = 0xE2;
  SYNCDELAY;                    
  EP8CFG = 0xE0;
  SYNCDELAY;
  FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions
  SYNCDELAY;                    // see TRM section 15.14
  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

  SYNCDELAY;
  OUTPKTEND = 0x82;                                // Arm both EP2 buffers to “prime th
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;                                // Arm both EP2 buffers to “prime th
  SYNCDELAY;
  OUTPKTEND = 0x82;                                // Arm both EP2 buffers to “prime th
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;                                // Arm both EP2 buffers to “prime th
  SYNCDELAY;
  // out endpoints do not come up armed
  
  // since the defaults are double buffered we must write dummy byte counts twice
  SYNCDELAY;                    
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP2BCL = 0x80;
  SYNCDELAY;         
    // since the defaults are double buffered we must write dummy byte counts twice
  SYNCDELAY;                    
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP2BCL = 0x80;
  SYNCDELAY;
  EP4BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP4BCL = 0x80;   
  SYNCDELAY;
  //EP6BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.
  SYNCDELAY;                    
// EP6BCL = 0x80;   
  SYNCDELAY;  
  PINFLAGSAB = 0xc8;                                                        //FLAGB->EP2 FF ,FLAGA->EP2 EF。0时是空,1时是非空
  SYNCDELAY;                               
  PINFLAGSCD = 0xEA;                                                //FLAGD->EP6 FF,,\FLAGC->EP6 EF,                                       
  PORTACFG |= 0X80;
  SYNCDELAY;
  PORTACFG |= 0X40;
  EP2FIFOCFG = 0x14;           //AUTOOUT=1, WORDWIDE=0,8bits
  SYNCDELAY;  
  EP2FIFOCFG = 0x14;            //AUTOOUT=1, WORDWIDE=0,8bits
  SYNCDELAY;
  EP4FIFOCFG = 0x04;           //AUTOOUT=0, WORDWIDE=0,8bits
  SYNCDELAY;  
  EP4FIFOCFG = 0x04;            //AUTOOUT=0, WORDWIDE=0,8bits
  SYNCDELAY;
  FIFOPINPOLAR = 0x00;          // all signals active low
  SYNCDELAY;
  EP6FIFOCFG = 0x4C;           //AUTOIN=1, WORDWIDE=0,8bits
  SYNCDELAY;  
  EP6FIFOCFG = 0x4C;            //AUTOIN=1, WORDWIDE=0,8bits
  SYNCDELAY;
  EP8FIFOCFG = 0x04;           //AUTOOUT=0, WORDWIDE=0,8bits
  SYNCDELAY;  
  EP8FIFOCFG = 0x04;            //AUTOOUT=0, WORDWIDE=0,8bits
  SYNCDELAY;
}

USB芯片端口配置有三种状态,一种开漏,一种三态,一种准双向。若果没配置好,就会出现你的描述。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top