📄 hal_lcd.c
字号:
{
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 + -