(转)WinCE(s3c2410)的LCD驱动程序编写指南

  本文以1024*768分辨率的TFT_16BPP真彩LCD为例,说明在WIN CE 4.2中驱动程序的修改事项,目标板的微处理器是S 3C 2410A 。

该LCD的时序图如下图所示:

Note LCD 时序的参数和时钟相位因不同 LCD 而异 , 请参考相应 LCD datasheet.
WIN CE 4.2中修改LCD驱动程序有五个相关文件,分别是:
1.    …/WINCE420/PLATFORM/SMDK2410/INC/s2410.h
2.    …/WINCE420/PLATFORM/SMDK2410/KERNEL/HAL/cfw.c
3.    …/WINCE420/PLATFORM/SMDK2410/DRIVERS/DISPLAY/S 3C 2410LCD/s 3c 2410disp.cpp
4.    …/WINCE420/PLATFORM/SMDK2410/FILES/config.bib
5.    …/ WINCE420/PLATFORM/SMDK2410/FILES/platform.reg

1. s2410.h
…/WINCE420/PLATFORM/SMDK2410/INC/s2410.h
主要有 LCD 控制器的寄存器定义、 LCD 控制器的工作时序定义、分辨率的定义等等。红色部分为修改后的内容:
#define LCDTYPE                       TFT16BPP
#define LCD_TYPE                     TFTxxx_xxx

#define SCR_XSIZE_TFT            (1280)
#define SCR_YSIZE_TFT            (960)
#define LCD_XSIZE_TFT           (1024)
#define LCD_YSIZE_TFT            (768)

#define VBPD                           ((2-1)&0xff)
#define VFPD                            ((2-1)&0xff)
#define VSPW                           ((2-1) &0x 3f )
#define HBPD                          ((16-1)&0x 7f )
#define HFPD                           ((200-1)&0xff)
#define HSPW                           ((16-1)&0xff)
#define CLKVAL_TFT               (1)   //
这个值的定义在 LCD 初始化函数中并不用到 , 而是直接用数值表示。



2. cfw.c
…/WINCE420/PLATFORM/SMDK2410/KERNEL/HAL/cfw.c
红色部分为修改后的内容:
static void InitDisplay()
{
       ********
       s2410LCD->rLCDCON1=(1<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;
                                              // CLKVAL_TFT = 1 , HCLK = 100MHz -> VCLK = 25MHz
                                                                                     //
TFT LCD panel
                                                                                                //16 bpp for TFT
       s2410LCD->rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
       s2410LCD->rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
       s2410LCD->rLCDCON4=(MVAL<<8)|(HSPW);
       s2410LCD->rLCDCON5=
        (1<<11)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0<<3)|(0<<1)|(1<<0);
        //
5:6:5 Format
                  //The video data is fetched at VCLK falling edge
                                 //VLINE/HSYNC pulse polarity-Normal
                                            //VFRAME/VSYNC pulse polarity-Normal
                                                      //VD (video data) pulse polarity-Normal
                                                                 //VDEN signal polarity-Normal
                                                                           //Disable PWREN signal
                                                                                      //Byte swap Disable
                                                                                              //Half-Word swap Enable
       ********
}
红色部分为修改后的内容:

WORD    TempBuffer[1025][768];
S 3C 2410DISP::S 3C 2410DISP (void)
{
       ********
       m_nScreenWidth = 1024;
       m_nScreenHeight = 768;
       *********
}

      
到此修改工作基本完成,但还要一个问题:1024*768分辨率占用的显示缓冲区大小是:1024*768*2 = 1536 K Bytes,因此要确认所分配的内存空间够不够,是在config.bib文件中定义的。如果以前定义的足够大,后面的步骤可以省略了。



3. s 3c 2410disp.cpp
…/WINCE420/PLATFORM/SMDK2410/DRIVERS/DISPLAY/S 3C 2410LCD/s 3c 2410disp.cpp
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值