我对SDRAM进行遍历,程序如下:
写SDRAM:
void speed_w_test_2(void)
{
int i,cont;
volatile unsigned short* DDRdata;
DDRdata = 0;
for(i = 0; i < SDRAM_END_ADDR; i++)
{
if(i % 2)
{
*DDRdata = 0xaaaa;
DDRdata++;
}
if(!(i % 2))
{
*DDRdata = 0x5555;
DDRdata++;
}
}
}
读SDRAM:
void speed_r_test_2(void)
{
int i,cont,temp1,temp2;
volatile unsigned short* DDRdata;
DDRdata = 0;
for(i = 0;i < SDRAM_END_ADDR; i++)
{
if(i % 2)
{
temp1 = *DDRdata;
if(temp1 != 0xaaaa)
{
temp2 = *DDRdata;
uart_printf("error! Addr is 0x%08x, Data is %x\n",i,temp1);
}
DDRdata++;
}
if(!(i % 2 ))
{
temp1 = *DDRdata;
if(temp1 != 0x5555)
{
temp2 = *DDRdata;
uart_printf("error! Addr is 0x%08x, Data is %x\n",i,temp1);
}
DDRdata++;
}
}
}
我专门在读SDRAM中的uart_printf一行设了断点查看出错的地址(每次出错地址不同)发现,对同一地址读数据,temp1读回的值不对,但temp2读回的值是对的。但是用VDSP的内存查看器看到的数据又是对的。请问一下这是为什么呢?