📄 lcdctl.c
字号:
/******************************************************************
Module: lcdctl.c
Author: MCL
description: the initialization file of lcd controller and lcd duriver
*/
#include "lcdctl.h"
#include <math.h>
void lcdCtlInit(void);
unsigned long lcdCtlRead(void);
void lcdCtlWrite(unsigned long);
void lcdCtlOpen(void);
void lcdCtlClose(void);
void lcdCtlExit(void);
void lcdCtlWriteReg(int iLcdCtlAddr, unsigned long ulData);
unsigned long lcdCtlReadreg(int ilcdCtlAddr);
void lcdDisplayOpen(int);
void lcdCtlDelay(unsigned long delayTime);
void write_pixel(unsigned short *pBufferAdress, int x, int y, unsigned short clolorValue);
void displayMemoryInit(unsigned short colorValue);
void lcdCtlInit(void)
{
unsigned long ulTempData;
/* init LCDCON regs*/
ulTempData=S3C2440_LCDCON1_TFT16BPP|\
S3C2440_LCDCON1_TFT|\
S3C2440_LCDCON1_CLKVAL;
lcdCtlWriteReg((int)LCDCTL_LCDCON1_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDCON2_VBPD(3) |\
S3C2440_LCDCON2_LINEVAL(239) | \
S3C2440_LCDCON2_VFPD(5) |\
S3C2440_LCDCON2_VSPW(15);
lcdCtlWriteReg((int)LCDCTL_LCDCON2_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDCON3_HBPD(5) |\
S3C2440_LCDCON3_HOZVAL(319) |\
S3C2440_LCDCON3_HFPD(15);
lcdCtlWriteReg((int)LCDCTL_LCDCON3_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDCON4_MVAL(13)|
S3C2440_LCDCON4_HSPW(8);
lcdCtlWriteReg((int)LCDCTL_LCDCON4_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDCON5_FRM565 |\
S3C2440_LCDCON5_INVVLINE |\
S3C2440_LCDCON5_INVVFRAME |\
S3C2440_LCDCON5_PWREN |\
S3C2440_LCDCON5_HWSWP;
lcdCtlWriteReg((int)LCDCTL_LCDCON5_ADDR,ulTempData);
lcdCtlDelay(1);
/*config LCDSADDR Regs*/
ulTempData=S3C2440_LCDSADDR1_LCDBANK(S3C2440_FRAME_START_ADDRESS>>22)|\
S3C2440_LCDSADDR1_LCDBASEU(S3C2440_FRAME_START_ADDRESS>>1); /*LCDBANK=FRAME_START_ADRESS>>22*/
lcdCtlWriteReg((int)LCDCTL_LCDSADDR1_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDSADDR2_LCDBASEL; /*LCDBASEL=0X140=320*240*/
lcdCtlWriteReg((int)LCDCTL_LCDSADDR2_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C2440_LCDSADDR3_PAGEWIDTH; /*PAGEWIDTH=320*/
lcdCtlWriteReg((int)LCDCTL_LCDSADDR3_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=lcdCtlReadreg((int)LCDCTL_TCONSEL_ADDR); /*PAGEWIDTH=320*/
ulTempData=0xf80; /*select sync mode*/
lcdCtlWriteReg((int)LCDCTL_TCONSEL_ADDR,ulTempData);
lcdCtlDelay(1);
/*config GPIO Regs*/
ulTempData=S3C20440_GPIO_GPCCON;
lcdCtlWriteReg((int)S3C20440_GPIO_GPCCON_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C20440_GPIO_GPCUP;
lcdCtlWriteReg((int)S3C20440_GPIO_GPCUP_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C20440_GPIO_GPDCON;
lcdCtlWriteReg((int)S3C20440_GPIO_GPDCON_ADDR,ulTempData);
lcdCtlDelay(1);
ulTempData=S3C20440_GPIO_GPDUP;
lcdCtlWriteReg((int)S3C20440_GPIO_GPDUP_ADDR,ulTempData);
lcdCtlDelay(1);
}
/*open the video output*/
void lcdCtlOpen()
{
lcdDisplayOpen(1);
}
/*close the video output*/
void lcdCtlClose()
{
lcdDisplayOpen(0);
}
void lcdCtlWrite(unsigned long pixelData)
{
;
}
unsigned long lcdCtlRead()
{
return 1 ;
}
void lcdCtlExit()
{
/*close the video output*/
lcdDisplayOpen(0);
}
void lcdCtlWriteReg(int iLcdCtlAddr, unsigned long ulData)
{
unsigned int *pLcdCtlAddr;
unsigned long ulTemp;
ulTemp = ulData;
pLcdCtlAddr = ((unsigned int *) iLcdCtlAddr);
*pLcdCtlAddr = ulTemp;
}
unsigned long lcdCtlReadreg (int ilcdCtlAddr)
{
unsigned long ulTemp=0;
ulTemp = *((unsigned int *)ilcdCtlAddr);
return(ulTemp);
}
void lcdDisplayOpen(int videoOpen)
{
unsigned long ulTempData;
ulTempData=lcdCtlReadreg((int)LCDCTL_LCDCON1_ADDR);
if(videoOpen==1)
ulTempData|=0x00000001; /* open lcd video*/
else
ulTempData&=0xfffffffe; /* close lcd video output */
lcdCtlWriteReg((int)LCDCTL_LCDCON1_ADDR,ulTempData);
}
void lcdCtlDelay(unsigned long delayTime) /* delay x ms*/
{
unsigned char i,j,k,uctemp;
uctemp=(unsigned char)10*delayTime;
for(i=uctemp;i>0;i--)
for(j=10;j>0;j--)
for(k=100;k>0;k--);
}
void write_pixel(unsigned short *pBufferAdress, int x, int y, unsigned short clolorValue)
{
unsigned short *pPixelAdress;
if(x<320&&y<240)
{
pPixelAdress=pBufferAdress+(x-1)*320+(y-1);
*pPixelAdress=clolorValue;
}
}
void lcdDrawLine(unsigned short *pBufferAdress, int x, unsigned short clolorValue)
{
unsigned short *pPixelAdress;
int i=0;
for (i=0;i<280;i++)
{
pPixelAdress=pBufferAdress+(x-1)*320+i;
*pPixelAdress=clolorValue;
}
}
unsigned short lcdReadMemory(int memAddr)
{
unsigned short memData;
memData=*(unsigned short*)memAddr;
return memData;
}
void displayMemoryInit(unsigned short colorValue)
{
unsigned short *pLcdBuffer;
int i;
/* init the display memory*/
pLcdBuffer=(unsigned short *)S3C2440_FRAME_START_ADDRESS; /* the base addr of display buffer*/
for(i=0; i<320*240; i++)
*(pLcdBuffer+i)=colorValue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -