浅谈ARM9的LCD驱动(三)

2014-11-24 12:14:46 · 作者: · 浏览: 6
0 = The video data is fetched at VCLK falling edge
* bit[9] : 1 = HSYNC信号要反转,即低电平有效
* bit[8] : 1 = VSYNC信号要反转,即低电平有效
* bit[6] : 0 = VDEN不用反转
* bit[3] : 0 = PWREN输出0
*
* BSWP = 0, HWSWP = 0, BPP24BL = 0 : 当bpp=24时,2440会给每一个象素分配32位即4字节,哪一个字节是不使用的 看2440手册P412
* bit[12]: 0, LSB valid, 即最高字节不使用
* bit[1] : 0 = BSWP
* bit[0] : 0 = HWSWP
*/

3.分配显存(framebuffer), 并把地址告诉LCD控制器

a.分配

	s3c_lcd->screen_base = dma_alloc_writecombine(NULL, s3c_lcd->fix.smem_len, &s3c_lcd->fix.smem_start, GFP_KERNEL);

b.设置

LCDSADDR1

\

我们只需要将LCD地址右移1位置。然后将前两位(没用到的)清零即可。

	lcd_regs->lcdsaddr1  = (s3c_lcd->fix.smem_start >> 1) & ~(3<<30); //最高两位清零
LCDSADDR2

\

这里用到结束地址(其实就是开始地址+长度)然后右移动1位,最后将没用到的位清零。

	lcd_regs->lcdsaddr2  = ((s3c_lcd->fix.smem_start + s3c_lcd->fix.smem_len) >> 1) & 0x1fffff;

LCDSADDR3

\

表示的一行的长度,用半字(2字节)表示:

	lcd_regs->lcdsaddr3  = (240*32/16);  /* 一行的长度(单位: 2字节) */	


d.注册: register_framebuffer


我们做的这些要叫内核知道,所以最后要注册一下

参考:韦东山视频二期

黄刚的S3C2440上LCD驱动(FrameBuffer)实例开发讲解 www.linuxidc.com/Linux/2011-03/33600.htm