
两片 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_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("\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 ++; } } 有谁知道这是为何吗 ???? |
评分
查看全部评分
你好,那有什么好方法可以解决一下啊 ??
或者是不能够按照 16位来进行操作 ?