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

📄 hal_lcd.c

📁 一款SmartPhone的驱动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	unsigned short reg=halReadReg16(REG0032_LCD_MODULE_CLOCK);
	if(mode)
		halWriteReg16(REG0032_LCD_MODULE_CLOCK,reg|0x0080);
	else
		halWriteReg16(REG0032_LCD_MODULE_CLOCK,reg&0xFF7F);

}

/****************************************************************************
; Function:	Set the RGB Panel type 	
; Input :	type	
; Output :	None
; Format :	void SetPanelIfType(unsigned short type)
;****************************************************************************/
void SetRGBPanelType(unsigned short type)
{
	unsigned short reg=halReadReg16(REG0032_LCD_MODULE_CLOCK)&0x03FF;
	reg|=((type<<10)&0xFC00);
	halWriteReg16(REG0032_LCD_MODULE_CLOCK,reg);
}

/****************************************************************************
; Function:	Get the RGB Panel type 	
; Input :	None
; output:	type
; Format :	unsigned short GetPanelIfType(void)
;****************************************************************************/
unsigned short GetRGBPanelType(void)
{
	return((halReadReg16(REG0032_LCD_MODULE_CLOCK)>>10)&0x003F);
}

/****************************************************************************
; Function:	Set LCD Horizontal Total and Vertical Total 	
; Input :	Horizontal Total in number of pixels
;		Vertical Total in number of lines
; Output :	None
; Format :	void SetLcdHVTotal (unsigned short HorizTotal,unsigned short VertTotal)
;****************************************************************************/
void SetLcdHVTotal (unsigned short HorizTotal,unsigned short VertTotal)
{
	HorizTotal=(HorizTotal/8-1)&0x007F;
	VertTotal=(VertTotal-1)&0x03FF;

	halWriteReg16(REG0040_LCD1_HORIZONTAL_TOTAL,HorizTotal);
	halWriteReg16(REG004A_LCD1_VERTICAL_TOTAL,VertTotal);
}

/****************************************************************************
; Function:	Set LCD Horizontal and Vertical Display Period start Position     	
; Input :	Horizontal and Vertical Display Period start Position
; Output :	None
; Format :	void SetLcdHVStartPos (unsigned short HPos,unsigned short VPos)
;****************************************************************************/
void SetLcdHVStartPos (unsigned short HPos,unsigned short VPos)
{
	halWriteReg16(REG0044_LCD1_HDP_START_POS,HPos);
	halWriteReg16(REG004E_LCD1_VDP_START_POS,VPos);
}

/****************************************************************************
; Function:	Set LCD FPLINE	
; Input :	FPLine Polarity
;		FPLINE Pulse Width 
;		FPLINE Pulse Position 
; Output :	None
; Format :	void SetLcdFpline(unsigned short FpLinePol,unsigned short FpLineWidth,unsigned short FpLinePos)
;****************************************************************************/
void SetLcdFpline(unsigned short FpLinePol,unsigned short FpLineWidth,unsigned short FpLinePos)
{
	unsigned short reg;

	reg=((FpLinePol<<7)&0x0080)|(FpLineWidth-1);
	halWriteReg16(REG0046_LCD1_FPLINE,reg);
	halWriteReg16(REG0048_LCD1_FPLINE_PULSE_POS,(FpLinePos-1));
}


/****************************************************************************
; Function:	Set LCD FPFrame	
; Input :	FPFrame Polarity
;			FPFrame Pulse Width 
;			FPFrame Pulse Position 
; Output :	None
; Format :	void SetLcdFPFrame(unsigned short FPFramePol,unsigned short FPFrameWidth,unsigned short FPFramePos)
;****************************************************************************/
void SetLcdFPFrame(unsigned short FPFramePol,unsigned short FPFrameWidth,unsigned short FPFramePos)
{
	unsigned short reg;

	reg=((FPFramePol<<7)&0x0080)|(FPFrameWidth-1);
	halWriteReg16(REG0050_LCD1_FPFRAME,reg);
	halWriteReg16(REG0052_LCD1_FPFRAME_PULSE_POS,(FPFramePos));
}

/*********************************** LCD Parallel PANEL SET ***********************************************/
/****************************************************************************
; Function:	Set LCD Parallel Interface mode	
; Input :	MODE -- VSYNC INPUT
;			parallel type
;			parallel data format
;		Lcd Number
; Output :	None
; Format :	void SetLcdParallel(LcdDef LcdNum,unsigned short mode)
;****************************************************************************/
void SetLcdParallelIf(LcdDef LcdNum,unsigned short mode)
{
	switch(LcdNum)
	{
		default:
		case cl_LCD1:
			halWriteReg16(REG0056_LCD1_PARALLEL_INTERFACE,mode);
			break;
		case cl_LCD2:
			halWriteReg16(REG005E_LCD2_PARALLEL_INTERFACE,mode);
			break;
	}
}

/****************************************************************************
; Function:	Set the LCD P/C Polarity 	
; Input :	mode:	0:	Command--Low
;			1:	Command--High	
; Output :	None
; Format :	void SetLCDPCPol(unsigned short mode)
;****************************************************************************/
void SetLCDPCPol(unsigned short mode)
{
	unsigned short reg=halReadReg16(REG003C_LCD_INTERFACE_TRANSFER);
	if(mode)
		halWriteReg16(REG003C_LCD_INTERFACE_TRANSFER,reg|0x0080);
	else
		halWriteReg16(REG003C_LCD_INTERFACE_TRANSFER,reg&0xFF7F);

}

/********************************************************************************
; Function:	LCDC command output
; Input:	OutData
; Output:	None
; Format:	void Write_lcd_com(unsigned short OutData)
;********************************************************************************/
void Write_lcd_com(unsigned short OutData)
{
	unsigned short reg_data;
	//Busy check
	do
	{
		reg_data=halReadReg16(REG0038_LCD_INTERFACE_STATUS);			//[38h]
	}while((reg_data&LCD_IF_BUSY)==LCD_IF_FRAME_TRANSFER);

	
	halWriteReg16(REG0034_LCD_INTERFACE_COMMAND, OutData) ;				//[34h]
}


/********************************************************************************
; Function:	LCDC parameters output
; Input:	OutData
; Output:	None
; Format:	void Write_lcd_param(unsigned short OutData)
;********************************************************************************/
void Write_lcd_param(unsigned short OutData)
{
	unsigned short reg_data;
	
	//Busy check
	do
	{
		reg_data=halReadReg16(REG0038_LCD_INTERFACE_STATUS);			//[38h]
	}while((reg_data&LCD_IF_BUSY)==LCD_IF_FRAME_TRANSFER);

	halWriteReg16(REG0036_LCD_INTERFACE_PARAMETER,OutData) ;	//[36h] 700

	reg_data=0;
}


/********************************************************************************
; Function:	LCDC parameters loop output
; Input:	the pointer of OutData and number 
; Output:	None
; Format:	void Write_lcd_param_loop(unsigned short Datamax, unsigned short *pOutData)
;********************************************************************************/
void Write_lcd_param_loop(unsigned short Datamax, unsigned short *pOutData)
{
	unsigned short i;
	unsigned short reg_data;

	for (i = 0; i < Datamax; i++)
	{
		do
		{
			reg_data=halReadReg16(REG0038_LCD_INTERFACE_STATUS);			//[38h]
		}while((reg_data&LCD_IF_BUSY)==LCD_IF_FRAME_TRANSFER);

		halWriteReg16(REG0036_LCD_INTERFACE_PARAMETER, (unsigned short)*pOutData) ;			//[36h] 700
	
		pOutData++;
	}
}

/****************************************************************************
; Function:	Set the Transfer if Auto   	
; Input :	mode:	1:	Auto Transfer enable
;			0:	Auto Transfer disable
; Output :	None
; Format :	void SetAutoTransferMode(unsigned short mode)
;****************************************************************************/
void SetAutoTransferMode(unsigned short mode)
{
	unsigned short reg=halReadReg16(REG003C_LCD_INTERFACE_TRANSFER);
	if(mode)
		halWriteReg16(REG003C_LCD_INTERFACE_TRANSFER,reg|0x0001);
	else
		halWriteReg16(REG003C_LCD_INTERFACE_TRANSFER,reg&0xFFFE);
}

/****************************************************************************
; Function:	Trigger one frame transfer   	
; Input :	None
; Output :	None
; Format :	void SetAutoTransferMode(unsigned short mode)
;****************************************************************************/
void TriggerTransfer(void)
{
	unsigned short reg_data;
	do
	{
		reg_data=halReadReg16(REG0038_LCD_INTERFACE_STATUS);			//[38h]
	}while((reg_data&LCD_IF_BUSY)==0x0001);

	halWriteReg16(REG003A_LCD_INTERFACE_FRM_XFER,0x0001);
}

/*********************************** LCD Serial PANEL Set ******************************************/
/****************************************************************************
; Function:	Set Serial LCD Clk Divide	
; Input :	divide (1~16)
; Output :	None;
; Format :	void SetSerialLcdClkDivide(unsigned short divide)
;****************************************************************************/
void SetSerialLcdClkDivide(unsigned short divide)
{
	unsigned short reg=halReadReg16(REG0030_LCD_INTERFACE_CLOCK)&0xF8FF;
	if(divide>16||divide<2)
		return;
	divide=((divide/2-1)&0x07)<<8;
	
	halWriteReg16(REG0030_LCD_INTERFACE_CLOCK,reg|divide);
}

/****************************************************************************
; Function:	Get Serial LCD Clk Divide	
; Input :	None
; Output :	divide (1~16)
; Format :	int GetSerialLcdClkDivide(void)
;****************************************************************************/
unsigned long GetSerialLcdClkDivide(void)
{
	return (((halReadReg16(REG0030_LCD_INTERFACE_CLOCK) >> 8) & 0x07) + 1) * 2;
}

/****************************************************************************
; Function:	Get Serial LCD Clk Freq 	
; Input :	None
; Output :	frequency
; Format :	unsigned long GetSerialClkFreq(void)
;****************************************************************************/
unsigned long GetSerialLcdClkFreq(void)
{
	return GetSystemClock(NULL) / GetSerialLcdClkDivide();
}

/****************************************************************************
; Function:	Set the Serial Panel  if Bypass  	
; Input :	mode:	1:	bypass enable
;			0:	bypass disable
; Output :	None
; Format :	void SetSerialBypassMode(unsigned short mode)
;****************************************************************************/
void SetSerialBypassMode(unsigned short mode)
{
	unsigned short reg=halReadReg16(REG0032_LCD_MODULE_CLOCK);
	if(mode)
		halWriteReg16(REG0032_LCD_MODULE_CLOCK,reg|0x0100);
	else
		halWriteReg16(REG0032_LCD_MODULE_CLOCK,reg&0xFEFF);

}

/****************************************************************************
; Function:	Set LCD Serial Interface mode	
; Input :	MODE -- Serial Data type
;			Serial Data Direction
;			Serial clk PHP
;		Lcd Number
; Output :	None
; Format :	void SetLcdSif(LcdDef LcdNum,unsigned short mode)
;****************************************************************************/
void SetLcdSif(LcdDef LcdNum,unsigned short mode)
{
	switch(LcdNum)
	{
		default:
		case cl_LCD1:
			halWriteReg16(REG0054_LCD1_SERIAL_INTERFACE,mode);
			break;
		case cl_LCD2:
			halWriteReg16(REG005C_LCD2_SERIAL_INTERFACE,mode);
			break;
	}
}




⌨️ 快捷键说明

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