您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 561-SDRAM遍历问题
本帖共有296个阅读者
发表帖子 发表投票 回复主题
561-SDRAM遍历问题
小壹(论坛新手)
小壹
头衔:社区公民
帮派:无帮无派
帖数:10
金钱:191
积分:15
注册时间:2017/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
561-SDRAM遍历问题
问题描述:我在对561外围SDRAM做遍历的时候,发现如果用16位的数据填充,如5555, AAAA填充SDRAM,遍历不会出错。用55555555, AAAAAAAA去做遍历,偶数位就会出错;(我用的SDRAM是两个16位,64M拼接的)

硬件描述:
DSP芯片:BF561
SDRAM:两个16位64M,拼接成的32位128M;
IDE:Visual DSP++5.0
程序代码:
32位遍历代码:
void speed_w_test(void)
{
long i,cont;
volatile unsigned int *DDRdata;
DDRdata=0;
for(i=0;i<0x8000000;i++)
{
if(i%2)
{
*DDRdata=0xaaaaaaaa;
DDRdata++;
}
else
{
*DDRdata=0x55555555;
DDRdata++;
}
}
}

void speed_r_test(void)
{
long i,cont,temp1;
volatile unsigned int *DDRdata;
DDRdata=0;
for(i=0;i<0x8000000;i++)
{
if(i%2)
{
temp1=*DDRdata;
DDRdata++;
if(temp1 !=0xaaaaaaaa)
printf("error! i is %x,temp1 is %x\n",i,temp1);
}
else
{
temp1=*DDRdata;
DDRdata++;
if(temp1 !=0x55555555)
printf("error! i is %x,temp1 is %x\n",i,temp1);
}
}
}


16位遍历代码:
void speed_w_test2(void)
{
long i,cont;
volatile unsigned short *DDRdata;
DDRdata=0;
for(i=0;i<0x8000000;i++)
{
if(i%2)
{
*DDRdata=0xaaaa;
DDRdata++;
}
else
{
*DDRdata=0x5555;
DDRdata++;
}
}
}

void speed_r_test2(void)
{
long i,cont,temp1;
volatile unsigned short *DDRdata;
DDRdata=0;
for(i=0;i<0x8000000;i++)
{
if(i%2)
{
temp1=*DDRdata;
DDRdata++;
if(temp1 !=0xaaaa)
printf("error! i is %x,temp1 is %x\n",i,temp1);
}
else
{
temp1=*DDRdata;
DDRdata++;
if(temp1 !=0x5555)
printf("error! i is %x,temp1 is %x\n",i,temp1);
}
}
}


初始化SDRAM:
void InitSDRAM(void)
{

if (*pEBIU_SDSTAT & SDRS)
{
*pEBIU_SDBCTL = 0x13131313; /*SDRAM Memory Bank Control Register*/
ssync();
*pEBIU_SDRRC =  0x000003a9; /*SDRAM Refresh Rate Control Register*/
ssync();
*pEBIU_SDGCTL = 0x0091998f; /*SDRAM Memory Global Control Register*/
ssync();
}

}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0; // <--|Write access time = 7 cycles, read access time = 11 cycles, no ARDY
*pEBIU_AMBCTL1 = 0x7bb07bb0; //    |Hold time = 2 cycles, setup time = 3 cycles, transition time = 4 cycles
*pEBIU_AMGCTL = 0x01FF; //   |Enable all memory banks
}//end Init_EBIU


561xml文件更改部分:
<register-reset-definitions>
<register name="EBIU_SDRRC" reset-value="0x03a9" core="Common" />
<register name="EBIU_SDBCTL" reset-value="0x13131313" core="Common" />
<register name="EBIU_SDGCTL" reset-value="0x0091998f" core="Common" />
</register-reset-definitions>

时钟配置:内核400M;系统时钟SCLK 120M;(将内核时钟降到50M时候问题依旧)



上传的图片
  20185111612103.jpg [ 34.27 KB 560×282 ] (缩略时请点击查看原图)

 


上传的图片
  20185111612703.jpg [ 31.42 KB 459×208 ] (缩略时请点击查看原图)

 


共同成长
等级:论坛新手 参考IP地址:*.*.*.*
2018/5/11 16:12:27
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你写满数据,然后把0地址数据改为0,执行校验,如果只报错0地址, 说明地址线问题,如果还有其他地址报错,说明地址线短接或者虚焊


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/5/11 17:08:00
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你打开memory窗口,单步写入32位数据,看偶数位是不是整体变化,可能你地址线的问题

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/5/11 17:11:03
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154265 Call, 1 Queries, Processed in 0.031250 second(s),