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

📄 lcd.c

📁 MTK平台的多种LCD驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
   LCD_DataWrite_D15G17E(end_column);
}

/****************************************************************************
	FUNCTION NAME		: PWM2_level

  	PURPOSE			: This function is to setup backlight power level.

	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_blockClear_D15G17E(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_uint16 data)
{
	kal_uint16 LCD_x;
	kal_uint16 LCD_y;
	
	LCD_Set_Y_Addr_D15G17E(y1, y2);
	LCD_Set_X_Addr_D15G17E(x1, x2);
	LCD_CtrlWrite_D15G17E(LCD_RAM_WRITE_D15G17E);
	
	for(LCD_x=x1;LCD_x<=x2;LCD_x++)
	   for(LCD_y=y1;LCD_y<=y2;LCD_y++)
	      LCD_RAMWrite_D15G17E(data);
}

void LCD_ClearAll_D15G17E(kal_uint16 data)
{
	LCD_blockClear_D15G17E(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1, data);      
}


/* EPSON D15G17E ***********************************************************/
/* 128x128(65K), Parallel i/o, COG Type                                    */
/***************************************************************************/

/*********************/
/* LCD-MMI Interface */
/*********************/

/****************************************************************************
	FUNCTION NAME		: LCD_Init

  	PURPOSE			: This function is to initialize Main LCD.

	INPUT PARAMETERS	: kal_uint32, void

	OUTPUT PARAMETERS	: void
*****************************************************************************/
void LCD_Init_D15G17E(kal_uint32 bkground, void **buf_addr)
{
      kal_uint16 background = (kal_uint16)bkground;
      volatile kal_uint8 i;
      
      //*EMI_CON3 = 0xE607;
      
      for(i=0;i<=4;i++){
 	     LCD_CtrlWrite_D15G17E(0x00);		// NOP
      }
      LCD_Delay(100);
      /* Software Reset */
      LCD_CtrlWrite_D15G17E(LCD_SW_RESET_D15G17E);		// 0x01
      LCD_Delay(100);
      for(i=0;i<=4;i++){
 	     LCD_CtrlWrite_D15G17E(0x00);		// NOP
      }
            
      /* Display Control */
      LCD_CtrlWrite_D15G17E(LCD_DISPLAY_CTRL_SET_D15G17E);	// 0xB6
      LCD_DataWrite_D15G17E(0x4A)	// 0x4A
      LCD_DataWrite_D15G17E(0x18);	// N-line inversion 2~132 0x02~0x84
      LCD_DataWrite_D15G17E(0x04);	// b7: 0 no division osc. freq., 1 Fosc/2
      LCD_DataWrite_D15G17E(0x86);	// duty
      LCD_DataWrite_D15G17E(0x84);	// display line
      
      LCD_Delay(100);
      /* Driver Position */
      LCD_CtrlWrite_D15G17E(0xBB);
      LCD_DataWrite_D15G17E(0x04);	// 0x04
      
      /* Power Control */
      LCD_CtrlWrite_D15G17E(0xBE);
      LCD_DataWrite_D15G17E(0x4D);
      LCD_DataWrite_D15G17E(0x01);
      
      /* Voltage Control */
      LCD_CtrlWrite_D15G17E(0xBA);
      LCD_DataWrite_D15G17E(0x46);
      LCD_DataWrite_D15G17E(0x46);
      
      /* Set Contrast */
      LCD_CtrlWrite_D15G17E(LCD_CONTRAST_SET_D15G17E);	// 0x25
      LCD_DataWrite_D15G17E(0x48); //contrast 0x48
      
      LCD_Delay(100);      
      LCD_Delay(100);
      
      /* Normal Display On */
      LCD_CtrlWrite_D15G17E(0x13);
      
      /* Interface Pixel Format */
      LCD_CtrlWrite_D15G17E(0x3A);
      LCD_DataWrite_D15G17E(0x05);	// 16bits/pixel, 65K color
      
      /* Memery Access Control */
      LCD_CtrlWrite_D15G17E(0x36);
      #ifdef __GD85_TCL_DRV_LCD_D15G17E_EPSON_2__
           LCD_DataWrite_D15G17E(0x48);	/* RGB 0x00 BGR 0x08 */
      #else	/* !EPSON_1 */
           LCD_DataWrite_D15G17E(0x88);	/* RGB 0x00 BGR 0x08 */
      #endif	/* EPSON_2 */
      
      
      /* Page Address Set */
      LCD_CtrlWrite_D15G17E(LCD_PAGE_ADDRESS_SET_D15G17E);	// 0x2B
      LCD_DataWrite_D15G17E(0x00);	// Start
      LCD_DataWrite_D15G17E(0x7F);	// End
      
      /* Column Address Set */
      LCD_CtrlWrite_D15G17E(LCD_COLUMN_ADDRESS_SET_D15G17E); 	// 0x2A
      LCD_DataWrite_D15G17E(0x00);	// Start
      LCD_DataWrite_D15G17E(0x7F);	// End

      LCD_Delay(100);	// Wait
      
      /* EXIT Sleep Mode */
      LCD_CtrlWrite_D15G17E(LCD_EXIT_SLEEP_D15G17E);	// 0x11
      
      LCD_blockClear_D15G17E(0+2, 2, LCD_WIDTH-1+2, LCD_HEIGHT+1, background);
      /* Display On */
      LCD_CtrlWrite_D15G17E(LCD_DISPLAY_ON_D15G17E);	// 0x29
      
      /* No Operation */
      LCD_CtrlWrite_D15G17E(LCD_NOP_D15G17E);		// 0xAA
      LCD_Delay(100);
      
            
}

/****************************************************************************
	FUNCTION NAME		: LCD_EnterSleep

  	PURPOSE			: This function is to make LCD enter sleep mode.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_EnterSleep_D15G17E(void)
{
  // LCD_CtrlWrite_D15G17E(LCD_ENTER_SLEEP_D15G17E);
     LCD_CtrlWrite_D15G17E(LCD_DISPLAY_OFF_D15G17E); 
}

/****************************************************************************
	FUNCTION NAME		: LCD_ExitSleep

  	PURPOSE			: This function is to make LCD exit sleep mode.

	INPUT PARAMETERS	: void

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_ExitSleep_D15G17E(void)
{
  // LCD_CtrlWrite_D15G17E(LCD_EXIT_SLEEP_D15G17E);
   LCD_CtrlWrite_D15G17E(LCD_DISPLAY_ON_D15G17E);
   
}

/****************************************************************************
	FUNCTION NAME		: LCD_PWRON

  	PURPOSE			: This function is to power on/off LCD.

	INPUT PARAMETERS	: kal_bool

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_PWRON_D15G17E(kal_bool on)
{
   if(on)
   {
      LCD_ExitSleep_D15G17E();
   }
   else
   {
      LCD_EnterSleep_D15G17E();
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_SetContrast

  	PURPOSE			: This function is to set LCD contrast.

	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_SetContrast_D15G17E(kal_uint8 voltage)
{
	if (voltage > 127)
	voltage = 127;
	LCD_CtrlWrite_D15G17E(LCD_CONTRAST_SET_D15G17E);
	LCD_DataWrite_D15G17E(voltage);
}

/****************************************************************************
	FUNCTION NAME		: LCD_ON

  	PURPOSE			: This function is to turn on/off LCD panel.

	INPUT PARAMETERS	: kal_bool

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_ON_D15G17E(kal_bool on)
{
   if (on)
   {
      LCD_CtrlWrite_D15G17E(LCD_DISPLAY_ON_D15G17E);
   }
   else
   {
      LCD_CtrlWrite_D15G17E(LCD_DISPLAY_OFF_D15G17E);
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_BlockWrite

  	PURPOSE			: This function is to

	INPUT PARAMETERS	: kal_uint16(startx, starty, endx, endy)

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_BlockWrite_D15G17E(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy)
{
   kal_uint16 l_startx=startx+2, l_starty=starty+2, l_endx=endx+2, l_endy=endy+2;

   #if ( (defined(MT6205B)) || (defined(MT6218)) )
      #ifndef LCD_DMAENABLE
         kal_uint16 x, y;
      #else	/* !LCD_DMAENABLE */
         kal_uint32 addr;
      #endif	/* LCD_DMAENABLE */
   #endif	/* (defined(MT6205B)) || (defined(MT6218)) */

   #if ( (defined(MT6205)) || (defined(MT6208)) || (defined(FPGA)) )
      kal_uint16 x, y;
   #endif	/* (MT6205, MT6208, FPGA) */

   ASSERT(lcd_assert_fail==KAL_FALSE);
   lcd_assert_fail = KAL_TRUE;

   LCD_Set_X_Addr_D15G17E(l_startx, l_endx);
   LCD_Set_Y_Addr_D15G17E(l_starty, l_endy);
   LCD_CtrlWrite_D15G17E(LCD_RAM_WRITE_D15G17E);
   
   #if ( (defined(MT6205B)) || (defined(MT6218)) )
   
   addr=get_lcd_frame_buffer_address();
   
      #ifdef LCD_DMAENABLE
         ASSERT(DRV_Reg(LCD_REFR)==0x00);
         addr += ((starty*LCD_WIDTH+startx)<<1);
         
         #ifdef MT6218
            DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(addr >> 16));
         #else	/* MT6218 */
            DRV_WriteReg(LCD_MSBSRC,(kal_uint16)((addr >> 16)|0x0080));
         #endif	/* !MT6218 */
      
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)addr);
         DRV_WriteReg(LCD_REFR,0x0000);
         DRV_WriteReg(LCD_MSBDST, (kal_uint16)(LCD_DATAAddr >> 16));
         DRV_WriteReg(LCD_LSBDST, (kal_uint16)(LCD_DATAAddr));
         DRV_WriteReg(LCD_CADDRSET, (kal_uint16)((endx - startx + 1)*2));
         DRV_WriteReg(LCD_PADDRSET, (kal_uint16)(endy - starty + 1));
         DRV_WriteReg(LCD_CHOP,(kal_uint16)((LCD_WIDTH - (endx - startx + 1))*2));

         /* 8 bit bus */
         DRV_WriteReg(LCD_PCON, (0x0000));
         DRV_WriteReg(LCD_START, LCD_START_BIT);
      
         while(DRV_Reg(LCD_GSTA) & LCD_GSTA_PRUN);
            DRV_WriteReg(LCD_START, LCD_STOP_BIT);
            DRV_WriteReg(LCD_PCON, (0x0000));
      #else	/* LCD_DMAENABLE */
         for(y=l_starty;y<=l_endy;y++)
            for(x=l_startx;x<=l_endx;x++)
            {
            	LCD_RAMWrite_D15G17E((kal_uint16)lcd_shadow_buffer[y][x]);
   	    }
      #endif	/* !LCD_DMAENABLE */
   #endif	/* (defined(MT6205B)) || (defined(MT6218)) */

   #if (defined(MT6218B)||defined(MT6219)|| defined(MT6217)) //20050413 yguangyong added 6217 option
		#ifdef LCD_CMD_DMA_MODE

		#else			

			ENABLE_LCD_TRANSFER_COMPLETE_INT;
			DISABLE_LCD_ROI_CTRL_CMD_FIRST;
			while (LCD_IS_RUNNING) {};
				START_LCD_TRANSFER;
		#endif
   #endif /* MT6218B, MT6219 */
   lcd_assert_fail = KAL_FALSE;
}

/****************************************************************************
	FUNCTION NAME		: LCD_Size_ST7565

  	PURPOSE			: This function is to set Sub_LCD width and height.

	INPUT PARAMETERS	: kal_uint16(width, height)

	OUTPUT PARAMETERS	: void
	
*****************************************************************************/

void LCD_Size_D15G17E(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
	*out_LCD_width = LCD_WIDTH;
	*out_LCD_height = LCD_HEIGHT;
}

/* Engineering mode */

/****************************************************************************
	FUNCTION NAME		: LCD_GetParm

  	PURPOSE			: This function is to obtain the parameter numbers
  				  for engineering mode APIs.

	INPUT PARAMETERS	: lcd_func_type

	OUTPUT PARAMETERS	: kal_uint8
*****************************************************************************/

kal_uint8 LCD_GetParm_D15G17E(lcd_func_type type)
{
   switch(type)
   {
      case lcd_Bais_func:
         return 1;
      case lcd_Contrast_func:
         return 1;
      case lcd_LineRate_func:
         return 1;
      case lcd_Temperature_Compensation_func:
         return 1;
      default:
         ASSERT(0);
         return 100;
   }
}

/****************************************************************************
	FUNCTION NAME		: LCD_SetBias

  	PURPOSE			: This function is to setup LCD bias.

	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_SetBias_D15G17E(kal_uint8 *bias)
{
   LCD_CtrlWrite_D15G17E(LCD_BIAS_SET_D15G17E);
   LCD_DataWrite_D15G17E(*bias);
}

/****************************************************************************
	FUNCTION NAME		: LCD_Contrast

  	PURPOSE			: This function is setup LCD contrast. Basically,
				  it is the same as BrightLevel function.
				  
	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Contrast_D15G17E(kal_uint8 *contrast)
{
	//if (*contrast > 127)
	//*contrast = 127;
	LCD_CtrlWrite_D15G17E(LCD_CONTRAST_SET_D15G17E);
	LCD_DataWrite_D15G17E((*contrast)&0x7F);
}

/****************************************************************************
	FUNCTION NAME		: LCD_LineRate

  	PURPOSE			: This function is to setup LCD frame refresh
  				  rate.

	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_LineRate_D15G17E(kal_uint8 *linerate)
{
   LCD_CtrlWrite_D15G17E(LCD_NLINE_INVERSION_SET_D15G17E);
   LCD_DataWrite_D15G17E(*linerate);
}

/****************************************************************************
	FUNCTION NAME		: LCD_Temp_Compensate

  	PURPOSE			: This function is to setup LCD temperature compensation.

	INPUT PARAMETERS	: kal_uint8

	OUTPUT PARAMETERS	: void
*****************************************************************************/

void LCD_Temp_Compensate_D15G17E(kal_uint8 *compensate)
{
   LCD_CtrlWrite_D15G17E(LCD_TEMP_COMPENSATION_SET_D15G17E);
   LCD_DataWrite_D15G17E(*compensate&0x03);
 
}

LCD_Funcs LCD_func_D15G17E = {
   LCD_Init_D15G17E,
   LCD_PWRON_D15G17E,
   LCD_SetContrast_D15G17E,
   LCD_ON_D15G17E,
   LCD_BlockWrite_D15G17E,
   LCD_Size_D15G17E,
   LCD_EnterSleep_D15G17E,
   LCD_ExitSleep_D15G17E,
   0,
   0,
   0,
   /*Engineering mode*/
   LCD_GetParm_D15G17E,
   LCD_SetBias_D15G17E,
   LCD_Contrast_D15G17E,
   LCD_LineRate_D15G17E,
   LCD_Temp_Compensate_D15G17E
};

#endif //#if ( (defined(__GD85_TCL_DRV_LCD_D15G17E_EPSON_1__)) || (defined(__GD85_TCL_DRV_LCD_D15G17E_EPSON_2__)))







/* SAMSUNG S6B33B0A ***********************************************************/
/* 128x128(65K), Parallel i/o, COG Type                                    */
/***************************************************************************/
#if (defined (__GD85_TCL_DRV_LCD_S6B33B0A_SAMSUNG__))


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -