TI中文支持网
TI专业的中文技术问题搜集分享网站

c6678EMIF模块与FPGA问题连接

我使用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;
}

Shine:

如果FPGA配置成16bit,A23一定要当A0用。

zhangran zhang:

回复 Shine:

我现在硬件连接已经定了,而且单通道测试是没问题的,除了更改A23没别的建议吗,好像不是这个地方的问题,我也是按照STK例程设置的寄存器,现在不知道咋解决这个问题了?求助啊

zhangran zhang:

回复 Shine:

我现在硬件连接已经定了,而且单通道测试是没问题的,除了更改A23没别的建议吗,好像不是这个地方的问题,我也是按照STK例程设置的寄存器,现在不知道咋解决这个问题了?求助啊

Shine:

回复 zhangran zhang:

FPGA不是可编程的吗?为什么不能把A23定义为A0管脚?

zhangran zhang:

回复 Shine:

我现在把地址线改了,按照手册上的要求,现在还是之前的状况,单个地址读写没问题,多个地址一起读写就有问题了!

zhangran zhang:

回复 Shine:

我现在把地址线改了,按照手册上的要求,现在还是之前的状况,单个地址读写没问题,多个地址一起读写就有问题了!比如程序里的39通道独立读没问题,但是加上38通道后,一块读,39通道读的就有问题了,我使用的是6678评估板

Shine:

回复 zhangran zhang:

多个地址读写时,时序是不是正确?

zhangran zhang:

回复 Shine:

FPGA的时序没问题啊,我EMIF读写时间参数设置的是4:5:4,这个设置的读写周期是FPGA时钟4倍左右,也可以啊,而且如果我设置的写的数值每个通道都是一样的,回读不会有问题,但是如果写的通道写的同时刻写的不一样数值,就会有问题!

赞(0)
未经允许不得转载:TI中文支持网 » c6678EMIF模块与FPGA问题连接
分享到: 更多 (0)