资深版主
- 积分
- 10541
- 金钱
- 10541
- 注册时间
- 2017-2-18
- 在线时间
- 1908 小时
|
1金钱
有用户自己修改SDRAM实验例程出错(例程仅支持MCU屏),所以改了这个程序
因为RGB屏本身不带内存,而RGB屏在使用的时候占用SDRAM的1280*800*2个字节的内存空间
所以仅能测试SDRAM芯片中非1280*800*2个字节内存区域(测试程序测试从0XC01F8000开始的30M字节内存区域)
以HAL库版本为例
测试数组testsram[250000]定位到0XC01F8000,因为RGB屏占用从0XC0000000开始的1280*800*2个字节的内存空间
所以测试用的数组占用从0XC01F8000开始的内存空间
[mw_shl_code=c,true]u16 testsram[250000] __attribute__((at(0XC01F8000)));//测试用数组
[/mw_shl_code]
同时fmc_sdram_test()函数中的Bank5_SDRAM_ADDR在sdram.h中修改为0XC01F8000
[mw_shl_code=c,true]#define Bank5_SDRAM_ADDR ((u32)(0XC01F8000)) //SDRAM被测内存的开始地址[/mw_shl_code]
fsmc_sdram_test()函数如下:
[mw_shl_code=c,true]void fmc_sdram_test(u16 x,u16 y)
{
u32 i=0;
u32 temp=0;
u32 sval=0; //在地址0XC01F8000读到的数据
LCD_ShowString(x,y,239,y+16,16,"Ex Memory Test: 0KB");
//每隔16K字节,写入一个数据,总共写入1920个数据
for(i=0;i<30*1024*1024;i+=16*1024)
{
*(vu32*)(Bank5_SDRAM_ADDR+i)=temp;
temp++;
}
//依次读出之前写入的数据,进行校验
for(i=0;i<30*1024*1024;i+=16*1024)
{
temp=*(vu32*)(Bank5_SDRAM_ADDR+i);
if(i==0)sval=temp;
else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.
LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*16,5,16,0); //显示内存容量
printf("SDRAM Capacity:%dKB\r\n",(u16)(temp-sval+1)*16);//打印SDRAM容量
}
}[/mw_shl_code]
|
|