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

📄 lcd_omap32.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 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 + -