Eboot modificar el OK6410A (128M + 256MNand) de soporte HDMI pantalla de alta definición

        Con anterioridad ha sido usado OK6410A (256M de memoria + 2GNand) (sistema de WinCE6.0), compró una pantalla de alta definición HDMI, con Feiling a los datos técnicos, de acuerdo con la información dada, después de Eboot hizo cambios, que normalmente puede utilizar HDMI de alta definición pantallas. Recientemente con el fin de salvar a decenas de piezas de RMB, el jefe decidió sustituir la junta de usar 128M + 256MNand bordo, listos para tener en nuestras manos la sección HD añadido a la lista, pero se encontró Eboot no es lo mismo Sí, el error del compilador. Le pidió a la tecnología Feiling, la gente me dice que no va a utilizar la información sobre el HDMI en esta placa. Cómo hacerlo, sólo de acuerdo con los datos anteriores para tratar de resolver sus propios problemas. Afortunadamente, ahora resuelto, Echemos un vistazo a cómo se hace.

      En primer lugar, debe modificar la función en main.c que ayude a tomar decisiones HDMI, porque esta no es la opción por defecto. Dos funciones principales: BOOL MainMenu (PBOOT_CFG pBootCfg) y la función de cancelación InitializeDisplay (void).

En la siguiente función en las opciones del complemento LCD_VGA1024_RGB MainMenu para un switch de los casos, la

switch(pBootCfg->ConfigFlags&LCD_TYPE_MASK)
{
	case LCD_HUA350_RGB:
        	EdbgOutputDebugString ( "(320x240)\r\n");
		break;
	case LCD_HUA430_RGB:
        	EdbgOutputDebugString ( "(480x272)\r\n");
		break;
	case LCD_HUA560_RGB:
        	EdbgOutputDebugString ( "(640x480)\r\n");
		break;
	case LCD_QUN700_RGB:
        	EdbgOutputDebugString ( "(800x480)\r\n");
		break;
	case LCD_VGA800_RGB:
        	EdbgOutputDebugString ( "(800x600)\r\n");
		break;

	case LCD_VGA1024_RGB:
        	EdbgOutputDebugString ( "(1024x768)\r\n");
		break;

        default:
                EdbgOutputDebugString ( "(unknown)\r\n");
                break;
}


 Continuar función de visualización, al seleccionar 'S' que está dispuesto para seleccionar LCD, llamado SETLCD (pBootCfg);, en SETLCD función (PBOOT_CFG pBootCfg), las siguientes modificaciones 
 

static void SetLcd(PBOOT_CFG pBootCfg)
{
    USHORT InChar = 0;
	
    EdbgOutputDebugString("\r\n");
    EdbgOutputDebugString("0)3.5'LCD	320X240 \r\n");
    EdbgOutputDebugString("1)4.3'LCD	480X272 \r\n");
    EdbgOutputDebugString("2)5.6'LCD	640X480 \r\n");
    EdbgOutputDebugString("3)7.0'LCD	800X480 \r\n");
    EdbgOutputDebugString("4)VGA 		800X600 \r\n");
    EdbgOutputDebugString("5)HDMI		1024X768 \r\n");
	
    EdbgOutputDebugString("\r\nSelect Lcd Resolution [0-5]: ");
    while(!((InChar == 0x0d) || (InChar == 0x0a)))
    {
        InChar = OEMReadDebugByte();
        if (InChar != OEM_DEBUG_COM_ERROR && InChar != OEM_DEBUG_READ_NODATA)
        {
            // If it's a number or a period, add it to the string.
            //
            if ((InChar >= '0' && InChar <= '5'))
            {
            	OEMWriteDebugByte((BYTE)InChar);
            	pBootCfg->ConfigFlags&=~LCD_TYPE_MASK;
            	switch(InChar){
					case '0':
						pBootCfg->ConfigFlags|=LCD_HUA350_RGB;
						break;
					case '1':
						pBootCfg->ConfigFlags|=LCD_HUA430_RGB;
						break;
					case '2':
						pBootCfg->ConfigFlags|=LCD_HUA560_RGB;
						break;
					case '3':
						pBootCfg->ConfigFlags|=LCD_QUN700_RGB;
						break;
					case '4':
						pBootCfg->ConfigFlags|=LCD_VGA800_RGB;
						break;
					case '5':
						pBootCfg->ConfigFlags|=LCD_VGA1024_RGB;
						break;
					default:
						break;
            	}
				break;
            }
        }
    }

}

La siguiente función InitializeDisplay (), en la que selecciona switch de los casos modo LCD modificado de la siguiente modificación:

switch(g_pBootCfg->ConfigFlags&LCD_TYPE_MASK){
		case LCD_HUA350_RGB:
			LcdType = LDI_HUA350_RGB;
			g_dwLcdWidth = 320;
			g_dwLcdHeight = 240;
			g_dwLcdBpp = 16;
			break;
		case LCD_HUA430_RGB:
			LcdType = LDI_HUA430_RGB;
			g_dwLcdWidth = 480;
			g_dwLcdHeight = 272;
			g_dwLcdBpp = 16;
			break;
		case LCD_HUA560_RGB:
			LcdType = LDI_HUA560_RGB;
			g_dwLcdWidth = 640;
			g_dwLcdHeight = 480;
			g_dwLcdBpp = 16;
			break;
		case LCD_QUN700_RGB:
			LcdType = LDI_QUN700_RGB;
			g_dwLcdWidth = 800;
			g_dwLcdHeight = 480;
			g_dwLcdBpp = 16;
			break;
		case LCD_VGA800_RGB:
			LcdType = LDI_VGA800_RGB;
			g_dwLcdWidth = 800;
			g_dwLcdHeight = 600;
			g_dwLcdBpp = 16;
			break;
		case LCD_VGA1024_RGB:
			LcdType = LDI_VGA1024_RGB;
			g_dwLcdWidth = 1024;
			g_dwLcdHeight = 768;
			g_dwLcdBpp = 16;
			break;
		default:
			LcdType = LDI_HUA350_RGB;
			g_dwLcdWidth = 320;
			g_dwLcdHeight = 240;
			g_dwLcdBpp = 16;
			break;
	}

        Aquí se realiza básicamente a modificar, ha sido seleccionada para apoyar la toma HDMI, pero sólo apoyar a la selección, y no puede verdaderamente pantalla HDMI de alta definición, teniendo en cuenta una 7033.lib no se ha utilizado antes en la información dada en mí que información sobre el EBOOT main.c actual y main.c se encuentra para llamar a una función de 7033.lib de init_7033. A continuación, siga la información en las siguientes modificaciones MAIN.C principal función es modificar la InitializeVGA:

extern void init_7033(void);
//add by phantom
static void InitializeVGA(LDI_LCD_MODULE_TYPE LcdType)
{
	
    unsigned int  i;
	//EdbgOutputDebugString("[Eboot] ++InitializeVGA LcdType %d\r\n",LcdType);
    //IIC_Write   //CH7026 write address = 0xec
    if(LcdType==LDI_HUA560_RGB)	
    {
    	EdbgOutputDebugString("[Eboot] +++InitializeVGA 640X480()\r\n");
    	IIC_Open(2000);
		for (i = 0; i < CH7026_REG_NUM_VGA_640; i++) {
			
			if(!IIC_Write(0xEC, CH7026_REGS_VGA_640[i].subaddr, CH7026_REGS_VGA_640[i].value))
			{
				EdbgOutputDebugString("[Eboot] ---InitializeVGA ERROR!!!\r\n");
				IIC_Close();
				return;
			}
		}
		IIC_Write(0xEC,0x4,0x0);
		IIC_Close();
    	EdbgOutputDebugString("[Eboot] ---InitializeVGA 640X480()\r\n");
    }
	else if(LcdType==LDI_VGA800_RGB)
	{
    	EdbgOutputDebugString("[Eboot] +++InitializeVGA 800X600()\r\n");
		IIC_Open(2000);
		for (i = 0; i < CH7026_REG_NUM_VGA_800; i++) {
			if(!IIC_Write(0xEC, CH7026_REGS_VGA_800[i].subaddr, CH7026_REGS_VGA_800[i].value))
			{
				EdbgOutputDebugString("[Eboot] ---InitializeVGA ERROR!!!\r\n");
				IIC_Close();
				return;			
			}
		}
		IIC_Write(0xEC,0x4,0x0);
		IIC_Close();
    	EdbgOutputDebugString("[Eboot] ---InitializeVGA 800X600()\r\n");
	}
	else if(LcdType==LDI_VGA1024_RGB)
	{
		/* add by alexlee*/
		EdbgOutputDebugString("[Eboot] +++InitializeHDMI 1024X768()\r\n");
		init_7033();
		EdbgOutputDebugString("[Eboot] ---InitializeHDMI 1024X768()\r\n");
	}
	
}
         Entonces no habrá 7033.lib añadido a las opciones de enlace eboot, se describen en este perfil, puede hacer lo mismo. Después de completar estas tareas, que no hayan concluido, ya que se produce el error de compilación en tiempo de compilación Eboot, esto es principalmente porque algunas de las funciones de la biblioteca llamada 7033.lib, mientras que estas funciones todavía. En comparación la información dada usb.h, usb.c, ch7026.h, el archivo con el Eboot actual ha modificado:

usb.h añadido:

BOOL IIC_Read(u8 cSlaveAddr,u8 cAddr,u8 *cData);

usb.c añadido:

void IIC_SetRead(  u8 cSlaveAddr,  u8 *pData, u32 uDataLen)
{
	u32 uTmp2;
	u32 uTmp3;
	
	uTmp2= Input32(rIICSTAT0);
	while(uTmp2&(1<<5))		//	Wait until IIC bus is free.
		uTmp2 = Input32(rIICSTAT0);			

	g_PcIIC_BUFFER	=	pData;
	g_uIIC_PT		=	0;
	g_uIIC_DATALEN	=	uDataLen;

	uTmp3 = Input32(rIICCON0);
	uTmp3 |= (1<<7);
	Outp32(rIICCON0,uTmp3);				//	Ack generation Enable
	Outp32(rIICDS0,cSlaveAddr);
	Outp32(rIICSTAT0,0xB0);				//	Master Rx Start.
}
BOOL IIC_Read(u8 cSlaveAddr,u8 cAddr,u8 *cData)
{
	IIC_SetWrite( cSlaveAddr, &cAddr, 1);			// following EEPROM random address access procedure
	IIC_SetRead( cSlaveAddr, cData, 1);
	IIC_Wait();								//	Waiting for read complete.
}

El ch7026.h copiado directamente sobreescribir el archivo existente ch7026.h, debido a que la información contenida en este documento se añade un CH7033_RegTable [] [2].

         Por lo tanto, para completar el trabajo de modificación, a continuación, volver a compilar, y luego generar una imagen. Después de seleccionar el HDMI Sin embargo, el sistema comienza a intermedio se detuvieron, y el DNW impresión sigue:

[Eboot] ++ InitializeDisplay ()

Que en este lugar no podemos seguir el down. Encuentro que esta afirmación, es la función () para imprimir en InitializeDisplay, la búsqueda se encontró el siguiente ciclo se inicia la causa de interrupción:

        for (i=0; i<g_dwLcdWidth*g_dwLcdHeight; i++)
            *pFB++ = 0x0000;//0x001F;        // Blue
Este ciclo está en el LOGO inicial en sí mismo este ciclo no es ningún problema, dudo si es debido a la transfronteriza que conduce a ella, miró debajo del puntero pFB,

  unsigned short *pFB;
        pFB = (unsigned short *)EBOOT_FRAMEBUFFER_UA_START;
Una búsqueda adicional EBOOT_FRAMEBUFFER_UA_START, image_cfg.h define como sigue:

// Eboot Display Frame Buffer
// 2MB
#define EBOOT_FRAMEBUFFER_OFFSET        (0x07F00000) 
#define EBOOT_FRAMEBUFFER_PA_START      (DRAM_BASE_PA_START+EBOOT_FRAMEBUFFER_OFFSET)
#define EBOOT_FRAMEBUFFER_UA_START      (DRAM_BASE_UA_START+EBOOT_FRAMEBUFFER_OFFSET)
#define EBOOT_FRAMEBUFFER_SIZE          (0x00100000)
El valor EBOOT_FRAMEBUFFER_OFFSET cambió 0x07E00000.

      Volver a compilar de nuevo para generar imágenes. En este punto se puede elegir normalmente pantallas de alta definición HDMI. Todo el trabajo terminado, aún no se ha encontrado nada inusual, pero necesita un mayor estudio. . . .



 
 
 
Publicado 37 artículos originales · ganado elogios 204 · vistas 440 000 +

Supongo que te gusta

Origin blog.csdn.net/zwgdft/article/details/7354893
Recomendado
Clasificación