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
1楼-- · 2019-03-24 12:48
看看map上的地址分配信息,或许会找到原因。
YXQWXN
2楼-- · 2019-03-24 17:56
< :TI_MSP430_内容页_SA7 -->
hjf2002 发表于 2014-5-9 10:42
看看map上的地址分配信息,或许会找到原因。

什么意思,我看了TI的手册关于这个5509a的,datasheet上写着CE0空间地址是从0x40000开始的,我的SDRAM是用的正好是CE0,这个应该是没有错误的。
hjf2002
3楼-- · 2019-03-24 18:23
 精彩回答 2  元偷偷看……
YXQWXN
4楼-- · 2019-03-24 21:52
hjf2002 发表于 2014-5-11 15:47
会不会变量的地址位置的问题。

应该不会吧,这个是预编译的,不再主函数的内部!
YXQWXN
5楼-- · 2019-03-24 22:48

这个蛋疼的问题在今天终于给完成了。主要问题是这个样子的。
地址是从0x40000到0x41000,总共放的数据是4096个,而我只定义了1000个,明显是放不下的,因此导致的了错误。
另外这个问题纠正以后出现了一个新的问题,就是这三个定义不能放在主函数里面,我仿真了好几次都是有错误的,后来我将这三个定义的前面加了一个static(主要是那个数组),将它们定义为静态的,居然来没有问题了。我想了想觉得无论是定义静态的还是动态的都不应该错,后来我做了很多次的实验,我猜想是因为仿真的缘故,如果直接下载到芯片里面进行运行的话动态和静态都应该是没有问题的。如果路过有知道的话望指导一二。

一周热门 更多>

相关问题

    相关文章