用AVR配置XC2S100不成功的原因
我用AVR M64对XC2S100使用从串模式配置,但DONE一直为0,想不明白原因,M64的晶振频率是16MHz还有个想不明白的问题,不管数据是从高位开始还是低位开始或者乱发数据,INIT始终=1,但是PROGRAM=0的时候,INIT也=0,
PROGRAM=1的时候,INIT也=1.
按照数据手册上说,FPGA CRC校验错,INIT会=0,但是除了一开始PROGRAM=0,INIT也=0的时候,之后的INIT都是=1
void FPGA_Configure(void)
{
WORD i;
BYTE Configure_flag=0,Rec_Con_Data_Flag=0;
BYTE Con_Data;
BYTE FPGA_Data_Count=0xff;
BYTE j;
D0_1;//DIN=1
for(i=0;i<10;i++)
{
PROGRAM_0;//PROGRAM=0
delay_us(10);
PROGRAM_1;
delay_us(10);
if(PIND&0x1)//检测INIT//FPGA_INT=1 检测INIT信号,如果为“1”,表明FPGA的Memory检测完毕,,可开始进行配置。
{ //当INIT在4us内未置高,FPGA需要重新配置。
Configure_flag=1;
break;
}
}
ACK_Master(CONFIGURE_FPGA,'!',1,&Configure_flag);
if(!Configure_flag)//配置失败
{
FPGA_Configure_Flag=FALSE;
return;
}
do
{
CleanRam(100,&Con_Data);
if(Recv_FPGA_Data(&FPGA_Data_Count,&Con_Data)==FALSE)//接收FPGA数据的个数+具体数据
{
FPGA_Configure_Flag=FALSE;
ACK_Master(CONFIGURE_FPGA,'?',0,&Con_Data);//应答主控接收数据失败
return;
}
if(FPGA_Data_Count==0)//数据接收完成
{
Rec_Con_Data_Flag=TRUE;
break;
}
for(i=0;i<FPGA_Data_Count;i++)
{
for(j=0;j<8;j++)
{
CLK_0;//
//延时(45ns以上)。
if(Con_Data&0x80)//从高位开始
D0_1;
else
D0_0;
Con_Data<<=1;//从高位开始
CLK_0;
CLK_1;
//CLK_1;
asm("nop");
asm("nop");
}
if((PIND&0x1)==0)//若INIT=‘0’,FPGA需要重新配置。
{
FPGA_Configure_Flag=FALSE;
ACK_Master(CONFIGURE_FPGA,'&',0,&Con_Data);//应答主控失败
return;
}
}
ACK_Master(CONFIGURE_FPGA,'!',0,&Con_Data);//应答主控OK
asm("WDR");//喂狗
}while(1);
if(Rec_Con_Data_Flag)
{
//delay_nms(100);
for(i=0;i<100;i++)
{
CLK_0;
//asm("nop");
//asm("nop");
CLK_1;
//asm("nop");
//asm("nop");
if((PIND&0x1)==0)//若INIT=‘0’,FPGA需要重新配置。
{
Configure_flag=0;
ACK_Master(CONFIGURE_FPGA,'*',0,&Con_Data);
return;
}
if(PIND&0x20) //继续送出时钟信号,并等待DONE置高
{
Configure_flag=1;
ACK_Master(CONFIGURE_FPGA,'!',0,&Con_Data);
return;
}
asm("WDR");
}
}
ACK_Master(CONFIGURE_FPGA,'#',0,&Con_Data);
}
MO,M1,M2分别串4.7K电阻到3.3V,PROGRAM,INIT,DONE也分别串4.7K电阻到3.3V
因为FPGA的程序不是我编写的,所以不知道FPGA程序本身是否还要注意什么问题。因为我是第一次对FPGA进行配置,所以还请高手们多多指教!谢谢! 电阻阻值不一定全是4.7K的,具体要查一下手册 PROGRAM,INIT,DONE的上拉该是没关系的。
MO,M1,M2分别串4.7K电阻到3.3V--这似乎是主串模式。。。 主串是M0,M1都是0
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_454016.jpg
(原文件名:2S100.jpg) 找到问题的原因了,原来是程序开了SPI功能,刚好CLK又与SPI的SCK共用,所以整个配置过程时钟信号都是不受控制的
现在关了SPI功能就OK了 {:lol:}{:lol:}{:lol:}
页:
[1]