本文以1024*768分辨率的TFT_16BPP真彩LCD为例,说明在WIN CE 4.2中驱动程序的修改事项,目标板的微处理器是S3C2410A。
3. s3c2410disp.cpp
…/WINCE420/PLATFORM/SMDK2410/DRIVERS/DISPLAY/S3C2410LCD/s3c2410disp.cpp
该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. …/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 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
********
}
…/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 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];
S3C2410DISP::S3C2410DISP (void)
{
********
m_nScreenWidth = 1024;
m_nScreenHeight = 768;
*********
}
到此修改工作基本完成,但还要一个问题:1024*768分辨率占用的显示缓冲区大小是:1024*768*2 = 1536 K Bytes,因此要确认所分配的内存空间够不够,是在config.bib文件中定义的。如果以前定义的足够大,后面的步骤可以省略了。
WORD TempBuffer[1025][768];
S3C2410DISP::S3C2410DISP (void)
{
********
m_nScreenWidth = 1024;
m_nScreenHeight = 768;
*********
}
到此修改工作基本完成,但还要一个问题:1024*768分辨率占用的显示缓冲区大小是:1024*768*2 = 1536 K Bytes,因此要确认所分配的内存空间够不够,是在config.bib文件中定义的。如果以前定义的足够大,后面的步骤可以省略了。
3. s3c2410disp.cpp
…/WINCE420/PLATFORM/SMDK2410/DRIVERS/DISPLAY/S3C2410LCD/s3c2410disp.cpp
本文介绍如何在WinCE 4.2环境下为1024*768分辨率的TFT_16BPP真彩LCD配置驱动程序。详细解释了需要修改的五个关键文件,并提供了具体的修改示例。
WinCE(s3c2410的LCD驱动程序编写指南&spm=1001.2101.3001.5002&articleId=3090361&d=1&t=3&u=7c87605be4384a2b93afcf2a77ba324f)
2876

被折叠的 条评论
为什么被折叠?



