?? w_driver.c
字號:
#define _W_DRIVER_C_
#include "W_Driver.h"
#if defined _LCD_INDIRECT_WRITE_
static void LcdIndirectWriteData(UINT16 u16Param)
{
data_write(MLCDCMD1, u16Param);
data_write(MLCDCNT, 0x0093);
wait(10);
// aDSC_GIO_Write(BU15xx_GIO6, HIGH);
// aDSC_GIO_Write(BU15xx_GIO6, LOW);
}
static void LcdIndirectWriteCmd(UINT16 u16Param)
{
data_write(MLCDCMD1, u16Param);
data_write(MLCDCNT, 0x0091);
wait(10);
// aDSC_GIO_Write(BU15xx_GIO6, HIGH);
// aDSC_GIO_Write(BU15xx_GIO6, LOW);
}
#endif //#if defined _LCD_INDIRECT_WRITE_
void BU15xx_GIO_Write(UINT8 u8GioIndex, UINT8 u8Bit)
{
bit_write(GIOCNT, 0x1<<u8GioIndex, LOW);
bit_write(GIOOUT, 0x1<<u8GioIndex, u8Bit);
}
void sensor_init(void)
{
UINT16 i, u16NumSequence = 0;
UINT16 u16HalfDeviceID;
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x000f);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
u16NumSequence = sizeof(tSensor) / sizeof(t_SensorParam);
#if defined CSV1061_SENSOR
u16HalfDeviceID = 0x11;
cam_if_set(0x0602);
aDSC_GIO_Write(BU15xx_GIO2, HIGH);
wait(5);
#elif defined OV7648_SENSOR
u16HalfDeviceID = 0x21;
cam_if_set(0x0602);
#elif defined OV7660_SENSOR
u16HalfDeviceID = 0x21;
cam_if_set(0x0200);
bit_write(GIOOUT,0x0004,LOW); wait(5);
bit_write(GIOOUT,0x0004,HIGH); wait(5);
bit_write(GIOOUT,0x0004,LOW); wait(5);
// BU15xx_I2C_Dummy_Set(u16HalfDeviceID<<1,0x12,0x00);
#elif defined MT9V111_SENSOR
u16HalfDeviceID = 0x5c;
cam_if_set(0x0602);
// data_write(GIOOUT, 0x007b); //standy off
wait(100); //wait sensor reset
#elif defined CSV1411_SENSOR
u16HalfDeviceID = 0x6e;
cam_if_set(0x0602);
aDSC_GIO_Write(BU15xx_GIO2, HIGH);
wait(5);
aDSC_GIO_Write(BU15xx_GIO2, LOW);
wait(5);
aDSC_GIO_Write(BU15xx_GIO2, HIGH);
wait(5);
#elif defined S5K53BEA_SENSOR
u16HalfDeviceID = 0x2D;
cam_if_set(0x0600);
aDSC_GIO_Write(BU15xx_GIO0, HIGH); //reset
wait(5);
aDSC_GIO_Write(BU15xx_GIO0, LOW);
wait(5);
aDSC_GIO_Write(BU15xx_GIO0, HIGH);
wait(5);
aDSC_GIO_Write(BU15xx_GIO3, HIGH); //standby off
wait(5);
#endif
for (i = 0; i < u16NumSequence; i++)
{
aDSC_i2c_set(sDEV_7BIT, u16HalfDeviceID, tSensor[i].u8RegAddr,
tSensor[i].u8RegData, 0x0f, sSERI_WRITE);
wait(tSensor[i].u16WaitTime);
}
bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
clk_div1_set(0x0000);
bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
}
void mainlcd_init(void)
{
UINT16 i;
UINT16 u16NumSequence = sizeof(tLcd) / sizeof(t_LcdInitParam);
hostcnt_write(sDIRECT_ACS | sDIRECT_ENABLE | HOST_TYPE);
aDSC_lcdaccess_set(sMAIN_ACS);
#if defined _LCD_INDIRECT_WRITE_
{
UINT16 u16RegBack1, u16RegBack2, u16RegBack3;
u16RegBack1 = data_read(HWMODE);
u16RegBack2 = data_read(MLCDCNT);
u16RegBack3 = data_read(MLCDCMD1);
hostcnt_write(sBU15XX_ACS | sDIRECT_DISABLE | HOST_TYPE);
mode_change(sREADY);
mode_change(sLCDMANUAL);
for (i = 0; i < u16NumSequence; i++)
{
if (tLcd[i].u16DataType == CMD)
LcdIndirectWriteCmd(tLcd[i].u16Data);
else if (tLcd[i].u16DataType == PDAT)
LcdIndirectWriteData(tLcd[i].u16Data);
wait(tLcd[i].u16WaitTime);
}
column_page_set(0, M_LCD_WSIZE - 1, 0, M_LCD_HSIZE - 1);
LcdIndirectWriteCmd(M_CMD_DATA1);
data_write(MLCDCMD1, 0xe07f);
clk_cnt_set(sGIO6_ENABLE | sVDEDG_UP | sVD | sLCDFR_ENABLE | sSCK_ENABLE | sCMCK_ENABLE); //LCDFR,SCLK,CAMCKO Enable
aDSC_GIO_Write(BU15xx_GIO6, LOW);
for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE; i++)
{
//LcdIndirectWriteData(0xe07f);
data_write(MLCDCNT, 0x0093);
bit_write(GIOOUT, 0x1 << BU15xx_GIO6, HIGH);
bit_write(GIOOUT, 0x1 << BU15xx_GIO6, LOW);
}
mode_change(sREADY);
data_write(HWMODE, u16RegBack1);
data_write(MLCDCNT, u16RegBack2);
data_write(MLCDCMD1, u16RegBack3);
}
#else //defined _LCD_INDIRECT_WRITE_
#if defined LCDBUS_9BIT
for (i = 0; i < u16NumSequence; i++)
{
reg_write(tLcd[i].u16DataType, (tLcd[i].u16Data&0xFE00)>>9);
reg_write(tLcd[i].u16DataType, tLcd[i].u16Data&0x01FF);
wait(tLcd[i].u16WaitTime);
}
reg_write(CMD, (0x21&0xFE00)>>9);
reg_write(CMD, 0x21&0x01FF);
reg_write(PDAT, 0x0);
reg_write(PDAT, 0x0);
reg_write(CMD, (0x16&0xFE00)>>9);
reg_write(CMD, 0x16&0x01FF);
reg_write(PDAT, (((M_LCD_WSIZE - 1) << 8)&0xFE00)>>9);
reg_write(PDAT, ((M_LCD_WSIZE - 1) << 8)&0x01FF);
reg_write(CMD, (0x17&0xFE00)>>9);
reg_write(CMD, 0x17&0x01FF);
reg_write(PDAT, (((M_LCD_HSIZE - 1) << 8)&0xFE00)>>9);
reg_write(PDAT, ((M_LCD_HSIZE - 1) << 8)&0x01FF);
reg_write(CMD, (0x0022&0xFE00)>>9);
reg_write(CMD, 0x0022&0x01FF);
for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++)
{
reg_write(PDAT, (0xf000&0xFE00)>>9);
reg_write(PDAT, 0xf000&0x01FF);
}
for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++)
{
reg_write(PDAT, (0x00f&0xFE00)>>9);
reg_write(PDAT, 0x00f&0x01FF);
}
#else //defined LCDBUS_9BIT
for (i = 0; i < u16NumSequence; i++)
{
reg_write(tLcd[i].u16DataType, tLcd[i].u16Data);
wait(tLcd[i].u16WaitTime);
}
column_page_set(0, M_LCD_WSIZE - 1, 0, M_LCD_HSIZE - 1);
reg_write(CMD, M_CMD_DATA1); //Display RAM write command
for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++)
{
reg_write(PDAT, 0xf000);
}
for (i = 0; i < M_LCD_WSIZE * M_LCD_HSIZE/2; i++)
{
reg_write(PDAT, 0x00f);
}
#endif //defined LCDBUS_9BIT
#endif //defined _LCD_INDIRECT_WRITE_
}
void sublcd_init(void)
{
UINT16 i;
UINT16 u16NumSequence = sizeof(tLcd) / sizeof(t_LcdInitParam);
aDSC_lcdaccess_set(sSUB_ACS);
#if defined _LCD_INDIRECT_WRITE_
{
UINT16 u16RegBack1, u16RegBack2, u16RegBack3;
u16RegBack1 = data_read(HWMODE);
u16RegBack2 = data_read(MLCDCNT);
u16RegBack3 = data_read(MLCDCMD1);
hostcnt_write(sBU15XX_ACS | sDIRECT_DISABLE | HOST_TYPE);
mode_change(sREADY);
mode_change(sLCDMANUAL);
for (i = 0; i < u16NumSequence; i++)
{
if (tLcd[i].u16DataType == CMD)
LcdIndirectWriteCmd(tLcd[i].u16Data);
else if (tLcd[i].u16DataType == PDAT)
LcdIndirectWriteData(tLcd[i].u16Data);
wait(tLcd[i].u16WaitTime);
}
column_page_set(0, S_LCD_WSIZE - 1, 0, S_LCD_HSIZE - 1);
LcdIndirectWriteCmd(S_CMD_DATA1);
data_write(MLCDCMD1, 0xe07f);
clk_cnt_set(sGIO6_ENABLE | sVDEDG_UP | sVD | sLCDFR_ENABLE | sSCK_ENABLE | sCMCK_ENABLE); //LCDFR,SCLK,CAMCKO Enable
aDSC_GIO_Write(BU15xx_GIO6, LOW);
for (i = 0; i < S_LCD_WSIZE * S_LCD_HSIZE; i++)
{
//LcdIndirectWriteData(0xe07f);
data_write(MLCDCNT, 0x0093);
bit_write(GIOOUT, 0x1 << BU15xx_GIO6, HIGH);
bit_write(GIOOUT, 0x1 << BU15xx_GIO6, LOW);
}
mode_change(sREADY);
data_write(HWMODE, u16RegBack1);
data_write(MLCDCNT, u16RegBack2);
data_write(MLCDCMD1, u16RegBack3);
}
#else //defined _LCD_INDIRECT_WRITE_
for (i = 0; i < u16NumSequence; i++)
{
reg_write(tLcd[i].u16DataType, tLcd[i].u16Data);
wait(tLcd[i].u16WaitTime);
}
column_page_set(0, S_LCD_WSIZE - 1, 0, S_LCD_HSIZE - 1);
reg_write(CMD, S_CMD_DATA1); //Display RAM write command
for (i = 0; i < S_LCD_WSIZE * S_LCD_HSIZE; i++)
{
reg_write(PDAT, 0x0000);
}
#endif //defined _LCD_INDIRECT_WRITE_
}
void MainLcdAreaPosSet(UINT16 u16HoriStart, UINT16 u16HoriEnd,
UINT16 u16VertStart, UINT16 u16VertEnd)
{
#if defined _LCD_INDIRECT_WRITE_
UINT16 u16RegBack1, u16RegBack2, u16RegBack3;
u16RegBack1 = data_read(HWMODE);
u16RegBack2 = data_read(MLCDCNT);
u16RegBack3 = data_read(MLCDCMD1);
hostcnt_write(sBU15XX_ACS | sDIRECT_DISABLE | HOST_TYPE);
mode_change(sREADY);
mode_change(sLCDMANUAL);
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A)
LcdIndirectWriteCmd(0x0200 | u16HoriStart);
LcdIndirectWriteCmd(0x0300 | u16VertStart);
LcdIndirectWriteCmd(0x0400 | u16HoriEnd);
LcdIndirectWriteCmd(0x0500 | u16VertEnd);
#elif defined NEC_502i
LcdIndirectWriteCmd(0x21);
LcdIndirectWriteData((u16VertStart << 8) | (u16HoriStart + MLCD_START_H));
LcdIndirectWriteCmd(0x34);
LcdIndirectWriteData(((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H));
LcdIndirectWriteCmd(0x35);
LcdIndirectWriteData((u16VertEnd << 8) | u16VertStart);
#elif defined HD66777_LCD
LcdIndirectWriteCmd(0x0050);
LcdIndirectWriteData(u16HoriStart);
LcdIndirectWriteCmd(0x0051);
LcdIndirectWriteData(u16HoriEnd);
LcdIndirectWriteCmd(0x0052);
LcdIndirectWriteData(u16VertStart);
LcdIndirectWriteCmd(0x0053);
LcdIndirectWriteData(u16VertEnd);
LcdIndirectWriteCmd(0x0020);
LcdIndirectWriteData(u16HoriEnd);
LcdIndirectWriteCmd(0x0021);
LcdIndirectWriteData(u16VertStart);
#elif defined HD66773_LCD
#elif (defined S6B33B3A) || (defined S6B33B2)
#endif //select LCD
mode_change(sREADY);
data_write(HWMODE, u16RegBack1);
data_write(MLCDCNT, u16RegBack2);
data_write(MLCDCMD1, u16RegBack3);
#else //defined _LCD_INDIRECT_WRITE_
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A)
reg_write(CMD, 0x0200 | u16HoriStart);
reg_write(CMD, 0x0300 | u16VertStart);
reg_write(CMD, 0x0400 | u16HoriEnd);
reg_write(CMD, 0x0500 | u16VertEnd);
#elif defined NEC_502i
reg_write(CMD, 0x21);
reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x34);
reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x35);
reg_write(PDAT, (u16VertEnd << 8) | u16VertStart);
#elif defined HD66777_LCD
reg_write(CMD, 0x0050);
reg_write(PDAT, u16HoriStart);
reg_write(CMD, 0x0051);
reg_write(PDAT, u16HoriEnd);
reg_write(CMD, 0x0052);
reg_write(PDAT, u16VertStart);
reg_write(CMD, 0x0053);
reg_write(PDAT, u16VertEnd);
reg_write(CMD, 0x0020);
reg_write(PDAT, u16HoriEnd);
reg_write(CMD, 0x0021);
reg_write(PDAT, u16VertStart);
#elif defined HD66773_LCD
reg_write(CMD, 0x21);
reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x16);
reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x17);
reg_write(PDAT, (u16VertEnd << 8) | u16VertStart);
#elif (defined S6B33B3A) || (defined S6B33B2)
reg_write(CMD, 0x43);
reg_write(CMD, u16HoriStart+MLCD_START_H);
reg_write(CMD, u16HoriEnd+MLCD_START_H);
reg_write(CMD, 0x42);
reg_write(CMD, u16VertStart+MLCD_START_V);
reg_write(CMD, u16VertEnd+MLCD_START_V);
#endif //select LCD
#endif //defined _LCD_INDIRECT_WRITE_
}
void SubLcdAreaPosSet(UINT16 u16HoriStart, UINT16 u16HoriEnd,
UINT16 u16VertStart, UINT16 u16VertEnd)
{
#if (defined TMD_LTM022A05D) || (defined TMD_LTM018A02A)
reg_write(CMD, 0x0200 | u16HoriStart);
reg_write(CMD, 0x0300 | u16VertStart);
reg_write(CMD, 0x0400 | u16HoriEnd);
reg_write(CMD, 0x0500 | u16VertEnd);
#elif defined NEC_502i
reg_write(CMD, 0x21);
reg_write(PDAT, (u16VertStart << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x34); // ***** SD_CSET *****
reg_write(PDAT, ((u16HoriEnd + MLCD_START_H) << 8) | (u16HoriStart + MLCD_START_H));
reg_write(CMD, 0x35); // ***** SD_PSET *****
reg_write(PDAT, (u16VertEnd << 8) | u16VertStart); // P1L
#elif defined HD66777_LCD
reg_write(CMD, 0x0050);
reg_write(PDAT, u16HoriStart);
reg_write(CMD, 0x0051);
reg_write(PDAT, u16HoriEnd);
reg_write(CMD, 0x0052);
reg_write(PDAT, u16VertStart);
reg_write(CMD, 0x0053);
reg_write(PDAT, u16VertEnd);
reg_write(CMD, 0x0020);
reg_write(PDAT, u16HoriEnd);
reg_write(CMD, 0x0021);
reg_write(PDAT, u16VertStart);
#elif defined HD66773_LCD
#elif (defined S6B33B3A) || (defined S6B33B2)
#endif //select LCD
}
#undef _W_DRIVER_C_
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -