fbscici 发表于 2009-8-15 16:58:26

AVR配置EP1C3遇到的问题请教

AVR配置EP1C3遇到一个问题,在CPU发送一组数据(2048个字节)的过程中,nSTATUS会等于0,但过一段时间后(18ms左右),nSTATUS会变回0,那这样算不算配置失败,需要重新配置呢?
我每向FPGA发送一个配置数据后都马上检测nSTATUS的,需要先延时再检测吗?
现在CONF_DONE不等于1.

如果说向FPGA发送一个配置数据后都需要马上检测nSTATUS,那在中途出现nSTATUS=0,是什么原因引起的呢?
请高手指导指导!

fbscici 发表于 2009-8-15 17:13:19

还有要请教个问题,编译软件生成的SOF文件是不是要去头的呢?文件的开头有一些信息,要写入FPGA吗?

fbscici 发表于 2009-8-15 17:18:10

for(i=0;i<FPGA_Data_Count;i++)
      {
            
         
/*
按下列步骤操作I/O口线,即可完成对FPGA的配置:

1. nCONFIG="0"、DCLK="0",保持2μS以上。

2. 检测nSTATUS,如果为"0",表明FPGA已响应配置要求,可开始进行配置。否则报错。正常情况下,nCONFIG="0"后1μS内nSTATUS将为"0"。

3. nCONFIG="1",并等待5μS。

4. Data0上放置数据(LSB first),DCLK="1",延时。

5. DCLK="0",并检测nSTATUS,若为"0",则报错并重新开始。

6. 准备下一位数据,并重复执行步骤4、5,直到所有数据送出为止。

7. 此时Conf_done应变成"1",表明FPGA的配置已完成。如果所有数据送出后,Conf_done不为"1",必须重新配置(从步骤1开始)。

8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。

*/         
            
            for(j=0;j<8;j++)
            {                                                      
                DCLK_0;//DATA0 pin at each rising edge of DCLK.
                if(Con_Data&0x1)//从低位开始
                  FPGA_D0_1;
                else
                  FPGA_D0_0;            
                DCLK_1;               
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");               
                Con_Data>>=1;//从低位开始
               
               
            }
                     
            asm("WDR");//喂狗
            j=0;
            while(1)
            {
                if((PINB&0x40)==0)//nSTATUS=0 FPGA需要重新配置。
                {                                                      
                  j++;
                  if(j>100)
                  {
                        ACK_Master(CONFIGURE_FPGA,'&',0,&Con_Data);//应答主控失败
                        return;
                  }                  
                }
                else//nSTATUS=1
                  break;
               
            }
            
      }
      ACK_Master(CONFIGURE_FPGA,'!',0,&Con_Data);//应答主控OK
                           
      
    }while(1);

   
    if(Rec_Con_Data_Flag)
    {
      for(i=0;i<100;i++)
      {
            asm("nop");            
            DCLK_1;            
            asm("nop");
            DCLK_0;         
      }
      
      if(PINB&0x20)//Conf_done应变成"1",表明FPGA的配置已完成。
      {
            for(i=0;i<100;i++)//8. 配置完成后,再送出10个周期的DCLK,以使FPGA完成初始化。
            {            
                asm("nop");            
                DCLK_1;            
                asm("nop");
                DCLK_0;                                 
            }
            //Configure_flag=1;
            asm("WDR");   
            ACK_Master(CONFIGURE_FPGA,'!',0,&Con_Data);
            return;
            
      }
    }

这是我的程序

qdvenus 发表于 2009-8-29 16:39:07

AS也能这样做?PS的方式我做过

ffbiao 发表于 2009-9-15 09:02:30

要去头信息
页: [1]
查看完整版本: AVR配置EP1C3遇到的问题请教