我使用C6678EMIF口与FPGA连接时采用EMIF模块的地址线EMIFA[9:0]与FPGA设定的地址线A[9:0]一一连接,未使用手册上的EMIF模块的地址线EMIFA[23],因此dsp程序对EMIF模块访问时需将访问地址右移两位即为EMIFA[9:0]的输出地址,现在遇到如下问题:
(1)在运行DSP程序(见附件)通过设置了一个10kHZ的定时中断不断的触发程序运行,但是程序中对其16个地址连续的写入数值后,再连续的回读进行测试,发现总是有写和读不一致的情况发生,并对发生的次数进行累加(对应通道1~16),结果见图。
(2)程序中对FPGA特定的地址设置了常数,当使用DSP的EMIF对其进行读时,如果不加(1)所述的写后在读的过程,单独对含常数的FPGA地址进行读,上一之后读的没问题,没读的错误发生,加上一之后,问题就出现了(见图通道17~48和读AAAA和5555两通道))
unsigned short test_data=0;
unsigned short error_count_1=0;
unsigned short error_count_2=0;
unsigned short error_count_3=0;
unsigned short error_count_4=0;
unsigned short error_count_5=0;
unsigned short error_count_6=0;
unsigned short error_count_7=0;
unsigned short error_count_8=0;
unsigned short error_count_9=0;
unsigned short error_count_10=0;
unsigned short error_count_11=0;
unsigned short error_count_12=0;
unsigned short error_count_13=0;
unsigned short error_count_14=0;
unsigned short error_count_15=0;
unsigned short error_count_16=0;
unsigned short error_count_17=0;
unsigned short error_count_18=0;
unsigned short error_count_19=0;
unsigned short error_count_20=0;
unsigned short error_count_21=0;
unsigned short error_count_22=0;
unsigned short error_count_23=0;
unsigned short error_count_24=0;
unsigned short error_count_25=0;
unsigned short error_count_26=0;
unsigned short error_count_27=0;
unsigned short error_count_28=0;
unsigned short error_count_29=0;
unsigned short error_count_30=0;
unsigned short error_count_31=0;
unsigned short error_count_32=0;
unsigned short error_count_33=0;
unsigned short error_count_34=0;
unsigned short error_count_35=0;
unsigned short error_count_36=0;
unsigned short error_count_37=0;
unsigned short error_count_38=0;
unsigned short error_count_39=0;
unsigned short error_count_40=0;
unsigned short error_count_41=0;
unsigned short error_count_42=0;
unsigned short error_count_43=0;
unsigned short error_count_44=0;
unsigned short error_count_45=0;
unsigned short error_count_46=0;
unsigned short error_count_47=0;
unsigned short error_count_48=0;
unsigned short error_count_5555=0;
unsigned short error_count_AAAA=0;
void xb_da_voltage_output(void)
{
static unsigned short count=0;
count++;
*ADDR_WR_PORT_TEST_1=count+1;
*ADDR_WR_PORT_TEST_2=count+2;
*ADDR_WR_PORT_TEST_3=count+4;
*ADDR_WR_PORT_TEST_4=count+6;
*ADDR_WR_PORT_TEST_5=count+8;
*ADDR_WR_PORT_TEST_6=count+10;
*ADDR_WR_PORT_TEST_7=count+12;
*ADDR_WR_PORT_TEST_8=count+14;
*ADDR_WR_PORT_TEST_9=count+16;
*ADDR_WR_PORT_TEST_10=count+18;
*ADDR_WR_PORT_TEST_11=count+20;
*ADDR_WR_PORT_TEST_12=count+22;
*ADDR_WR_PORT_TEST_13=count+24;
*ADDR_WR_PORT_TEST_14=count+26;
*ADDR_WR_PORT_TEST_15=count+28;
*ADDR_WR_PORT_TEST_16=count+30;
test_data=*ADDR_RD_PORT_TEST_1; //回读测试地址1
if(test_data!=count+1)
{
error_count_1++;
}
else
{
error_count_1=error_count_1;
}
test_data=*ADDR_RD_PORT_TEST_2; //回读测试地址2
if(test_data!=count+2)
{
error_count_2++;
}
else
{
error_count_2=error_count_2;
}
test_data=*ADDR_RD_PORT_TEST_3; //测试地址3
if(test_data!=count+4)
{
error_count_3++;
}
else
{
error_count_3=error_count_3;
}
test_data=*ADDR_RD_PORT_TEST_4; //回读测试地址4
if(test_data!=count+6)
{
error_count_4++;
}
else
{
error_count_4=error_count_4;
}
test_data=*ADDR_RD_PORT_TEST_5;
if(test_data!=count+8)
{
error_count_5++;
}
else
{
error_count_5=error_count_5;
}
test_data=*ADDR_RD_PORT_TEST_6;
if(test_data!=count+10)
{
error_count_6++;
}
else
{
error_count_6=error_count_6;
}
test_data=*ADDR_RD_PORT_TEST_7;
if(test_data!=count+12)
{
error_count_7++;
}
else
{
error_count_7=error_count_7;
}
test_data=*ADDR_RD_PORT_TEST_8;
if(test_data!=count+14)
{
error_count_8++;
}
else
{
error_count_8=error_count_8;
}
test_data=*ADDR_RD_PORT_TEST_9;
if(test_data!=count+16)
{
error_count_9++;
}
else
{
error_count_9=error_count_9;
}
test_data=*ADDR_RD_PORT_TEST_10;
if(test_data!=count+18)
{
error_count_10++;
}
else
{
error_count_10=error_count_10;
}
test_data=*ADDR_RD_PORT_TEST_11;
if(test_data!=count+20)
{
error_count_11++;
}
else
{
error_count_11=error_count_11;
}
test_data=*ADDR_RD_PORT_TEST_12;
if(test_data!=count+22)
{
error_count_12++;
}
else
{
error_count_12=error_count_12;
}
test_data=*ADDR_RD_PORT_TEST_13;
if(test_data!=count+24)
{
error_count_13++;
}
else
{
error_count_13=error_count_13;
}
test_data=*ADDR_RD_PORT_TEST_14;
if(test_data!=count+26)
{
error_count_14++;
}
else
{
error_count_14=error_count_14;
}
test_data=*ADDR_RD_PORT_TEST_15;
if(test_data!=count+28)
{
//temp_count=count;
//if(count<50000)
//buf[count]=temp_count;
error_count_15++;
}
else
{
error_count_15=error_count_15;
}
test_data=*ADDR_RD_PORT_TEST_16; //回读测试地址16
if(test_data!=count+30)
{
error_count_16++;
}
else
{
error_count_16=error_count_16;
}
test_data=*(ADDR_TEST_5555); //读5555测试
if(test_data!=0x5555)
{
error_count_5555++;
}
else
{
error_count_5555=error_count_5555;
}
test_data=*ADDR_TEST_AAAA; //读AAAA测试
if(test_data!=0xAAAA)
{
error_count_AAAA++;
}
else
{
error_count_AAAA=error_count_AAAA;
}
test_data=*ADDR_RD_PORT_TEST_17; //读AAAA测试
if(test_data!=0XAAAA)
{
error_count_17++;
}
else
{
error_count_17=error_count_17; //读AAAA测试
}
test_data=*ADDR_RD_PORT_TEST_18;
if(test_data!=0XAAAA)
{
error_count_18++;
}
else
{
error_count_18=error_count_18;
}
test_data=*ADDR_RD_PORT_TEST_19; //读AAAA测试
if(test_data!=0XAAAA)
{
error_count_19++;
}
else
{
error_count_19=error_count_19;
}
test_data=*ADDR_RD_PORT_TEST_20;
if(test_data!=0XAAAA)
{
error_count_20++;
}
else
{
error_count_20=error_count_20;
}
test_data=*ADDR_RD_PORT_TEST_21;
if(test_data!=0XAAAA)
{
error_count_21++;
}
else
{
error_count_21=error_count_21;
}
test_data=*ADDR_RD_PORT_TEST_22;
if(test_data!=0XAAAA)
{
error_count_22++;
}
else
{
error_count_22=error_count_22;
}
test_data=*ADDR_RD_PORT_TEST_23;
if(test_data!=0XAAAA)
{
error_count_23++;
}
else
{
error_count_23=error_count_23;
}
test_data=*ADDR_RD_PORT_TEST_24;
if(test_data!=0XAAAA)
{
error_count_24++;
}
else
{
error_count_24=error_count_24;
}
test_data=*ADDR_RD_PORT_TEST_25;
if(test_data!=0XAAAA)
{
error_count_25++;
}
else
{
error_count_25=error_count_25;
}
test_data=*ADDR_RD_PORT_TEST_26;
if(test_data!=0XAAAA)
{
error_count_26++;
}
else
{
error_count_26=error_count_26;
}
test_data=*ADDR_RD_PORT_TEST_27;
if(test_data!=0XAAAA)
{
error_count_27++;
}
else
{
error_count_27=error_count_27;
}
test_data=*ADDR_RD_PORT_TEST_28;
if(test_data!=0XAAAA)
{
error_count_28++;
}
else
{
error_count_28=error_count_28;
}
test_data=*ADDR_RD_PORT_TEST_29;
if(test_data!=0XAAAA)
{
error_count_29++;
}
else
{
error_count_29=error_count_29;
}
test_data=*ADDR_RD_PORT_TEST_30;
if(test_data!=0XAAAA)
{
error_count_30++;
}
else
{
error_count_30=error_count_30;
}
test_data=*ADDR_RD_PORT_TEST_31;
if(test_data!=0XAAAA)
{
error_count_31++;
}
else
{
error_count_31=error_count_31;
}
test_data=*ADDR_RD_PORT_TEST_32;
if(test_data!=0XAAAA)
{
error_count_32++;
}
else
{
error_count_32=error_count_32;
}
test_data=*ADDR_RD_PORT_TEST_33; //开始读5555测试
if(test_data!=0X5555)
{
error_count_33++;
}
else
{
error_count_33=error_count_33;
}
test_data=*ADDR_RD_PORT_TEST_34;
if(test_data!=0X5555)
{
error_count_34++;
}
else
{
error_count_34=error_count_34;
}
test_data=*ADDR_RD_PORT_TEST_35;
if(test_data!=0X5555)
{
error_count_35++;
}
else
{
error_count_35=error_count_35;
}
test_data=*ADDR_RD_PORT_TEST_36;
if(test_data!=0X5555)
{
error_count_36++;
}
else
{
error_count_36=error_count_36;
}
test_data=*ADDR_RD_PORT_TEST_37;
if(test_data!=0X5555)
{
error_count_37++;
}
else
{
error_count_37=error_count_37;
}
test_data=*ADDR_RD_PORT_TEST_38;
if(test_data!=0X5555)
{
error_count_38++;
}
else
{
error_count_38=error_count_38;
}
test_data=*ADDR_RD_PORT_TEST_39;
if(test_data!=0X5555)
{
error_count_39++;
}
else
{
error_count_39=error_count_39;
}
test_data=*ADDR_RD_PORT_TEST_40;
if(test_data!=0X5555)
{
error_count_40++;
}
else
{
error_count_40=error_count_40;
}
test_data=*ADDR_RD_PORT_TEST_41;
if(test_data!=0X5555)
{
error_count_41++;
}
else
{
error_count_41=error_count_41;
}
test_data=*ADDR_RD_PORT_TEST_42;
if(test_data!=0X5555)
{
error_count_42++;
}
else
{
error_count_42=error_count_42;
}
test_data=*ADDR_RD_PORT_TEST_43;
if(test_data!=0X5555)
{
error_count_43++;
}
else
{
error_count_43=error_count_43;
}
test_data=*ADDR_RD_PORT_TEST_44;
if(test_data!=0X5555)
{
error_count_44++;
}
else
{
error_count_44=error_count_44;
}
test_data=*ADDR_RD_PORT_TEST_45;
if(test_data!=0X5555)
{
error_count_45++;
}
else
{
error_count_45=error_count_45;
}
test_data=*ADDR_RD_PORT_TEST_46;
if(test_data!=0X5555)
{
error_count_46++;
}
else
{
error_count_46=error_count_46;
}
test_data=*ADDR_RD_PORT_TEST_47;
if(test_data!=0X5555)
{
error_count_47++;
}
else
{
error_count_47=error_count_47;
}
test_data=*(ADDR_RD_PORT_TEST_48);
if(test_data!=0X5555)
{
error_count_48++;
}
else
{
error_count_48=error_count_48;
}
return;
}