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

📄 lcd.c

📁 以TI 公司的OMAP5910为例
💻 C
字号:
//////////////////////////////////////////////////////////////////////////
//            Copyright (C) 2004, Eyoka @ Microunit
//                           All Rights Reserved
//________________________________________________________________________
//
// FILENAME:    lcd.c
// PROJECT:     High-Resolution Video System On OMAP
// MODULE:      MPU System
// DESCRIPTION: LCD Controller Interface.
// TARGET CPU:  ARM-925T of OMAP5910
// VERSION:     0.2
//________________________________________________________________________
//
// REVISE HISTORY
// DATE         VERSION AUTHOR  DESCRIPTION
// 2004-11-08   0.2     Eyoka   Checked.
// 2004-11-01   0.1     Eyoka   Created.
//////////////////////////////////////////////////////////////////////////

#include "lcd.h"
#include "clk.h"


/////////////////////////////////////////////////////////////////////
// LCD FUNCTIONS
/////////////////////////////////////////////////////////////////////

//___________________________________________________________________
// Function: LCD_Setup
// Usage: Setup LCD Interface.
// Parameters:
//	pConfig			pointer to LCD settings.
// Return Values:	N/A
//___________________________________________________________________
// support TFT_16BPP, single frame buffer only.
void LCD_Setup(LCD_PARAM *pConfig)
{
	DWORD top_addr = pConfig->f1_addr;
	DWORD bot_addr = top_addr + pConfig->width*pConfig->height*2 + 30;

	LCD_Enable(FALSE);

	CLK_EnableLCDCK(TRUE);

	LCD_SetF1(top_addr, bot_addr);

	LCD_SetHBP(pConfig->HBP);
	LCD_SetHFP(pConfig->HFP);
	LCD_SetHSW(pConfig->HSW);
	LCD_SetWidth(pConfig->width);

	LCD_SetVBP(pConfig->VBP);
	LCD_SetVFP(pConfig->VFP);
	LCD_SetVSW(pConfig->VSW);
	LCD_SetHeight(pConfig->height);

	LCD_InvertHS((BOOL)pConfig->IHS);
	LCD_InvertVS((BOOL)pConfig->IVS);
	LCD_SetPCD(pConfig->PCD);

	LCD_SetColorMode(TFT_16BPP);

	memset((void*)top_addr, 0x00, 32);
	*((WORD*)top_addr) = 0x4000;
}

//___________________________________________________________________
// Function: LCD_Enable
// Usage: Enable the LCD Controller.
// Parameters:		N/A
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_Enable(BOOL bEnable)
{
	LCD_CONTROL = bEnable | (LCD_CONTROL & 0xFFFFFFFE);
}

//___________________________________________________________________
// Function: LCD_SetHBP
// Usage: Set Horizontal Back Porsh.
// Parameters:
//	hbp				Horizontal Back Porsh.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetHBP(int hbp)
{
	LCD_TIMING0 = ((hbp-1)<<24) | (LCD_TIMING0 & 0x00FFFFFF);
}

//___________________________________________________________________
// Function: LCD_SetHFP
// Usage: Set Horizontal Front Porsh.
// Parameters:
//	hfp				Horizontal Front Porsh.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetHFP(int hfp)
{
	LCD_TIMING0 = ((hfp-1)<<16) | (LCD_TIMING0 & 0xFF00FFFF);
}

//___________________________________________________________________
// Function: LCD_SetHSW
// Usage: Set Horizontal SynchroPulse Width.
// Parameters:
//	hsw				Horizontal SynchroPulse Width, 1<=hsw<=64
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetHSW(int hsw)
{
	LCD_TIMING0 = ((hsw-1)<<10) | (LCD_TIMING0 & 0xFFFF03FF);
}

//___________________________________________________________________
// Function: LCD_SetWidth
// Usage: Set Pixel Per Line (LCD screen width).
// Parameters:
//	width			16<=width<=1024, must be multiple of 16
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetWidth(int width)
{
	LCD_TIMING0 = (width-1) | (LCD_TIMING0 & 0xFFFFFC00);
}

//___________________________________________________________________
// Function: LCD_SetVBP
// Usage: Set Vertical Back Porsh.
// Parameters:
//	vbp				Vertical Back Porsh.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetVBP(int vbp)
{
	LCD_TIMING1 = ((vbp-1)<<24) | (LCD_TIMING1 & 0x00FFFFFF);
}

//___________________________________________________________________
// Function: LCD_SetVFP
// Usage: Set Vertical Front Porsh.
// Parameters:
//	vfp				Vertical Front Porsh.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetVFP(int vfp)
{
	LCD_TIMING1 = ((vfp-1)<<16) | (LCD_TIMING1 & 0xFF00FFFF);
}

//___________________________________________________________________
// Function: LCD_SetVSW
// Usage: Set Vertical SynchroPulse Width.
// Parameters:
//	vsw				Vertical SynchroPulse Width, 1<=vsw<=64
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetVSW(int vsw)
{
	LCD_TIMING1 = ((vsw-1)<<10) | (LCD_TIMING1 & 0xFFFF03FF);
}

//___________________________________________________________________
// Function: LCD_SetHeight
// Usage: Set Line Per Panel (LCD screen height).
// Parameters:
//	height			16<=height<=1024, must be multiple of 16
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetHeight(int height)
{
	LCD_TIMING1 = (height-1) | (LCD_TIMING1 & 0xFFFFFC00);
}

//___________________________________________________________________
// Function: LCD_InvertAC
// Usage: Invert output enable
// Parameters:
//	bInvert			TRUE: LCD.AC pin is active low.
//					FALSE: LCD.AC pin is active high.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_InvertAC(BOOL bInvert)
{
	LCD_TIMING2 = (bInvert<<23) | (LCD_TIMING2 & 0xFF7FFFFF);
}

//___________________________________________________________________
// Function: LCD_InvertPCLK
// Usage: Invert pixel clock
// Parameters:
//	bInvert			TRUE: driven on the falling edge of LCD.PCLK.
//					FALSE: driven on the rising edge of LCD.PCLK.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_InvertPCLK(BOOL bInvert)
{
	LCD_TIMING2 = (bInvert<<22) | (LCD_TIMING2 & 0xFFBFFFFF);
}

//___________________________________________________________________
// Function: LCD_InvertHS
// Usage: Invert HSYNC
// Parameters:
//	bInvert			TRUE: LCD.HS pin is active low.
//					FALSE: LCD.HS pin is active high.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_InvertHS(BOOL bInvert)
{
	LCD_TIMING2 = (bInvert<<21) | (LCD_TIMING2 & 0xFFDFFFFF);
}

//___________________________________________________________________
// Function: LCD_InvertVS
// Usage: Invert VSYNC
// Parameters:
//	bInvert			TRUE: LCD.VS pin is active low.
//					FALSE: LCD.VS pin is active high.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_InvertVS(BOOL bInvert)
{
	LCD_TIMING2 = (bInvert<<20) | (LCD_TIMING2 & 0xFFEFFFFF);
}

//___________________________________________________________________
// Function: LCD_SetPCD
// Usage: Set LCD pixel clock divider
// Parameters:
//	divider			2<=divider<=255
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetPCD(int divider)
{
	LCD_TIMING2 = divider | (LCD_TIMING2 & 0xFFFFFFF0);
}

//___________________________________________________________________
// Function: LCD_SetColorMode
// Usage: Set LCD color mode.
// Parameters:
//	mode			color mode, see LCD_COLOR_MODE_t.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetColorMode(LCD_COLOR_MODE_t mode)
{
	LCD_CONTROL = mode;
}

//___________________________________________________________________
// Function: LCD_SetF1
// Usage: Set address of frame buffer 1.
// Parameters:
//	top_addr		top address.
//	bot_addr		bottom address.
// Return Values:	N/A
//___________________________________________________________________
//
void LCD_SetF1(DWORD top_addr, DWORD bot_addr)
{
	DMA_LCD_TOP_F1_L = (WORD)top_addr;
	DMA_LCD_TOP_F1_U = (WORD)(top_addr>>16);
	DMA_LCD_BOT_F1_L = (WORD)bot_addr;
	DMA_LCD_BOT_F1_U = (WORD)(bot_addr>>16);
}



// the end
/////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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