Slacker, I'm not using a data cache (I'm using Nios II/e) so I don't need to use uncached memory.
I tried using IORD/WR instructions and the result is the same:
#include <io.h># include <stdio.h># include "system.h"
int main()
{
long i,j,k;
long test,last;
long values;
long times;
for(i=0;i<32;i++)
{
values=0;
times=0;
}
for(i=0;i<10;i++)
printf("Hello From Nios\n\n");
// sdram=0x00000000;
IOWR_32DIRECT(SDRAM_BASE, 3578, 0x00000000);
last=0;
i=0;
j=0;
while(1)
{
//test=sdram;
test=IORD_32DIRECT(SDRAM_BASE, 3578);
if(test!=last)
{
times=i;
values=test;
last=test;
j++;
}
if (test==0xffffffff)
{
for(k=0;k<32;k++)
printf("\nTime:%8ld us Value: %8x",times,values);
break;
}
usleep(i);
i+=1; //INCREMENT x us
}
return 0;
}
...I noticed that using a delay increment of 1us at a time (see line "i+=1; //INCREMENT x us") , the problem appears earlier than when I use an increment of 100us:
1us output:
Time: 175 us Value: 8
Time: 180 us Value: 400008
Time: 184 us Value: 40000c
Time: 187 us Value: c0000c
Time: 189 us Value: c4000c
Time: 190 us Value: 40c4000c
Time: 191 us Value: 44c4200c
Time: 194 us Value: 44d4202c
Time: 195 us Value: 44d4203c
Time: 196 us Value: 44f5203c
Time: 199 us Value: 54f7203c
Time: 202 us Value: 54f7223c
Time: 203 us Value: 74f7223c
Time: 204 us Value: 7cf7223c
Time: 205 us Value: 7cf72a7c
Time: 206 us Value: 7cf7aa7d
Time: 209 us Value: 7cf7ea7d
Time: 210 us Value: 7df7ea7d
Time: 215 us Value: 7df7ee7d
Time: 219 us Value: fdf7ee7d
Time: 228 us Value: fdf7eefd
Time: 242 us Value: fdf7eeff
Time: 253 us Value: fdf7efff
Time: 254 us Value: fdffffff
Time: 255 us Value: ffffffff
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
100us output: Time: 2500 us Value: 8
Time: 2600 us Value: 40000c
Time: 2700 us Value: 44f4203c
Time: 2800 us Value: 7cf7227d
Time: 2900 us Value: 7df7ea7d
Time: 3000 us Value: fdf7ee7d
Time: 3100 us Value: fdf7eefd
Time: 3300 us Value: fdf7efff
Time: 3400 us Value: ffffffff
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
Time: 0 us Value: 0
It doesn't seem an overwriting problem. Another thing: I'm running the program on onchip memory, since if I set the reset address at the beginning of the SDRAM, I can't get debug to the first line of the code.