S3C2440 解决LCD图像偏移问题

        我一直以为我的LCD已经移植好了,但是在做frame buffer编程的时候却发现显示的图像不对,一开始我怀疑的是测试程序的问题,但是仔细看了几遍觉得不可能错,因为测试程序很简单,就是让屏幕全白,但是板子上显示的是两块白色区域,中间被一条黑色带隔开了。我猜测可能是LCD没有移植正确。

        我查了很多网上的参数,每个人各有不同,我还看了同学和老师的,也是各有不同。于是我一一试了一遍,结果更糟了,反而没有我一开始设置的参数好。我的屏幕是480*272的,参数是

<span style="font-size:10px;">static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

	.lcdcon5	= S3C2410_LCDCON5_FRM565 |
			  S3C2410_LCDCON5_INVVLINE |
			  S3C2410_LCDCON5_INVVFRAME |
			  S3C2410_LCDCON5_PWREN |
			  S3C2410_LCDCON5_HWSWP,

	.type		= S3C2410_LCDCON1_TFT,

	.width		=480,   //240
	.height		=272,//320   

	.pixclock	= 40000,// 40000, /* HCLK 60 MHz, divisor 10 */
	.xres		= 480 ,  //240
	.yres		= 272 ,  //320   
	.bpp		= 16,
	.left_margin	= 8,//19,//20,
	.right_margin	= 43,//10,//8,
	.hsync_len	= 2,//4,
	.upper_margin	= 4,//8,
	.lower_margin	= 12,//2,//7,
	.vsync_len	= 10,//8,//4,
};</span>

试了几轮之后,我判定应该也不是这里的问题,最后看到这么一句代码:

static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
	.displays	= &smdk2440_lcd_cfg,
	.num_displays	= 1,
	.default_display = 0,

#if 0
	/* currently setup by downloader */
	.gpccon		= 0xaa940659,
	.gpccon_mask	= 0xffffffff,
	.gpcup		= 0x0000ffff,
	.gpcup_mask	= 0xffffffff,
	.gpdcon		= 0xaa84aaa0,
	.gpdcon_mask	= 0xffffffff,
	.gpdup		= 0x0000faff,
	.gpdup_mask	= 0xffffffff,
#endif

	.lpcsel		= ((0xCE6) & ~7) | 1<<4,
};
最有一句中,默认是1<<4,但是老师的是1<<1,我照着改了之后果然成功。

我又翻看了s3c2440的芯片资料:

S3C2440 解决LCD图像偏移问题_第1张图片
如果是1<<4,那么RES_SEL这一项将会是 0 ,而1<<1的话则是1,屏幕刚好差了一个90度,所以图像偏移了。


你可能感兴趣的:(S3C2440 解决LCD图像偏移问题)