两片 MT48LC32M16的SDRAM 操作读写问题 ?
两片 MT48LC32M16的SDRAM 操作读写问题 ??? 描述如下:#define SDRAM_BASE_ADDR ((uint32_t)0xC0000000) // CS0
1、按照 32位的读写,完全正常,
{ // sdram 读写,按照32位进行测试, 使用指针进行操作 ok
uint32_t*ptrSdramAddr;
ptrSdramAddr = (uint32_t *)SDRAM_BASE_ADDR; // 吧地址转换为指针
printf("\r\nSDRAM 测试 开始 ...");
for(ii=0;ii<0x2000000;ii++)// 128MByte 1024*1024*32*4/1024/4
{
*ptrSdramAddr= ( __IO uint32_t )(SDRAM_BASE_ADDR + (ii * 4));
ptrSdramAddr ++; // 每加一次表示是4个字节的地址数目
}
ptrSdramAddr = (uint32_t *)SDRAM_BASE_ADDR; // 吧地址转换为指针
printf("\r\nSDRAM 测试 开始读出数据进行校对 ......");
for(ii=0;ii<0x2000000;ii++)// 128MByte 1024*1024*32*4/1024/4
{
jj= *ptrSdramAddr++;
if(jj != (SDRAM_BASE_ADDR +(ii * 4) ) )
printf("\r\nSDRAM 测试 读循环 出错");
else
{
if(ii >= (0x2000000 - 1))
{
printf("\r\nSDRAM 测试 读循环次数 = 0x%X", ii + 1);
printf("\r\nSDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 4) + 4);
}
}
}
}
2、按照 16位的读写,不正常
{ // sdram 读写,按照16位进行测试, 使用指针进行操作
uint16_t*ptrSdramAddr;
uint32_tdattt;
uint16_tcc=0;
ptrSdramAddr = (uint16_t *)SDRAM_BASE_ADDR; // 吧地址转换为指针
for(ii=0;ii<0x4000000;ii++)// 128MByte 1024*1024*32*4/1024/4
{
*ptrSdramAddr= cc;
ptrSdramAddr ++; // 每加一次表示是2个字节的地址数目
cc ++;
}
printf("\r\nSDRAM 测试 开始读出数据进行校对 ......");
ptrSdramAddr = (uint16_t *)SDRAM_BASE_ADDR; // 吧地址转换为指针
cc = 0;
for(ii=0;ii<0x4000000;ii++)// 128MByte 1024*1024*32*4/1024/4
{
dattt= *ptrSdramAddr;
ptrSdramAddr ++;
if(dattt != cc )
printf("\r\nSDRAM 测试 读循环 出错");
else
{
if(ii >= (0x4000000 - 1))
{
printf("\r\nSDRAM 测试 读循环次数 = 0x%X", ii + 1);
printf("\r\nSDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 2) + 2);
}
}
cc ++;
}
}
有谁知道这是为何吗 ????
:):):):):):):) SDRAM_BASE_ADDR转换为十六位的地址是0x0000,这样SRAM是找不到他的实际地址的。 安 发表于 2016-10-24 14:40
SDRAM_BASE_ADDR转换为十六位的地址是0x0000,这样SRAM是找不到他的实际地址的。
你好,那有什么好方法可以解决一下啊 ??
或者是不能够按照 16位来进行操作 ?
可以考虑用一个十六位的指针加实际地址,SRAM我也用的比较少。 :lol:lol:lol:lol:lol :(:(:(:(:(:(:(:(:(:(:(:( 关注。。。。。 :L:L:L:L:L:L:L 地址依然使用32位进行定义看看,
页:
[1]