ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接


硬件设计原理图

ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)_第1张图片

功能介绍

ADSP-EDU-BF53x 板卡上采用的 SDRAM 型号为 MT48LC16M16A2,容量为 32Mbyte,采用 16Bit 模式连接ADSP-BF53x。通过配置 EBIU 的 SDRAM 控制寄存器对其进行初始化。

代码实现功能

代码实现了对 SDRAM 数据进行写入和读出遍历操作,并将读出的数据与写入的数据做比较,判断内存存储数据是否正常。

测试步骤

1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好。
2. 先给 ADSP-EDU-BF53x 开发板上电,再为仿真器(ICE)上电。
3. 运行 VisualDSP++ 5.0 软件,选择合适的 BF533 的 session 将仿真器与软件连接。
4. 加载 VisualDSP++ 5.0 工程文件 BF53x_SDRAM.dpj,编译并全速运行。

测试结果

如内存出错,在VisualDSP++ 5.0软件上打印出错数据与元数据值,如数据没有出错,完成读写遍历后打“SDRAM test END!”

在这里插入图片描述

ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)_第2张图片

SDRAM 中的测试数据。

程序源码

#include

void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

/****************************************************************************

  • 名称 : speed_w_test
  • 功能 : 测试代码,对DDR内存作测试
  • 入口参数 :无
  • 返回值 :无
    */
    void speed_w_test(void)
    {
    int i,cont;
    volatile unsigned short
    DDRdata;
    DDRdata = 0;
    for(i=0;i<0x1000000;i++)
    {
    if(i%2)
    {
    DDRdata = 0xaaaa;
    DDRdata++;
    }
    if(!(i%2))
    {
    DDRdata = 0x5555;
    DDRdata++;
    }
    }
    }
    /
  • 名称 : speed_r_test
  • 功能 : 测试代码,对DDR内存作测试
  • 入口参数 :无
  • 返回值 :无
    ***************************************************************************/
    void speed_r_test(void)
    {
    int i,cont,temp1;
    volatile unsigned short
    DDRdata;
    DDRdata = 0;
    for(i=0;i<0x1000000;i++)
    {
    if(i%2)
    {
    temp1 = *DDRdata;
    DDRdata++;
    if(temp1 != 0xaaaa)
    printf(“error! i is %x, temp is %x\n”,i,temp1);
    }
    if(!(i%2))
    {
    temp1 = *DDRdata;;
    DDRdata++;
    if(temp1 != 0x5555)
    printf(“error! i is %x, temp is %x\n”,i,temp1);
    }
    }
    }

void main(void)
{
Set_PLL(16,4);
Init_EBIU();
Init_SDRAM();
speed_w_test();
speed_r_test();

printf("SDRAM test END!\n");

}

你可能感兴趣的:(ADI,DSP技术中心,ADI,DSP资料下载,Blackfin专题,ADI,DSP,ADI,DSP中文资料)