中级会员
 
- 积分
- 256
- 金钱
- 256
- 注册时间
- 2018-8-8
- 在线时间
- 50 小时
|
8金钱
本帖最后由 走投无路的卡卡 于 2019-12-3 21:25 编辑
————————————————————————————————————————————————————————————————————————————————————————————
原子哥的实验使用的是fmc的bank5,基地址是0xC0000000,现在我想尝试用bank6,基地址为0xD0000000,其他功能不变,把相应的地方的代码修改后,程序运行不正常。代码修改后如下:
————————————————————————————————————————————————————————————————————————————————————————————
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "sdram.h"
u16 testsram[25] __attribute__((at(0XD0000000)));
void fsmc_sdram_test()
{
u32 i=0;
u32 temp=0;
u32 sval=0;
for(i=0;i<16*25*1024;i+=16*1024)
{
*(vu32*)(Bank6_SDRAM_ADDR+i)=temp;
temp++;
}
for(i=0;i<16*25*1024;i+=16*1024)
{
temp=*(vu32*)(Bank6_SDRAM_ADDR+i);
if(i==0)sval=temp;
else if(temp<=sval)break;
printf("SDRAM Capacity:%dKB\r\n",(u16)(temp-sval+1)*16);
}
}
int main(void)
{
u8 key;
u8 i=0;
u32 ts=0;
u8 lcd_id[12];
HAL_Init();
Stm32_Clock_Init(360,25,2,8);
delay_init(180);
uart_init(115200);
LED_Init();
KEY_Init();
SDRAM_Init();
for(ts=0;ts<25;ts++)
{
testsram[ts]=ts;
// printf("%d,%d\r\n",testsram[ts],ts);
}
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)
fsmc_sdram_test();
if(key==KEY1_PRES)
{
for(ts=0;ts<25;ts++)
{
// LCD_ShowxNum(30,190,testsram[ts],6,16,0);
printf("%x",(u32 *)&testsram[ts]);
printf("testsram[%d]:%d\r\n",ts,testsram[ts]);
}
}else delay_ms(10);
i++;
if(i==20)
{
i=0;
LED0=!LED0;
}
}
}
———————————————————
sdram.c
sdram中就改了两块地方,如图。
——————————————————————————————————
sdram.h中添加了0xD0000000的基地址宏定义

——————————————————————————————————
运行结果跟原子哥的不一样,数组中读出来的数据都是0xFFFF,内存显示不对,请问大家更换bank还需要改其他哪些地方吗?
|
-
sdram.c修改后
-
sdram.c修改后
|