s3c6410_ldi.c
来自「6410BSP3」· C语言 代码 · 共 1,274 行 · 第 1/3 页
C
1,274 行
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 LDI_LTM030DK_write(unsigned int address, unsigned int data)
{
int j;
// LDI_MSG((_T("[LDI]++LDI_LTV350QV_write(0x%08x, 0x%08x)\n\r"), address, data));
LCDP_nSS_Hi; // EN = High CS high
LCDP_CLK_Lo; // SCL Low
DelayLoop(10);
LCDP_nSS_Lo; // EN = Low CS Low
DelayLoop(10);
for (j = 7; j >= 0; j--)
{
LCDP_MOSI_Lo;
LCDP_CLK_Lo; // SCL Low
DelayLoop(10);
LCDP_CLK_Hi;
DelayLoop(10);
}
LCDP_CLK_Lo; // CLOCK = Low
DelayLoop(100);
// addr write
for (j = 7; j >= 0; j--)
{
LCDP_CLK_Lo; // SCL Low
if ((address >> j) & 0x0001) // DATA HIGH or LOW
{
LCDP_MOSI_Hi;
}
else
{
LCDP_MOSI_Lo;
}
DelayLoop(10);
LCDP_CLK_Hi; // CLOCK = High
DelayLoop(10);
}
// LCD_nSS_Lo; // EN = Low CS Low
LCDP_CLK_Lo;
DelayLoop(100);
// write operation and data selection
for (j = 6; j >= 0; j--)
{
LCDP_MOSI_Lo;
LCDP_CLK_Lo; // SCL Low
DelayLoop(10);
LCDP_CLK_Hi; // CLOCK = High
DelayLoop(10);
}
// RS = "1" instruction data
LCDP_MOSI_Hi;
LCDP_CLK_Lo; // CLOCK = Low
DelayLoop(10);
LCDP_CLK_Hi; // CLOCK = High
DelayLoop(10);
// Write
LCDP_CLK_Lo; // CLOCK = Low
DelayLoop(100);
// data write
for (j = 7; j >= 0; j--)
{
LCDP_CLK_Lo; // SCL Low
if ((data >> j) & 0x0001) // DATA HIGH or LOW
{
LCDP_MOSI_Hi;
}
else
{
LCDP_MOSI_Lo;
}
DelayLoop(100);
LCDP_CLK_Hi; // CLOCK = High
DelayLoop(10);
}
LCDP_CLK_Lo;
DelayLoop(100);
LCDP_nSS_Hi; // EN = High
DelayLoop(10);
}
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 + =
减小字号Ctrl + -
显示快捷键?