⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3c6410_ldi.c

📁 SAMSUNG S3C6410 CPU BSP for winmobile6
💻 C
📖 第 1 页 / 共 2 页
字号:
static LDI_ERROR LDI_LTE480WV_RGB_power_on(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_LTE480WV_RGB_power_on()\n\r")));

	// PCI 				: GPN[5]
	// LCD_PANNEL_ON	: N/A in SMDK6410

	// Envid Disable
	g_pDispConReg->VIDCON0 &= ~0x3;	//~(ENVID_ENABLE | ENVID_F_ENABLE);	// Direct Off

	// LCD Pannel Power On
	g_pGPIOReg->GPNDAT &= ~(1<<5);	// PCI set to Low
	// TODO: LCD Power On Here
	DelayLoop_1ms(10);					// tp-sig > 10 ms

	// Envid Enable (Start output through RGB I/F)
	g_pDispConReg->VIDCON0 |= 0x3;		//(ENVID_ENABLE | ENVID_F_ENABLE);
	DelayLoop_1ms(20);					// tvsync-don > 1 frame (16.7 ms)

	// Set PCI to High
	g_pGPIOReg->GPNDAT |= (1<<5);		// PCI set to High

	LDI_MSG((_T("[LDI]--LDI_LTE480WV_RGB_power_on() : %d\n\r"), error));

	return error;
}

static LDI_ERROR LDI_LTE480WV_RGB_power_off(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_LTE480WV_RGB_power_off()\n\r")));

	// PCI 				: GPN[5]
	// LCD_PANNEL_ON	: N/A in SMDK6410

	// Set PCI to Low
	g_pGPIOReg->GPNDAT &= ~(1<<5);	// PCI set to Low
	DelayLoop_1ms(40);					// twht1 > 2 frame (33.3 ms)
	DelayLoop_1ms(20);					// tpoff > 1 frame (16.7 ms)

	// Envid Disable
	g_pDispConReg->VIDCON0 &= ~(0x1);	//~(ENVID_F_ENABLE);	// Per Frame Off
	DelayLoop_1ms(20);					// Wait for frame finished (16.7 ms)
	DelayLoop_1ms(10);					// tsig0ff-vdd > 10 ms

	// LCD Pannel Power Off
	// TODO: LCD Power Off Here

	LDI_MSG((_T("[LDI]--LDI_LTE480WV_RGB_power_off() : %d\n\r"), error));

	return error;
}

static LDI_ERROR LDI_LTE480WV_RGB_initialize(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_LTE480WV_RGB_initialize()\n\r")));

	// There is No Power Sequence for LTP480WV

	LDI_MSG((_T("[LDI]--LDI_LTE480WV_RGB_initialize() : %d\n\r"), error));

	return error;
}



static void LDI_LTP700WV_port_initialize(void)
{
	LDI_MSG((_T("[LDI]++LDI_LTP700WV_port_initialize()\n\r")));

	// nReset	: GPN[5]

	// set GPIO Initial Value to High
	g_pGPIOReg->GPNDAT |= (1<<5);	// nReset

	// Pull Up/Down Disable
	g_pGPIOReg->GPNPUD &= ~(0x3<<10);	// nReset

	// Set GPIO direction to output
	g_pGPIOReg->GPNCON = (g_pGPIOReg->GPNCON & ~(0x3<<10)) | (1<<10);	// nReset

	LDI_MSG((_T("[LDI]--LDI_LTP700WV_port_initialize()\n\r")));
}

static void LDI_LTP700WV_reset(void)
{
	LDI_MSG((_T("[LDI]++LDI_LTP700WV_reset()\n\r")));

	// nReset	: GPN[5]

	g_pGPIOReg->GPNDAT |= (1<<5);		// nReset High
	DelayLoop_1ms(10);					// 10 ms

	g_pGPIOReg->GPNDAT &= ~(1<<5);	// nReset Low
	DelayLoop_1ms(10);					// 10 ms

	g_pDispConReg->VIDCON0 |= 0x3;		// VCLK Output enable
	DelayLoop_1ms(100);					// More than 4 frames..

	g_pGPIOReg->GPNDAT |= (1<<5);		// nReset High
	DelayLoop_1ms(10);					// 10 ms

	g_pDispConReg->VIDCON0 &= ~0x3;	// VCLK Output disable

	LDI_MSG((_T("[LDI]--LDI_LTP700WV_reset()\n\r")));
}

static LDI_ERROR LDI_LTP700WV_RGB_initialize(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_LTP700WV_RGB_initialize()\n\r")));

	// There is No Power Sequence for LTP700WV

	LDI_MSG((_T("[LDI]--LDI_LTP700WV_RGB_initialize() : %d\n\r"), error));

	return error;
}



static void LDI_TD043MTEA1_port_initialize(void)
{
	LDI_MSG((_T("[LDI]++LDI_TD043MTEA1_port_initialize()\n\r")));

	// nReset(GREST, STBY)	: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// set GPIO Initial Value to Low
	g_pGPIOReg->GPFDAT &= ~(0x3<<13);	// nReset, LCD_PANNEL_ON

	// Pull Up/Down Disable
	g_pGPIOReg->GPFPUD &= ~(0xf<<26);	// nReset, LCD_PANNEL_ON

	// Set GPIO direction to output
	g_pGPIOReg->GPFCON = (g_pGPIOReg->GPFCON & ~(0xf<<26)) | (5<<26);	// nReset, LCD_PANNEL_ON

	LDI_MSG((_T("[LDI]--LDI_TD043MTEA1_port_initialize()\n\r")));
}

static void LDI_TD043MTEA1_power_on(void)
{
	LDI_MSG((_T("[LDI]++LDI_TD043MTEA1_power_on()\n\r")));

	// nReset(GREST, STBY)	: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// LCD Pannel Power On and nReset
	g_pGPIOReg->GPFDAT &= ~(1<<14);	// nReset Low
	g_pGPIOReg->GPFDAT |= (1<<13);		// LCD_PANNEL_ON High
	DelayLoop_1ms(10);					// 10 ms

	// Release nReset
	g_pGPIOReg->GPFDAT |= (1<<14);		// nReset High
	DelayLoop_1ms(5);					// 5 ms

	LDI_MSG((_T("[LDI]--LDI_TD043MTEA1_power_on()\n\r")));
}

static void LDI_TD043MTEA1_power_off(void)
{
	LDI_MSG((_T("[LDI]++LDI_TD043MTEA1_power_off()\n\r")));

	// nReset(GREST, STBY)	: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// LCD Pannel Power Off
	g_pGPIOReg->GPFDAT &= ~(1<<13);	// LCD_PANNEL_ON Low
	g_pGPIOReg->GPFDAT &= ~(1<<14);	// nReset Low
	DelayLoop_1ms(5);					// 5 ms

	LDI_MSG((_T("[LDI]--LDI_TD043MTEA1_power_off()\n\r")));
}

static LDI_ERROR LDI_TD043MTEA1_RGB_initialize(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_TD043MTEA1_RGB_initialize()\n\r")));

	// TODO: Initialize Pannel with Serial Interface

	LDI_MSG((_T("[LDI]--LDI_TD043MTEA1_RGB_initialize() : %d\n\r"), error));

	return error;
}



static void LDI_SMRP_LTE480WV_RGB_port_initialize(void)
{
	LDI_MSG((_T("[LDI]++LDI_SMRP_LTE480WV_RGB_port_initialize()\n\r")));

	// PCI					: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// set GPIO Initial Value to Low
	g_pGPIOReg->GPFDAT &= ~(0x3<<13);	// PCI, LCD_PANNEL_ON

	// Pull Up/Down Disable
	g_pGPIOReg->GPFPUD &= ~(0xf<<26);	// PCI, LCD_PANNEL_ON

	// Set GPIO direction to output
	g_pGPIOReg->GPFCON = (g_pGPIOReg->GPFCON & ~(0xf<<26)) | (5<<26);	// PCI, LCD_PANNEL_ON

	LDI_MSG((_T("[LDI]--LDI_SMRP_LTE480WV_RGB_port_initialize()\n\r")));
}

static LDI_ERROR LDI_SMRP_LTE480WV_RGB_power_on(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_SMRP_LTE480WV_RGB_power_on()\n\r")));

	// PCI					: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// Envid Disable
	g_pDispConReg->VIDCON0 &= ~0x3;	//~(ENVID_ENABLE | ENVID_F_ENABLE);	// Direct Off

	// LCD Pannel Power On
	g_pGPIOReg->GPFDAT &= ~(1<<14);	// PCI Low
	g_pGPIOReg->GPFDAT |= (1<<13);		// LCD_PANNEL_ON High
	DelayLoop_1ms(10);					// tp-sig > 10 ms

	// Envid Enable (Start output through RGB I/F)
	g_pDispConReg->VIDCON0 |= 0x3;		//(ENVID_ENABLE | ENVID_F_ENABLE);
	DelayLoop_1ms(20);					// tvsync-don > 1 frame (16.7 ms)

	// Set PCI to High
	g_pGPIOReg->GPFDAT |= (0x1<<14);	// PCI

	LDI_MSG((_T("[LDI]--LDI_SMRP_LTE480WV_RGB_power_on() : %d\n\r"), error));

	return error;
}

static LDI_ERROR LDI_SMRP_LTE480WV_RGB_power_off(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_SMRP_LTE480WV_RGB_power_off()\n\r")));

	// PCI					: GPF[14]
	// LCD_PANNEL_ON		: GPF[13]

	// Set PCI to Low
	g_pGPIOReg->GPFDAT &= ~(0x1<<14);	// PCI
	DelayLoop_1ms(40);					// twht1 > 2 frame (33.3 ms)
	DelayLoop_1ms(20);					// tpoff > 1 frame (16.7 ms)

	// Envid Disable
	g_pDispConReg->VIDCON0 &= ~(0x1);	//~(ENVID_F_ENABLE);	// Per Frame Off
	DelayLoop_1ms(20);					// Wait for frame finished (16.7 ms)
	DelayLoop_1ms(10);					// tsig0ff-vdd > 10 ms

	// LCD Pannel Power Off
	g_pGPIOReg->GPFDAT &= ~(1<<13);	// LCD_PANNEL_ON High

	LDI_MSG((_T("[LDI]--LDI_SMRP_LTE480WV_RGB_power_off() : %d\n\r"), error));

	return error;
}

static LDI_ERROR LDI_SMRP_LTE480WV_RGB_initialize(void)
{
	LDI_ERROR error = LDI_SUCCESS;

	LDI_MSG((_T("[LDI]++LDI_SMRP_LTE480WV_RGB_initialize()\n\r")));

	// There is No Power Sequence for LTP480WV

	LDI_MSG((_T("[LDI]--LDI_SMRP_LTE480WV_RGB_initialize() : %d\n\r"), error));

	return error;
}



static void LDI_LTS222QV_write(unsigned int address, unsigned int data)
{
	int j;

	//LDI_MSG((_T("[LDI]++LDI_LTS222QV_write(0x%08x, 0x%08x)\n\r"), address, data));

	LCD_CLK_Hi;
	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);

	g_pDispConReg->SIFCCON0 = 0x11;	// RS:LO nCS:LO nOE:HI nWE:HI, Manual
	g_pDispConReg->SIFCCON0 = 0x13;	// RS:LO nCS:LO nOE:HI nWE:LO, Manual
	DelayLoop(SPI_DELAY);

	for (j = 7; j >= 0; j--)
	{
		LCD_CLK_Lo;

		if ((address >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);
	}

	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);

	g_pDispConReg->SIFCCON0 = 0x11;	// RS:LO nCS:LO nOE:HI nWE:HI, Manual
	g_pDispConReg->SIFCCON0 = 0x01;	// RS:LO nCS:HI nOE:HI nWE:HI, Manual
	DelayLoop(SPI_DELAY);

	g_pDispConReg->SIFCCON0 = 0x11;	// RS:LO nCS:LO nOE:HI nWE:HI, Manual
	g_pDispConReg->SIFCCON0 = 0x13;	// RS:LO nCS:LO nOE:HI nWE:LO, Manual
	DelayLoop(SPI_DELAY);

	for (j = 7; j >= 0; j--)
	{
		LCD_CLK_Lo;							//	SCL Low

		if ((data >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);
	}

	g_pDispConReg->SIFCCON0 = 0x11;	// RS:LO nCS:LO nOE:HI nWE:HI, Manual
	g_pDispConReg->SIFCCON0 = 0x01;	// RS:LO nCS:HI nOE:HI nWE:HI, Manual
	DelayLoop(SPI_DELAY);

	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);

	//LDI_MSG((_T("[LDI]--LDI_LTS222QV_write()\n\r")));
}

static void LDI_LTV350QV_write(unsigned int address, unsigned int data)
{
	unsigned char dev_id_code = 0x1D;
	int j;

	//LDI_MSG((_T("[LDI]++LDI_LTV350QV_write(0x%08x, 0x%08x)\n\r"), address, data));

	LCD_nSS_Hi; 		//	EN = High					CS high
	LCD_CLK_Hi;							//	SCL High
	LCD_MOSI_Hi;							//	Data Low

	DelayLoop(SPI_DELAY);

	LCD_nSS_Lo; 		//	EN = Low				CS Low
	DelayLoop(SPI_DELAY);

	for (j = 5; j >= 0; j--)
	{
		LCD_CLK_Lo;							//	SCL Low

		if ((dev_id_code >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);

	}

	// RS = "0" : index data
	LCD_CLK_Lo;			// CLOCK = Low
	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);
	LCD_CLK_Hi;			// CLOCK = High
	DelayLoop(SPI_DELAY);

	// Write
	LCD_CLK_Lo;			// CLOCK = Low
	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);
	LCD_CLK_Hi;			// CLOCK = High
	DelayLoop(SPI_DELAY);

	for (j = 15; j >= 0; j--)
	{
		LCD_CLK_Lo;							//	SCL Low

		if ((address >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);

	}

	LCD_MOSI_Hi;
	DelayLoop(SPI_DELAY);

	LCD_nSS_Hi; 				// EN = High
	DelayLoop(SPI_DELAY*10);

	LCD_nSS_Lo; 		//	EN = Low				CS Low
	DelayLoop(SPI_DELAY);

	for (j = 5; j >= 0; j--)
	{
		LCD_CLK_Lo;							//	SCL Low

		if ((dev_id_code >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);

	}

	// RS = "1" instruction data
	LCD_CLK_Lo;			// CLOCK = Low
	LCD_MOSI_Hi;
	DelayLoop(SPI_DELAY);
	LCD_CLK_Hi;			// CLOCK = High
	DelayLoop(SPI_DELAY);

	// Write
	LCD_CLK_Lo;			// CLOCK = Low
	LCD_MOSI_Lo;
	DelayLoop(SPI_DELAY);
	LCD_CLK_Hi;			// CLOCK = High
	DelayLoop(SPI_DELAY);

	for (j = 15; j >= 0; j--)
	{
		LCD_CLK_Lo;							//	SCL Low

		if ((data >> j) & 0x0001)	// DATA HIGH or LOW
		{
			LCD_MOSI_Hi;
		}
		else
		{
			LCD_MOSI_Lo;
		}

		DelayLoop(SPI_DELAY);

		LCD_CLK_Hi;			// CLOCK = High
		DelayLoop(SPI_DELAY);

	}

	LCD_nSS_Hi; 				// EN = High
	DelayLoop(SPI_DELAY);

	//LDI_MSG((_T("[LDI]--LDI_LTV350QV_write()\n\r")));
}

static void DelayLoop_1ms(int msec)
{
	volatile int j;
	for(j = 0; j < LCD_DELAY_1MS*msec; j++)  ;
}

static void DelayLoop(int delay)
{
	volatile int j;
	for(j = 0; j < delay; j++)  ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -