📄 s3c6410_ldi.c
字号:
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 + -