📄 lcd_omap32.c
字号:
//===============================================================================
// TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
//
// Property of Texas Instruments
// For Unrestricted Internal Use Only
// Unauthorized reproduction and/or distribution is strictly prohibited.
// This product is protected under copyright law and trade secret law
// as an unpublished work.
// Created 2001, (C) Copyright 2001 Texas Instruments. All rights reserved.
//
// Filename : lcd_omap32.c
//
// Description : Body file for OMAP3.2 LCD Controller
//
// Project : OMAP3.2
//
// Author : NIshanth Rajan rajan@dal.asp.ti.com
//===============================================================================
#include "lcd.h"
#include "lcd_omap32.h"
#include "test.h"
//=============================================================================
// OMAP3.2 LCD Related Functions
//=============================================================================
// _LCD32_SetControlRegister
// _LCD32_ReadStatusRegister
// _LCD32_SetLineInterruptRegister
// _LCD32_ReadDisplayStatusRegister
// _LCD32_IfVsyncBitSet
// _LCD32_IfLineIntBitSet
// _LCD32_IfLoadPaletteIntBitSet
//------------------------------------------------------------------
// LCD32_SetControlRegister
//------------------------------------------------------------------
void LCD32_SetControlRegister(LCD_ENABLE_T EnableLcd,
LCD_BW_T bw,
LCD32_VSYNC_MASK_T VsyncIntMask,
LCD_INT_DONEMASK_T FrameInterruptMask,
LCD_INT_LOADMASK_T LoadInterruptMask,
LCD32_LINE_INT_NIRQ_MASK_T LineIntNIrqMask,
LCD32_LINE_INT_MASK_T LineIntMask,
LCD_TFT_T ActiveMode,
LCD_BE_T EndianMode,
LCD_M8B_T Mono8BitMode,
LCD32_LINE_INT_CLEAR_SEL_T LineIntClearSel,
LCD32_PXL_GATED_T PixelGate,
UWORD8 FifoDmaRequestDelay,
LOADING_MODE_T LoadingMode,
LCD_WCE_T WinCEMode,
LCD32_TFT_DATA_MAP_T TFTDataMap,
LCD32_STN_16BPP_T STN16bppType)
{
// Read control register
UWORD32 value = REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR);
// clear all used bits
value = 0;
value &= LCD_CONTROL_REG_MSK;
value |= EnableLcd;
value |= (bw << LCD_BW_BIT_POSITION);
value |= (VsyncIntMask << LCD32_VsyncMask_BIT_POSITION);
value |= (FrameInterruptMask << LCD_DoneMask_BIT_POSITION);
value |= (LoadInterruptMask << LCD_LoadMask_BIT_POSITION);
value |= (LineIntNIrqMask << LCD32_LineIntNIrqMask_BIT_POSITION);
value |= (LineIntMask << LCD32_LineIntMask_BIT_POSITION);
value |= (ActiveMode << LCD_LcdTFT_BIT_POSITION);
value |= (EndianMode << LCD_LcdBE_BIT_POSITION);
value |= (Mono8BitMode << LCD_M8B_BIT_POSITION);
value |= (LineIntClearSel << LCD32_LineIntClearSel_BIT_POSITION);
value |= (PixelGate << LCD32_PxlGated_BIT_POSITION);
value |= (FifoDmaRequestDelay << LCD_FDD_BIT_POSITION);
value |= (LoadingMode << LCD_PLM_BIT_POSITION);
value |= (WinCEMode << LCD_WCE_BIT_POSITION);
value |= (TFTDataMap << LCD32_TFTDataMap_BIT_POSITION);
value |= (STN16bppType << LCD32_STN16bpp_BIT_POSITION);
// write control register
REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) = value;
}
//---------------------------------------------------------------------------
// LCD32_ReadStatusRegister
//---------------------------------------------------------------------------
void LCD32_ReadStatusRegister(BOOL * const FrameDone,
BOOL * const Vsync,
BOOL * const SynchroLost,
BOOL * const ACBiasCount,
BOOL * const LineInt,
BOOL * const FifoUnderFlow,
BOOL * const PaletteLoaded)
{
// Read status register
UWORD32 value = REG32(LCD_STATUS_REG_SUPERVISOR_ADDR);
*FrameDone = value & 1;
*Vsync = (value >> LCD32_VS_BIT_POSITION ) & 1;
*SynchroLost = (value >> LCD_Sync_BIT_POSITION ) & 1;
*ACBiasCount = (value >> LCD_ABC_BIT_POSITION ) & 1;
*LineInt = (value >> LCD32_LineInt_BIT_POSITION ) & 1;
*FifoUnderFlow = (value >> LCD_FUF_BIT_POSITION ) & 1;
*PaletteLoaded = (value >> LCD_PL_BIT_POSITION ) & 1;
}
//---------------------------------------------------------------------------
// LCD32_SetLineInterruptRegister
//---------------------------------------------------------------------------
void LCD32_SetLineInterruptRegister(UWORD16 Line_Number)
{
// clear all used bits
UWORD32 value = 0;
value |= Line_Number;
value &= LCD32_LINE_INTERRUPT_REG_MASK;
REG32(LCD32_LINE_INTERRUPT_REG_SUPERVISOR_ADDR) = value;
}
//---------------------------------------------------------------------------
// LCD32_ReadDisplayStatusRegister
//---------------------------------------------------------------------------
UWORD32 LCD32_ReadDisplayStatusRegister(void)
{
return(REG32(LCD32_DISPLAY_STATUS_REG_SUPERVISOR_ADDR) & LCD32_DISPLAY_STATUS_REG_MASK);
}
//---------------------------------------------------------------------------
// LCD32_IfVsyncBitSet
//---------------------------------------------------------------------------
BOOL LCD32_IfVsyncBitSet(void)
{
UWORD32 value = 0;
value = REG32(LCD_STATUS_REG_SUPERVISOR_ADDR);
value &= (1 << LCD32_VS_BIT_POSITION);
if (value != 0)
return(TRUE);
else
return(FALSE);
}
//---------------------------------------------------------------------------
// LCD32_IfLineIntBitSet
//---------------------------------------------------------------------------
BOOL LCD32_IfLineIntBitSet(void)
{
UWORD32 value = 0;
value = REG32(LCD_STATUS_REG_SUPERVISOR_ADDR);
value &= (1 << LCD32_LineInt_BIT_POSITION);
if (!value)
return(FALSE);
else
return(TRUE);
}
//---------------------------------------------------------------------------
// LCD32_IfLoadPaletteIntBitSet
//---------------------------------------------------------------------------
BOOL LCD32_IfLoadPaletteIntBitSet(void)
{
UWORD32 value = 0;
value = REG32(LCD_STATUS_REG_SUPERVISOR_ADDR);
value &= (1 << LCD_PL_BIT_POSITION);
if (!value)
return(FALSE);
else
return(TRUE);
}
//---------------------------------------------------------------------------
// LCD_SetSubPanelRegister
//---------------------------------------------------------------------------
void LCD_Omap32SetSubPanelRegister(UWORD16 DefaultPixelData,
UWORD16 LinePerPanelThreshold,
SUBPANEL_HOLS_T SubPanelHols,
SUBPANEL_ENABLE_T SubPanelEnable)
{
// Read sub Panel register
UWORD32 value = REG32(LCD_SUBPANEL_REG_SUPERVISOR_ADDR);
// clear all used bits
value &= LCD_SUBPANEL_REG_MSK;
// set corresponding parts of register
value |= (DefaultPixelData & 0xFFFF);
// 10 bits are used
value |= ((LinePerPanelThreshold & 0x3ff) << LCD_LPPT_BIT_POSITION);
value |= (SubPanelHols << LCD_HOLS_BIT_POSITION);
value |= (SubPanelEnable << LCD_SPEN_BIT_POSITION);
// write sub Panel register
REG32(LCD_SUBPANEL_REG_SUPERVISOR_ADDR) = value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -