本文以1024*768分辨率的TFT_16BPP真彩LCD为例,说明在WIN CE 4.2中驱动程序的修改事项,目标板的微处理器是S3C2410A。
该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\S3C2410LCD\s3c2410disp.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) &0x3f)
#define HBPD ((16-1)&0x7f)
#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 edg