您好! 现在,我们使用的芯片是ST公司的STM32F439IG,在使用过程中,发现有下面的问题,烦请各位工程师帮我分析,如何去解决。 具体的图纸和源代码请见附件。
程序使用到的硬件资源包括芯片内部的SRAM(起始地址:0x20000000)、外扩WINBOND公司的SDRAM(型号:W9825G6JH,容量:,4M words*4 banks*16bits,起始地址:0xc0000000)、NE2片选外部SRAM设备(起始地址:0x64000000)、芯片自带的液晶屏控制器(驱动3.5寸的320*240的16位色的LCD)。
程序MAIN函数的执行过程是:先初始化SDRAM、FMC、内部LCD控制器的硬件管脚和时序,然后往SDRAM送固定的数据。存放到SDRAM的固定数据是图像的8位黑白亮度信号。接着,循环从SDRAM中取数据,每次读取一个字节,并把它转换为16位的LCD数据,并送LCD上去显示。在LCD上一直循环显示SDRAM中存放的固定数据。这样操作没有问题。如果把这16位的LCD数据,同时送到NE2片选,LCD上就会显示横道的干扰条纹。干扰条纹的位置在变化,SDRAM中的数据是固定的,是不应该出现一些随机的干扰条纹的。 为此,在程序中做了个测试,2次读取SDRAM中的数据,如果把这16位的LCD数据,送到LCD、NE2片选,就会发生2次读到的SDRAM同一地址的数据不相同。如果16位的LCD数据只送LCD,不送NE2片选,2次读到的SDRAM同一地址的数据相同。 部分程序的代码见下: j=addro[i+320*m]; //第一次从SDRAM读数 k=addro[i+320*m]; //第二次从SDRAM读数 if (j!=k) { j=k; //如果没有LCD的话,可以在此设置断点,观察程序执行情况 } 上面就是我说的问题,麻烦各位工程师帮我分析问题,解决问题。 非常感谢!
|