最近学习EMIF_SDRAM,虽然已经成功,但是其中出现的问题实在是令人蛋疼!!!!!!!!!!!!!!!!!!
现在是全局定义。
错误的原因就是三个定义的位置,datacount是将0到1000个数字写入到SDRAM的一个变量,databuffer数组是用来接受从SDRAM中读取的数据的,剩下的两个,一个是SDRAM的首地址,一个是尾地址。
一、现在是正确的情况,运行之后,error=0,标志位i=1;
二、当把定义位置1、2调换以后
运行之后就不能正确的读取SDRAM中的数据了error=3(说明有三次读取的数据有错误),i=2
三、因为这三个的定义我只是在主函数中使用,所以我便将这三个定义转移到了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);
}
int databuffer[1000]={0};
int *souraddr,*deminaddr;
建议:
使用databuffer之前,使用循环将其全部清零。
初始化清零,只会作用到第一个数组元素,后续的全是乱码。
一周热门 更多>