两片 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("
SDRAM 测试 开始 ...");
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("
SDRAM 测试 开始读出数据进行校对 ......");
for(ii=0;ii<0x2000000;ii++) // 128MByte 1024*1024*32*4/1024/4
{
jj = *ptrSdramAddr++;
if(jj != (SDRAM_BASE_ADDR + (ii * 4) ) )
printf("
SDRAM 测试 读循环 出错");
else
{
if(ii >= (0x2000000 - 1))
{
printf("
SDRAM 测试 读循环次数 = 0x%X", ii + 1);
printf("
SDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 4) + 4);
}
}
}
}
2、按照 16位的读写,不正常
{ // sdram 读写,按照16位进行测试, 使用指针进行操作
uint16_t *ptrSdramAddr;
uint32_t dattt;
uint16_t cc=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("
SDRAM 测试 开始读出数据进行校对 ......");
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("
SDRAM 测试 读循环 出错");
else
{
if(ii >= (0x4000000 - 1))
{
printf("
SDRAM 测试 读循环次数 = 0x%X", ii + 1);
printf("
SDRAM 测试 读 地址 = 0x%X", SDRAM_BASE_ADDR + (ii * 2) + 2);
}
}
cc ++;
}
}
有谁知道这是为何吗 ????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你的是什么型号的单片机,具体遇到什么问题 ??
STM32F4,我在读写的时候按照你上面给出来的
for(ii=0;ii<0x2000000;ii++) // 128MByte 1024*1024*32*4/1024/4
{
*ptrSdramAddr = ( __IO uint32_t )(SDRAM_BASE_ADDR + (ii * 4));
ptrSdramAddr ++; // 每加一次表示是4个字节的地址数目
}
不能实现读写。
我试了好久发现
for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
{
*(u32*)((Bank6_SDRAM_ADDR>>2)+ uwIndex) = aTxBuffer[uwIndex];
}
for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
{
//printf("uwIndex = %d ",uwIndex);
aRxBuffer[uwIndex]=*(u32*)((Bank6_SDRAM_ADDR>>2) + uwIndex);
}
倒是可以,但是就具体不知道什么原因,能向您请教下吗?
一周热门 更多>