Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo cambiar el controlador LCD en Wince 6.0 y qué archivos deben modificarse

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

************

}

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

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

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

(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