📄 lcdc.c
字号:
//-------------------------------------------------------------------------------
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
// Property of Texas Instruments
// For Unrestricted Internal Use Only
// Unauthorized reprofuction and/or distribution is strictly prohibited.
// This product is protected under copyright law and trade secret law
// as an unpublished work
// Created 2000, (C) Copyright 2000 Texas Instruments. All rights reserved
//
//------------------------------------------------------------------------------
#include "omap30.h"
//-------------------------------------------------------------------------------
//
// FUNCTIONS
//
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//NAME : LCD_ReadControlRegister
//DESCRIPTION : Read LCD control register
//PARAMETERS : None
//RETURN VALUE : Returns LCD control register value
//-------------------------------------------------------------------------------
UWORD32 LCD_ReadControlRegister(void)
{
return(LCDC_LCD_CTRL_REG);
}
//-------------------------------------------------------------------------------
//NAME : LCD_ControllerEnable
//DESCRIPTION : Enable LCD controller
//PARAMETERS : None
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_ControllerEnable(void)
{
SetField(LCDC_LCD_CTRL_REG,LCDC_LCD_CTRL_REG_LCD_ENABLE,LCD_Enable);
}
//-------------------------------------------------------------------------------
//NAME : LCD_ControllerDisable
//DESCRIPTION : Enable LCD controller
//PARAMETERS : None
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_ControllerDisable(void)
{
SetField(LCDC_LCD_CTRL_REG,LCDC_LCD_CTRL_REG_LCD_ENABLE,LCD_Disable);
}
//-------------------------------------------------------------------------------
//NAME : LCD_SetControlRegister
//DESCRIPTION : Set LCD control register
//PARAMETERS : All LCD control register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_SetControlRegister(LCD_ENABLE_T EnableLcd,
LCD_BW_T bw,
LCD_INT_DONEMASK_T FrameInterruptMask,
LCD_INT_LOADMASK_T LoadInterruptMask,
LCD_TFT_T ActiveMode,
LCD_BE_T EndianMode,
LCD_M8B_T Mono8BitMode,
UWORD8 FifoDmaRequestDelay,
LOADING_MODE_T LoadingMode,
LCD_WCE_T WinCEMode)
{
// Read control register
UWORD32 value = LCDC_LCD_CTRL_REG;
// clear all used bits
value = 0;
value &= LCDC_LCD_CTRL_REG_MASK;
SetField(value,LCDC_LCD_CTRL_REG_LCD_ENABLE,EnableLcd);
SetField(value,LCDC_LCD_CTRL_REG_LCDBW,bw);
SetField(value,LCDC_LCD_CTRL_REG_LCDDONEMASK,FrameInterruptMask);
SetField(value,LCDC_LCD_CTRL_REG_LOADMASK,LoadInterruptMask);
SetField(value,LCDC_LCD_CTRL_REG_LCD_TFT,ActiveMode);
SetField(value,LCDC_LCD_CTRL_REG_LCDBE,EndianMode);
SetField(value,LCDC_LCD_CTRL_REG_M8B,Mono8BitMode);
SetField(value,LCDC_LCD_CTRL_REG_FDD,FifoDmaRequestDelay);
SetField(value,LCDC_LCD_CTRL_REG_PLM,LoadingMode);
SetField(value,LCDC_LCD_CTRL_REG_WCE,WinCEMode);
// write control register
LCDC_LCD_CTRL_REG = value;
}
//-------------------------------------------------------------------------------
//NAME : LCD_ReadStatusRegister
//DESCRIPTION : Read LCD status register
//PARAMETERS : All LCD status register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_ReadStatusRegister(BOOL * const FrameDone,
BOOL * const SynchroLost,
BOOL * const ACBiasCount,
BOOL * const FifoUnderFlow,
BOOL * const PaletteLoaded)
{
// Read status register
UWORD32 value = LCDC_LCD_STATUS;
*FrameDone = GetField(value,LCDC_LCD_STATUS_DONE);
*SynchroLost = GetField(value,LCDC_LCD_STATUS_SYNC);
*ACBiasCount = GetField(value,LCDC_LCD_STATUS_ABC);
*FifoUnderFlow = GetField(value,LCDC_LCD_STATUS_FUF);
*PaletteLoaded = GetField(value,LCDC_LCD_STATUS_PL);
}
//-------------------------------------------------------------------------------
//NAME : LCD_SetSubPanelRegister
//DESCRIPTION : Set LCD sub panel register
//PARAMETERS : DPD, LPPT, HOLS and SPEN LCD sub panel register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_SetSubPanelRegister(UWORD16 DefaultPixelData,
UWORD16 LinePerPanelThreshold,
SUBPANEL_HOLS_T SubPanelHols,
SUBPANEL_ENABLE_T SubPanelEnable)
{
// Read sub Panel register
UWORD32 value = LCDC_LCD_SUB_PANEL;
// clear all used bits
value &= LCDC_LCD_SUB_PANEL_MASK;
// set corresponding parts of register
// DefaultPixelData coded on 12 bits
SetField(value,LCDC_LCD_SUB_PANEL_DPD,(DefaultPixelData & 0xFFF));
// 10 bits are used
SetField(value,LCDC_LCD_SUB_PANEL_LPPT,(LinePerPanelThreshold & 0x3FF));
SetField(value,LCDC_LCD_SUB_PANEL_HOLS,SubPanelHols);
SetField(value,LCDC_LCD_SUB_PANEL_SPEN,SubPanelEnable);
// write sub Panel register
LCDC_LCD_SUB_PANEL = value;
}
//-------------------------------------------------------------------------------
//NAME : LCD_SetLcdTiming0Register
//DESCRIPTION : Set LCD Timing0 register
//PARAMETERS : All LCD Timing0 register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_SetLcdTiming0Register(UWORD16 PixelPerLine,
UWORD8 HorizontalSynchroPulseWidth,
UWORD8 HorizontalFrontPorsh,
UWORD8 HorizontalBackPorsh)
{
// Read register
UWORD32 value = LCDC_LCD_TIMING_0;
// clear all used bits
value &= LCDC_LCD_TIMING_0_MASK;
// 4 lsb bits are used
SetField(value,LCDC_LCD_TIMING_0_PPL,(PixelPerLine & 0x3F0));
// 6 bits are used
SetField(value,LCDC_LCD_TIMING_0_HSW,(HorizontalSynchroPulseWidth & 0x3F));
SetField(value,LCDC_LCD_TIMING_0_HFP,HorizontalFrontPorsh);
SetField(value,LCDC_LCD_TIMING_0_HBP,HorizontalBackPorsh);
// write register
LCDC_LCD_TIMING_0 = value;
}
//-------------------------------------------------------------------------------
//NAME : LCD_SetLcdTiming1Register
//DESCRIPTION : Set LCD Timing1 register
//PARAMETERS : All LCD Timing1 register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_SetLcdTiming1Register(UWORD16 LinePerPanel,
UWORD8 VerticalSynchroPulseWidth,
UWORD8 VerticalFrontPorsh,
UWORD8 VerticalBackPorsh)
{
// Read register
UWORD32 value = LCDC_LCD_TIMING_1;
// clear all used bits
value &= LCDC_LCD_TIMING_1_MASK;
// 4 lsb bits are used
SetField(value,LCDC_LCD_TIMING_0_PPL,(LinePerPanel & 0x3FF));
// 6 bits are used
SetField(value,LCDC_LCD_TIMING_0_HSW,(VerticalSynchroPulseWidth & 0x3F));
SetField(value,LCDC_LCD_TIMING_0_HFP,VerticalFrontPorsh);
SetField(value,LCDC_LCD_TIMING_0_HBP,VerticalBackPorsh);
// write register
LCDC_LCD_TIMING_1 = value;
}
//-------------------------------------------------------------------------------
//NAME : LCD_SetLcdTiming2Register
//DESCRIPTION : Set LCD Timing2 register
//PARAMETERS : All LCD Timing2 register bit fields
//RETURN VALUE : None
//-------------------------------------------------------------------------------
void LCD_SetLcdTiming2Register(UWORD8 PixelClockDivisor,
UWORD8 AcPinFrequency,
UWORD8 AcBiasPinTransitionPerInterrupt,
BOOL InvertVsync ,
BOOL InvertHsync ,
BOOL InvertPixelClock,
BOOL InvertOutputEnable)
{
// Read register
UWORD32 value = LCDC_LCD_TIMING_2;
// set corresponding parts of register
value &= LCDC_LCD_TIMING_0_MASK;
SetField(value,LCDC_LCD_TIMING_2_PCD,PixelClockDivisor);
SetField(value,LCDC_LCD_TIMING_2_ACB,AcPinFrequency);
SetField(value,LCDC_LCD_TIMING_2_ACBI,AcBiasPinTransitionPerInterrupt);
SetField(value,LCDC_LCD_TIMING_2_IVS,InvertVsync);
SetField(value,LCDC_LCD_TIMING_2_IHS,InvertHsync);
SetField(value,LCDC_LCD_TIMING_2_IPC,InvertPixelClock);
SetField(value,LCDC_LCD_TIMING_2_IEO,InvertOutputEnable);
// write register
LCDC_LCD_TIMING_2 = value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -