已回答假定已回答

BF518处理器 SDRAM读写测试程序从VDSP5.0移植到CCES1.1.0下出现的问题

GJADI 在 2015-9-16 詢問的問題
最後回覆由hpkamen於2015-9-20提供

新手,最近在学习BF518的一个小的核心板,板上有一块SDRAM,型号为MT48LC32M16A2-75 ,想测试一下从SDRAM的读写。仿真器型号为HPUSE-ICE。以下是读写程序:

#include <cdefBF518.h>

#include <ccblkfn.h>

#include <stdio.h>

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;");

}

 

}

//EBIU配置

void Init_EBIU(void)

{

 

*pEBIU_AMBCTL0 = 0x7bb07bb0;

*pEBIU_AMBCTL1 = 0xffc07bb0;

*pEBIU_AMGCTL = 0x000f;    //SRAM配置

}

void Init_SDRAM(void)

{

*pEBIU_SDRRC = 0x0781;

*pEBIU_SDBCTL = 0x0025;

*pEBIU_SDGCTL = 0x0091998d;

ssync(); //SDRAM配置

}

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

* 名称 : speed_w_test_2

* 功能 : 测试代码,对DDR内存作测试

* 入口参数 :无

* 返回值 :无

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

void speed_w_test_2(void)

{

int i;

volatile unsigned short * DDRdata;

DDRdata = 0;

for(i=0;i<0x2000000;i++)

{

if(i%2)

{

*DDRdata = 0xaaaa;

DDRdata++;

}

if(!(i%2))

{

*DDRdata = 0x5555;

DDRdata++;

}

}

 

}

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

* 名称 : speed_r_test_2

* 功能 : 测试代码,对DDR内存作测试

* 入口参数 :无

* 返回值 :无

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

void speed_r_test_2(void)

{

int i,temp1;

int error=0;

volatile unsigned short * DDRdata;

DDRdata = 0;

for(i=0;i<0x2000000;i++)

{

if(i%2)

{

temp1 = *DDRdata;

DDRdata++;

if(temp1 != 0xaaaa)

{

error = 1;

printf("error! i is %x, temp is %x\n",i,temp1);

break;

}

}

if(!(i%2))

{

temp1 = *DDRdata;;

DDRdata++;

if(temp1 != 0x5555)

{

error = 1;

printf("error! i is %x, temp is %x\n",i,temp1);

break;

}

}

}

    if(!error)

    printf("Test Verify that the data is correctly.\n");

    else

        printf("Test Verify that the data is errors.\n");

}

void main(void)

{

 

Set_PLL(16,4);

    Init_EBIU();

    Init_SDRAM();

    printf("init ok");

printf("Start the test, please wait.\n");

    speed_w_test_2();

    speed_r_test_2();

printf("End of the test.\n");

}

该程序在VDSP++5.0下可编译,且最后检测无误。将该程序移植到CCES1.1.0下也可编译通过,但运行时出现如下:

A fatal error or exception has occurred.

  Description:   A data CPLB miss has occurred without a corresponding CPLB entry.

  General Type:  RunTimeError

  Specific Type: DCPLBMissWithoutReplacement

  General Code:  0x8

  Specific Code: 0x320

  Error Value:   0x01000000

  Error PC:      0xffa01d5e

 

没太理解其中的意思,望大家给予解释,或提供修改建议。

結果