Cómo cambiar el controlador LCD en Wince 6.0 y qué archivos deben modificarse
Nota: Los parámetros de temporización de la pantalla LCD y las fases del reloj varían según las diferentes pantallas LCD; consulte la hoja de datos de la pantalla LCD correspondiente.
Hay cinco archivos relacionados para modificar el controlador de LCD en WIN CE 4.2, respectivamente:
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
Principalmente con controlador LCD Definición de registro , Definición de secuencia de trabajo del controlador LCD, definición de resolución, etc. La parte roja es el contenido modificado:
#define LCDTYPE
TFT16BPP
#define LCD_TYPE
TFT***_** *
#definir SCR_XSIZE_TFT
(1280)
#definir SCR_YSIZE_TFT
(960)
#definir LCD_XSIZE_TFT
(1024)
#definir LCD_YSIZE_TFT
(768)
#definir VBPD
(( 2-1)amp; 0xff)
#definir VFPD
((2-1)amp;0xff)
#definir VSPW
((2-1)amp;0x3f)
#definir HBPD
((16-1)amp;0x7f)
#definir HFPD
((200-1)amp;0xff)
#define HSPW
((16-1)amp;0xff)
#define CLKVAL_TFT
(1)
//La definición de este valor no se utiliza en la función de inicialización de LCD, sino que se expresa directamente como un valor numérico.
2.
cfw.c
…\WINCE420\PLATFORM\SMDK2410\KERNEL\HAL\cfw.c
El rojo parte El contenido modificado:
static void InitDisplay()
{
********
s2410LCD- gt ;rLCDCON1=(1lt;lt;8)|(MVAL_USEDlt;lt;7)|(3lt;lt;5)|(12lt;lt;1)|0;
// CLKVAL_TFT = 1 , HCLK = 100MHz -gt; VCLK = 25MHz
//Panel LCD TFT
//16 bpp para TFT
s2410LCD-gt; lt;24)|(LINEVAL_TFTlt;lt;14)|(VFPDlt;lt;6)|(VSPW);
s2410LCD-gt;rLCDCON3=(HBPDlt;lt;19)|(HOZVAL_TFTlt; lt ;8)|(HFPD);
s2410LCD-gt;rLCDCON4=(MVALlt;lt;8)|(HSPW);
s2410LCD-gt;rLCDCON5=
(1lt;lt;11)|(0lt;lt;10)|(0lt;lt;9)|(0lt;lt;8)|(0lt;lt;7)|(0lt;lt;6 ) |(0lt;lt;3)|(0lt;lt;1)|(1lt;lt;0);
//5:6:5 Formato
// El los datos de vídeo se obtienen en el flanco descendente de VCLK
//Polaridad del pulso VLINE/HSYNC-Normal
//Polaridad del pulso VFRAME/VSYNC-Normal
// VD (datos de vídeo) polaridad de pulso-Normal
//Polaridad de señal VDEN-Normal
//Desactivar señal PWREN
//Intercambio de bytes Desactivar
//Habilitar intercambio de media palabra
********
}
3.
s3c2410disp .cpp
…\WINCE420\PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp
La parte roja es el contenido modificado:
WORD
TempBuffer[1025][768];
S3C2410DISP::S3C2410DISP (nulo)
{
****** * *
m_nScreenWidth = 1024;
m_nScreenHeight = 768
************
}; p>
En este punto, el trabajo de modificación básicamente está completo, pero hay otro problema: el tamaño del búfer de visualización ocupado por una resolución de 1024 * 768 es:
1024*768*2 = 1536 K Bytes, por lo que debe confirmar si el espacio de memoria asignado es suficiente, que se define en el archivo config.bib. Si la definición anterior es lo suficientemente amplia, se pueden omitir los pasos siguientes.
4.
config.bib
…\WINCE420\PLATFORM\SMDK2410\FILES\config.bib
#define NKNAME NK
#define NKSTART
8C200000
#define NKLEN
01D00000
#define RAMSTART
8E000000
#define RAMLEN
01F00000
$(NKNAME)
$(NKSTART)
$(NKLEN)
RAMIMAGE
RAM
$(RAMSTART)
$(RAMLEN)
RAM
AUD_DMA
8c002000
00002000
RESERVADO
DRV_GLB
8c010000
00010000
RESERVADO
DBGSER_DMA
8c022000
00002000
RESERVADO
SER_DMA
8c024000
00002000
RESERVADO
IR_DMA
8c026000
00002000
RESERVADO
SD_DMA
8c028000
00008000
RESERVADO
EDBG
8c030000
00020000
RESERVADO
CPXIPCHAIN
8c050000
00008000
RESERVADO
SLEEP_BUFF
8c058000
00004000
RESERVADO
PANTALLA
8c100000
00100000
RESERVADO
El elemento DISPLAY es la definición de espacio de memoria del búfer de visualización, 8c100000 es la dirección inicial y 00100000 es el tamaño. Se puede ver que originalmente solo se definió 1 MB de espacio de memoria para el búfer de la pantalla LCD y 1024 * 768 requiere 1536 K Bytes de espacio de memoria, por lo que la definición aquí debe modificarse; Sin embargo, una vez que se modifica el contenido del archivo config.bib, implicará trabajos de modificación en muchos lugares y el proceso es relativamente engorroso.
Afortunadamente, hay 0x8C100000-(0x8C058000 0x00004000) = 656K Bytes de espacio de memoria no asignado frente a la PANTALLA de mi placa de destino, así que hice las siguientes modificaciones:
AUD_DMA
8c002000 p >
00002000
RESERVADO
DRV_GLB
8c010000
00010000
RESERVADO
DBGSER_DMA
8c022000
00002000
RESERVADO
SER_DMA
8c024000
00002000
RESERVADO
IR_DMA
8c026000
00002000
RESERVADO
SD_DMA
8c028000
00008000
RESERVADO
EDBG
8c030000
00020000 p >
RESERVADO
CPXIPCHAIN
8c050000
00008000
RESERVADO
SLEEP_BUFF
8c058000
00004000
RESERVADO
; PANTALLA
8c100000
00100000
RESERVADO
DISPLAY
8c060000
001a0000
RESERVADO
5.
La dirección de inicio del búfer de visualización DISPLAY se modifica en (4), por lo que se deben realizar las modificaciones correspondientes en "s2410.h":
…\WINCE420\PLATFORM\SMDK2410\INC\s2410.h
#define DMA_BUFFER_BASE
0xAC000000
#define DMA_PHYSICAL_BASE
0x30000000
//#define FRAMEBUF_BASE p >
(DMA_BUFFER_BASE 0x00100000)
//#define FRAMEBUF_DMA_BASE
(DMA_PHYSICAL_BASE 0x00100000)
#define FRAMEBUF_BASE
( DMA_BUFFER_BASE 0x00060000)
#define FRAMEBUF_DMA_BASE
(DMA_PHYSICAL_BASE 0x00060000)
6.
El búfer de visualización DISPLAY se modifica en (4) El tamaño de Para el contenido modificado:
void
S3C2410DISP::InitializeHardware (void)
{
************
m_VirtualFrameBuffer = (DWORD)VirtualAlloc(0, (0x1A0000 ) , MEM_RESERVE, PAGE_NOACCESS);
if (m_VirtualFrameBuffer == NULL)
{
RETAILMSG(0, (TEXT("m_VirtualFrameBuffer no está asignado\n \ r")));
return;
}
else if (!VirtualCopy((PVOID)m_VirtualFrameBuffer, (PVOID)gdwLCDVirtualFrameBase, (0x1A0000) , PAGE_READWRITE | PAGE_NOCACHE))
{
RETAILMSG(0, (TEXT("m_VirtualFrameBuffer no está asignado\n\r")));
VirtualFree ( (PVOID)m_VirtualFrameBuffer, 0, MEM_RELEASE);
return;
}
************
}
7.
En (4), se modifica la dirección inicial del búfer de visualización DISPLAY y es necesario modificar el archivo de registro "platform.reg" en consecuencia:
p>
…\ 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