打印

68013a slavefifo模式下i2c的使用

[复制链接]
1310|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
devilzsq|  楼主 | 2015-6-4 16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 devilzsq 于 2015-6-4 22:33 编辑

EP4和EP8分别作为slavefifo下out/in端点,512 8bit 2x autoout/autoin bulk。
没有i2c模块的情况下fpga正常工作,读写数据正常。
fpga加入i2c模块后,EP2和EP6分别为i2c的out/in端点,此时我连接68013a sda/scl与fpga对应的pin后,烧录iic文件时提示"eeprom was not enabled",各位大神能否帮忙分析下原因。
拜谢!void TD_Init( void )                                                            
{                                                                                             
  CPUCS = 0x12;                                                                  
  SYNCDELAY;                                                                                                         
  IFCONFIG = 0xE3;                                                               
  SYNCDELAY;                                                                     

  PINFLAGSAB = 0xD9;                                              
  SYNCDELAY;                                                                     
  PINFLAGSCD = 0xFB;                       
  SYNCDELAY;                                                                     

  EP1OUTCFG = 0xA0;                                                              
  EP1INCFG = 0xA0;                                                               
  SYNCDELAY;                    // see TRM section 15.14                        
  EP2CFG = 0xA2;                                                                 
  SYNCDELAY;                    //                                               
  EP4CFG = 0xA2;                                                                 
  SYNCDELAY;                    //                                               
  EP6CFG = 0xE2;                                                                 
  SYNCDELAY;                    //                                               
  EP8CFG = 0xE2;                                                                 

  SYNCDELAY;                    //                                               
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.      
  SYNCDELAY;                    //                                               
  EP4BCL = 0x80;                                                                 
  SYNCDELAY;                    //                                               
  EP2BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.      
  SYNCDELAY;                    //                                               
  EP4BCL = 0x80;                                                                 

  I2CTL &= 0xFE;       

  FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions     
  SYNCDELAY;                    // see TRM section 15.14                                                                  
  FIFORESET = 0x04;             // reset, FIFO 4                                 
  SYNCDELAY;                    //                                                                                          
  FIFORESET = 0x08;             // reset, FIFO 8                                 
  SYNCDELAY;                    //                                               
  FIFORESET = 0x00;             // deactivate NAK-ALL                           
  SYNCDELAY;                                                                     
                                                                                                                
  EP4FIFOCFG = 0x00;                                                  
  SYNCDELAY;                                                                  
  EP4FIFOCFG = 0x10;            // AUTOOUT=1, WORDWIDE=0                        
  SYNCDELAY;                    //                                               
  EP8FIFOCFG = 0x08;            // AUTOIN=1, ZEROLENIN=0, WORDWIDE=0            
  SYNCDELAY;                                                                     
                                                                                       
  OUTPKTEND = 0x84;                                                              
  SYNCDELAY;                                                                     
  OUTPKTEND = 0x84;                                                              
  SYNCDELAY;                                                                     
  INPKTEND = 0x88;                                                              
  SYNCDELAY;                                                                     
  INPKTEND = 0x88;                                                               
  SYNCDELAY;                                                                           
}               

void TD_Poll( void )                                                                                                              
{                 
  if((!(EP2468STAT & bmEP2EMPTY)) && (!(EP2468STAT & bmEP6FULL)))
  {                                                            
    I2CSeq();                                                                                                                                 
    SYNCDELAY;                    
    EP2BCL = 0x80;                                               
  }                                                            
}

I2CSeq()函数代码略长,详见附件

firmware.zip

2.34 KB

沙发
USB-Emily| | 2015-6-24 14:49 | 只看该作者
你的这一句“EP2和EP6分别为i2c的out/in端点,此时我连接68013a sda/scl与fpga对应的pin后” 不是很明白,如果I2C 是连接在FPGA上的话,而不是I2C EEPROM的话,烧录iic文件时提示"eeprom was not enabled" 是正确的啊。

如果你这里有I2C EEPROM用于存放IIC的firmware 文件,应该不会出现这个问题的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝