📄 lcd.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 + -