LCD TO VGA Card Drivers For WINCE 4.2
LCD转VGA输出视频卡基于WINCE 4.2的驱动编程
在WIN CE操作系统中,LCD2VGA Card (简称)使用的是标准16BIT_TFT 真彩LCD的驱动程序。在这
里只以1024*768分辨率为例说明在WIN CE 4.2中驱动程序的修改事项,目标板的微处理器是S3C2410X。
在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)
VBPD ((2-1)&0xff)
#define
#define
VFPD ((2-1)&0xff)
VSPW ((2-1) &0x3f)
#define
HBPD ((16-1)&0x7f)
#define
HFPD ((200-1)&0xff)
#define
HSPW ((16-1)&0xff)
#define
#define CLKV AL_TFT (1) //这个值的定义在LCD初始化函数中并不用到,而是直接用数值表示。
2. cfw.c
…\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c
红色部分为修改后的内容:
static void InitDisplay()
{
********
s2410LCD->rLCDCON1=(1<<8)|(MV AL_USED<<7)|(3<<5)|(12<<1)|0;
// CLKV AL_TFT = 1 , HCLK = 100MHz -> VCLK = 25MHz
//TFT LCD panel
TFT
for
//16
bpp
s2410LCD->rLCDCON2=(VBPD<<24)|(LINEV AL_TFT<<14)|(VFPD<<6)|(VSPW);
s2410LCD->rLCDCON3=(HBPD<<19)|(HOZV AL_TFT<<8)|(HFPD);
s2410LCD->rLCDCON4=(MV AL<<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
polarity-Normal
//VLINE/HSYNC
pulse
polarity-Normal
pulse
//VFRAME/VSYNC
data)
polarity-Normal
pulse
(video
//VD
polarity-Normal
//VDEN
signal
//Disable PWREN signal
//Byte swap Disable
Enable
swap
//Half-Word
********
}
3. s3c2410disp.cpp
…\WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
红色部分为修改后的内容:
WORD TempBuffer[1025][768];
S3C2410DISP::S3C2410DISP (void)
{
********
1024;
=
m_nScreenWidth
768;
m_nScreenHeight
=
*********
}
到此修改工作基本完成,但还要一个问题:1024*768分辨率占用的显示缓冲区大小是:1024*768*2 = 1536 K Bytes,因此要确认所分配的内存空间够不够,是在config.bib文件中定义的。如果以前定义的足够大,后面的步骤可以省略了。
4. config.bib
…\WINCE420\PLATFORM\SMDK2410\FILES\config.bib
#define NKNAME NK
NKSTART 8C200000
#define
NKLEN 01D00000
#define
RAMSTART 8E000000
#define
RAMLEN 01F00000
#define
$(NKNAME) $(NKSTART) $(NKLEN) RAMIMAGE
RAM $(RAMSTART) $(RAMLEN) RAM
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
DISPLAY 8c100000 00100000 RESERVED
DISPLAY项就是显示缓冲区的内存空间定义, 8c100000是开始地址, 00100000是大小。可以看出原先只定义了1M Bytes的内存空间给LCD显示缓冲区;而1024*768需要1536 K Bytes的内存空间,因此需要修改这里的定义。但是一旦修改到config.bib文件的内容,将会涉及到很多地方的修改工作,过程比较繁琐。
所幸的是我的目标板DISPLAY前面还有0x8C100000-(0x8C058000+0x00004000) = 656K Bytes未分配的内存空间,因此做如下修改:
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
;DISPLAY 8c100000 00100000 RESERVED
DISPLAY 8c060000001a0000RESERVED
5.在(4)中修改了DISPLAY显示缓冲区的开始地址,因此要在“s2410.h”中做相应的修改:
…\WINCE420\PLATFORM\SMDK2410\INC\s2410.h
0xAC000000
#define
DMA_BUFFER_BASE
#define DMA_PHYSICAL_BASE 0x30000000
+
0x00100000) //#define
FRAMEBUF_BASE (DMA_BUFFER_BASE
//#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00100000)
0x00060000)
+
#define
FRAMEBUF_BASE (DMA_BUFFER_BASE
#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00060000)
6.在(4)中修改了DISPLAY显示缓冲区的大小, 因此要在“s3c2410disp.cpp”中做相应的修改:
…\WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
红色部分为修改后的内容:
void S3C2410DISP::InitializeHardware (void)
{
*********
m_VirtualFrameBuffer = (DWORD)VirtualAlloc(0, (0x1A0000), MEM_RESERVE, PAGE_NOACCESS);
if (m_VirtualFrameBuffer == NULL)
{
RETAILMSG(0,(TEXT("m_VirtualFrameBuffer is not allocated\n\r")));
return;
}
else if (!VirtualCopy((PVOID)m_VirtualFrameBuffer, (PVOID)gdwLCDVirtualFrameBase, (0x1A0000), PAGE_READWRITE | PAGE_NOCACHE))
{
RETAILMSG(0, (TEXT("m_VirtualFrameBuffer is not mapped\n\r")));
VirtualFree((PVOID)m_VirtualFrameBuffer, 0, MEM_RELEASE);
return;
}
*********
}
7. 在(4)中修改了DISPLAY显示缓冲区的开始地址,还要对注册表文件“platform.reg”做相应的修改:
…\ WINCE420\PLATFORM\SMDK2410\FILES\platform.reg
[HKEY_LOCAL_MACHINE\Drivers\Display\S3C2410\CONFIG]
"DisplayDll"="s3c2410disp.dll"
;"LCDVirtualFrameBase"=dword:ac100000
;"LCDPhysicalFrameBase"=dword:30100000
"LCDVirtualFrameBase"=dword:ac060000
"LCDPhysicalFrameBase"=dword:30060000
完!
LCD TO VGA Video Card User Manual
LCD转VGA输出视频卡产品说明书
产品介绍:
LCD2VGA Card (简称)是一款以FPGA做为桥接芯片,集成高效显存技术的视频转换卡。带有LCD
控制器的CPU通过此视频卡,可以驱动带VGA接口的液晶显示器或CRT显示器。本LCD2VGA Card
支持STN(伪彩)和TFT(真彩) 两种工作模式,兼容640*480、800*600、1204*768三种分辨率,支持60Hz、
70Hz、75Hz刷新率;其工作方式和工作时序与STN(伪彩)/ TFT(真彩)LCD完全一样。
LCD2VGA Card的工作原理:低场频/刷新率的视频数据(比如20Hz或更低)由LCD控制器输出,
经过FPGA采集和处理之后送给数模转换芯片转换成RGB模拟信号,最后送给VGA显示器显示;同时
FPGA产生驱动VGA显示器所需要的行同步和场同步信号(此过程也叫时序转换);由此实现了低刷新
率到高刷新率的转变,从而减轻LCD控制器的负担。
LCD2VGA Card信号输入接口全部采用抗干扰逻辑设计和防尖峰电压电路设计, LCD控制器和本
LCD2VGA视频卡在没有驱动IC的情况下也能稳定工作。而此视频卡最突出的优点在于它能同时兼容
STN和TFT两种工作模式以及支持多种分辨率和刷新率,只需在断电或开机状态下切换SW2编码开关
即可。
Absolute Maximum Rating
Max.
Unit
Min.
Item Symbol
Supply V oltage V CC -0.3 6.0 V
Input Signal V oltage V I -0.5 4.1 V
Operating Temperature ---- 0 +60 °C
Storage Temperature ---- -10 +70 °C
Electrical Characteristics
Max.
Unit
Min.
Typ.
Item Symbol
Supply V oltage V CC 4.5 5.0 6.0 V
High Level Input V oltage V IH 1.7 ---- 4.1 V
Low Level Input V oltage V IL -0.5 ---- 0.7 V Current Consumption I CC 120 ---- 160 mA Power Consumption P CC 0.6 ---- 0.8 W
附录:
1. 目前已测试的CPU:
(1) SAMSUNG公司的ARM7系列微处理器S3C44B0X。
(2) SAMSUNG公司的ARM9系列微处理器S3C2410。
(3) SAMSUNG公司的ARM9系列微处理器S3C2440。
2. 目前已测试的操作系统:
(1) Windows CE .NET 4.20
3. 目前已测试的图形系统:
(1) uCGUI V3.90a
4. LCD TO VGA Video Card性能测试:
硬件配置:
CUP: S3C2410A
CPU主频: 200MHz
内存: 64M
LCD控制器: S3C2410A集成LCD控制器
测试条件:
.NET
4.20
CE
Windows
操作系统:
LCD控制器工作模式: TFT 16位色
分辨率: 1024*768
VCLK频率: 25MHz
(帧/秒)
场频:
25.78Hz
测试结果:
使用TCPMP V0.81媒体播放器在Win CE 4.2操作系统下播放320*240@30帧率的视频文件表现良好,画面顺畅,无闪烁现象,但色彩有轻微失真(是因为32位色视频转换为16位色视频的缘故)。
5. LCD TO VGA Video Card性能测试:
硬件配置:
CUP: S3C2440A
CPU主频: 400MHz
内存: 64M
LCD控制器: S3C2440A集成LCD控制器
测试条件:
4.20
CE
.NET
Windows
操作系统:
LCD控制器工作模式: TFT 16位色
分辨率: 1024*768
VCLK频率: 25MHz
(帧/秒)
场频:
25.78Hz
测试结果:
使用TCPMP V0.81媒体播放器在Win CE 4.2操作系统下播放640*480@30帧率的视频文件表现良好,画面顺畅,无闪烁现象,但色彩有轻微失真(是因为32位色视频转换为16位色视频的缘故)。
Emai: va882@https://www.wendangku.net/doc/d46018711.html,
Tel: 135********(广州)
陈先生