Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104931
  • 博文数量: 20
  • 博客积分: 506
  • 博客等级: 下士
  • 技术积分: 216
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-08 21:10
文章分类

全部博文(20)

文章存档

2011年(20)

我的朋友

分类: 嵌入式

2011-02-21 13:54:44

一、移植环境

主机:ubuntu 8.04-vm 7.0 

开发板:tq2440

交叉编译器:arm-linux-gcc (EABI 4.3.3)                                                 

内核版本:linux 2.6.32.10

 

二、移植过程

1. linux 2.6.32.10内核中已经对2440的LCD驱动有支持,我们只需修改其中的部分参数来支持自己的LCD

进入  linux/arch/arm/mach-s3c2440/mach-smdk2440.c

找到如下这个设置lcd初始化参数的结构体, 内核源码如下:

  1. /* LCD driver info */
  2. static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

  3.         .lcdcon5 = S3C2410_LCDCON5_FRM565 |
  4.                           S3C2410_LCDCON5_INVVLINE |
  5.                           S3C2410_LCDCON5_INVVFRAME |
  6.                           S3C2410_LCDCON5_PWREN |
  7.                           S3C2410_LCDCON5_HWSWP,

  8.         .type = S3C2410_LCDCON1_TFT,

  9.         .width = 240,
  10.         .height = 320,

  11.         .pixclock = 166667, /* HCLK 60 MHz, divisor 10 */
  12.         .xres = 240,
  13.         .yres = 320,
  14.         .bpp = 16,
  15.         .left_margin = 20,
  16.         .right_margin = 8,
  17.         .hsync_len = 4,
  18.         .upper_margin = 8,
  19.         .lower_margin = 7,
  20.         .vsync_len = 4,
  21. };

2.我们对其进行修改

如果使用的是3.5寸屏:

 

  1. //3.5

  2. static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

  3.         .lcdcon5 = S3C2410_LCDCON5_FRM565 |
  4.                           S3C2410_LCDCON5_INVVLINE |
  5.                           S3C2410_LCDCON5_INVVFRAME |
  6.                           S3C2410_LCDCON5_PWREN |
  7.                           S3C2410_LCDCON5_HWSWP,

  8.         .type = S3C2410_LCDCON1_TFT,

  9.         .width = 320,
  10.         .height = 240,

  11.         .pixclock = 80000, /* HCLK 100 MHz, divisor 3 */
  12.         .xres = 320,
  13.         .yres = 240,
  14.         .bpp = 16, //每一个真彩色占16位


  15.         .left_margin = 28, /* for HFPD*/
  16.         .right_margin = 24, /* for HBPD*/
  17.         .hsync_len = 42, /* for HSPW*/
  18.         .upper_margin = 6, /* for VBPD*/
  19.         .lower_margin = 2, /* for VFPD*/
  20.         .vsync_len = 12, /* for VSPW*/
  21. };

如果使用的是4.3寸屏,进行如下修改

  1. //4.3

  2. static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

  3.         .lcdcon5 = S3C2410_LCDCON5_FRM565 |
  4.                           S3C2410_LCDCON5_INVVLINE |
  5.                           S3C2410_LCDCON5_INVVFRAME |
  6.                           S3C2410_LCDCON5_PWREN |
  7.                           S3C2410_LCDCON5_HWSWP,

  8.         .type = S3C2410_LCDCON1_TFT,

  9.         .width        = 480,
  10.         .height        = 272,

  11.         .pixclock    = 40000, /* HCLK 100 MHz, divisor 1 */
  12.        // .setclkval    = 0x4,

  13.         .xres = 480,
  14.         .yres = 272,
  15.         .bpp = 16,

  16.         .left_margin = 19, /* for HFPD*/
  17.         .right_margin = 10, /* for HBPD*/
  18.         .hsync_len = 30, /* for HSPW*/
  19.         .upper_margin = 4, /* for VBPD*/
  20.         .lower_margin = 2, /* for VFPD*/
  21.         .vsync_len = 8, /* for VSPW*/
  22. };


VBPD(vertical back porch): 表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_margin;
VFBD(vertical front porch): 表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_margin;
VSPW(vertical sync pulse width): 表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_len;
HBPD(horizontal back porch): 表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_margin;
HFPD(horizontal front porth): 表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_margin;
HSPW(horizontal sync pulse width): 表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len;

 
对于以上这些参数的值将分别保存到REGBANK寄存器组中的LCDCON1/2/3/4/5寄存器中:(对寄存器的操作请查看S3c2440datasheet 第15章LCD部分)

LCDCON1:17 - 8位CLKVAL 
          6 - 5位扫描模式(对于STN屏:4位单/双扫、8位单扫) 
          4 - 1位色位模式(1BPP、8BPP、16BPP等)

LCDCON2:31 - 24位VBPD 
         23 - 14位LINEVAL 
         13 - 6位VFPD 
          5 - 0位VSPW

LCDCON3:25 - 19位HBPD 
         18 - 8位HOZVAL 
          7 - 0位HFPD

LCDCON4: 7 - 0位HSPW

LCDCON5:

 
 
3  配置内核选项。选上LCD支持和Logo图标
   内核目录下make menuconfig
  Device Drivers --->Graphics support
  framebuffer显示支持
 
选中S3C2410 LCD
 
 
4. 重新编译内核并下载到开发板上,系统启动后可以出现小企鹅图标。
 
阅读(5162) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~