DSP5509A EMIF_SDRAM中调试出现的问题

2019-03-24 11:30发布

本帖最后由 YXQWXN 于 2014-5-1 17:47 编辑

最近学习EMIF_SDRAM,虽然已经成功,但是其中出现的问题是在是令我难以理解和解释,希望各位同僚能够抛砖引玉。
1.PNG
现在是全局定义。
错误的原因就是三个定义的位置,datacount是将0到1000个数字写入到SDRAM的一个变量,databuffer数组是用来接受从SDRAM中读取的数据的,剩下的两个,一个是SDRAM的首地址,一个是尾地址。
一、现在是正确的情况,运行之后,error=0,标志位i=1;

2.PNG
二、当把定义位置1、2调换以后
3.PNG

运行之后就不能正确的读取SDRAM中的数据了error=3(说明有三次读取的数据有错误),i=2

4.PNG
三、因为这三个的定义我只是在主函数中使用,所以我便将这三个定义转移到了main函数中,作为局部定义使用,同样也会出现和二一样的错误。


求解啊!!!

下面是我的程序:
# include "csl.h"
# include "csl_pll.h"
# include "csl_emif.h"
# include "csl_chip.h"
# include "stdio.h"
# include "csl_gpio.h"


unsigned int datacount=0;
int databuffer[1000]={0};
int *souraddr,*deminaddr;




PLL_Config PLL_SETTING={
        0,
        1,
        6,
        0
};


EMIF_Config EMIF_SETTING={
                  0x221,
                  0xFFFF,


                  0x3FFF,
                  0xFFFF,
                  0x00FF,


                  0x3FFF,
                  0xFFFF,
                  0x00FF,


                  0x1FFF,
                  0xFFFF,
                  0x00FF,


                  0x1FFF,
                  0xFFFF,
                  0x00FF,


                  0x2911,
                  0x0410,
                  0x07FF,
                  0x0131
};


void main ()
{


        unsigned int error=0;
        int i=0;


        CSL_init ();
        CHIP_RSET (XBSR,0X0A01);
        PLL_config (&PLL_SETTING);
        EMIF_config (&EMIF_SETTING);


        souraddr=(int*)0x40000;
        deminaddr=(int *)0x41000;
        while (souraddr<deminaddr)
        {
                *souraddr++=datacount;
                datacount++;
        }


        souraddr=(int *)0x40000;
        datacount=0;
        while (souraddr<deminaddr)
        {
                databuffer[datacount++]=*souraddr++;
                if (databuffer[datacount-1]!=(datacount-1))
                {
                        error++;
                }
        }
        if (error==0)
        {
                GPIO_RSET(IODIR,0XFF);
                GPIO_RSET(IODATA,0X80);
                i=1;
        }
        else
        {
                GPIO_RSET(IODIR,0XFF);
                GPIO_RSET(IODATA,0X00);
                i=2;
        }
        while (1);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
hjf2002
2019-03-24 12:48
看看map上的地址分配信息,或许会找到原因。

一周热门 更多>

相关问题

    相关文章