本人用该板子,改写starterware的程序点亮了一个1920*1200点阵的TFT屏,发现刷屏的速度比较慢,
是数据写入buffer的速度太慢,不是dotclk慢,不知道是否有办法加快刷屏的速度?比如怎样重新设置am3359的主频?
怎样设置DDR3的频率?或者其他办法等等,谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
DDR3的频率设置可以看这里,最高可以到303MHz, http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips.
你刷这么大的屏估计要把CPU都占完了,是有点吃力的
经过研究,发现现在的设置已经是主频720Mhz,DDR3是303Mhz的了,但是还是比较慢,刷一屏数据大概要2.4秒,
而我用三星6410点同样的屏,刷一屏数据大概是1秒,按道3359的速度不可能比6410慢的,另外,一点我觉得比较奇怪的是,
如果使用CacheEnable(CACHE_ALL);,屏幕就一直在闪,好像刷屏速度很快的样子,但是显示是错乱的,所以我,目前只能设置成
CacheEnable(CACHE_ICACHE);才显示正常,不知道为什么会这样?
代码大概如下这样:
U16 *GLCDBF=(U16*)(0x80000000+1024*1024*10);
U16 LUTOffset = 16;
RasterDMAFBConfig(LCDC_INSTANCE,
(unsigned int)GLCDBF,
(unsigned int)GLCDBF + SCREEN_W*SCREEN_H*2 +32 - 2,
0);
RasterDMAFBConfig(LCDC_INSTANCE,
(unsigned int)GLCDBF,
(unsigned int)GLCDBF + SCREEN_W*SCREEN_H*2 +32 - 2,
1);
/* Enable End of frame0/frame1 interrupt */
RasterIntEnable(LCDC_INSTANCE, RASTER_END_OF_FRAME0_INT |
RASTER_END_OF_FRAME1_INT);
/* Enable raster */
RasterEnable(LCDC_INSTANCE);
pTemp=GLCDBF+LUTOffset;
for(i=0;i<SCREEN_H/4;i++)
{
for(j=0;j<SCREEN_W;j++)
{
//*pTemp = COLOR_WHITE;
*pTemp = 0xFFFF;
pTemp++;
}
}
for(i=0;i<SCREEN_H/4;i++)
{
for(j=0;j<SCREEN_W;j++)
{
//*pTemp = COLOR_BLUE;
*pTemp = 0xF800;
pTemp++;
}
}
for(i=0;i<SCREEN_H/4;i++)
{
for(j=0;j<SCREEN_W;j++)
{
//*pTemp = COLOR_GREEN;
*pTemp = 0x07E0;
pTemp++;
}
}
for(i=0;i<SCREEN_H/4;i++)
{
for(j=0;j<SCREEN_W;j++)
{
//*pTemp = COLOR_RED;
*pTemp = 0x001F;
pTemp++;
}
}
CACHE_ALL 再配合CacheDataCleanBuff这个函数使用可以使得显示正常了,但是刷屏的过程中会出现很多色块一样的东西,不知道为什么?是否有CACHE方面的更详细的资料介绍?另外,
RasterDMAFBConfig(LCDC_INSTANCE,
(unsigned int)GLCDBF,
(unsigned int)GLCDBF + SCREEN_W*SCREEN_H*2 +32 - 2,
0);
这个函数当中不知道为什么 SCREEN_W*SCREEN_H*2 +32 - 2这一句需要减2,而不是直接写SCREEN_W*SCREEN_H*2 +32?
CacheDataCleanBuff 就是用来flush cache的, Cache的资料在google下找找吧,这个是个公共的东西,来自ARM,我们这边没有什么特别的资料