AVR配置EP1C3遇到的问题请教
AVR配置EP1C3遇到一个问题,在CPU发送一组数据(2048个字节)的过程中,nSTATUS会等于0,但过一段时间后(18ms左右),nSTATUS会变回0,那这样算不算配置失败,需要重新配置呢?我每向FPGA发送一个配置数据后都马上检测nSTATUS的,需要先延时再检测吗?
现在CONF_DONE不等于1.
如果说向FPGA发送一个配置数据后都需要马上检测nSTATUS,那在中途出现nSTATUS=0,是什么原因引起的呢?
请高手指导指导! 还有要请教个问题,编译软件生成的SOF文件是不是要去头的呢?文件的开头有一些信息,要写入FPGA吗? 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;
}
}
这是我的程序 AS也能这样做?PS的方式我做过 要去头信息
页:
[1]