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

📄 lcdctl.c

📁 s3c2440的LCD控制器驱动程序 ps 无操作系统的情况
💻 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 + -