谢谢版主,降频我还没有试,今天试了一下在RAM里运行对SDRAM读写操作的程序,主要功能是向SDRAM的一段地址写入一些给定的数据,然后再读取出来进行比较。下面是主要实现代码: for(i = 0;i < PRO_LENGTH;i++) { sdw = i + 1;
} while(j < 32) {
for(i = 0;i < PRO_LENGTH;i++) { addr = 50*j+i+5000; IOWR(SDRAM_BASE,addr,sdw); } IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0xFF); for(i = 0;i < PRO_LENGTH;i++) { addr = 50*j+i+5000; sdr = IORD(SDRAM_BASE,addr); } IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x00); for(i = 0;i < PRO_LENGTH;i++) { if(sdr != sdw) { alt_printf("i=%x\n",i); alt_printf("j=%x\n",j); alt_printf("sdr=%x\n",sdr); alt_printf("sdw=%x\n\n",sdw); counter++; } }
j++;
} 结果发现,当写入的SDRAM地址addr为0x1400时,执行写入函数IOWR(SDRAM_BASE,addr,sdw)时,程序就会复位,然后从头开始运行,后来经试验,发现只要在测试循环中写入的是256的倍数处的地址(即0x100、0x200、0x300...),都会发生上面的现象,但是要是在这段循环之前(即while(j < 32)语句之前)直接写入256这个地址,又能正常执行,真是奇怪啊。 |