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

📄 lcd.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 1999, (C) Copyright 1999 Texas Instruments.  All rights reserved.
//
//   Filename       	: lcd.c
//
//   Description    	: Body file for OMAP LCD Controller
//
//   Project        	: OMAP
//
//   Author         	: Vincent Bour v-bour@ti.com
//===============================================================================

#include "lcd.h"
#include "mem.h"
#include "global_types.h"


//---------------------------------------------------------------------------
//               LCD_TestRegisterValueAtReset                                     
//---------------------------------------------------------------------------
BOOL LCD_TestRegisterValueAtReset(void)
{
BOOL ok =True;

ok &=((REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) & LCD_CONTROL_REG_MSK) == LCD_CONTROL_REG_VALUE_AT_RESET);
ok &=((REG32(LCD_TIMING0_REG_SUPERVISOR_ADDR) & LCD_TIMING0_REG_MSK) == LCD_TIMING0_REG_VALUE_AT_RESET); 
ok &=((REG32(LCD_TIMING1_REG_SUPERVISOR_ADDR) & LCD_TIMING1_REG_MSK) == LCD_TIMING1_REG_VALUE_AT_RESET);
ok &=((REG32(LCD_TIMING2_REG_SUPERVISOR_ADDR) & LCD_TIMING2_REG_MSK) == LCD_TIMING2_REG_VALUE_AT_RESET); 
ok &=((REG32(LCD_STATUS_REG_SUPERVISOR_ADDR) & LCD_STATUS_REG_MSK) == LCD_STATUS_REG_VALUE_AT_RESET); 
ok &=((REG32(LCD_SUBPANEL_REG_SUPERVISOR_ADDR) & LCD_SUBPANEL_REG_MSK) == LCD_SUBPANEL_REG_VALUE_AT_RESET);

return(ok);
}


//---------------------------------------------------------------------------
//               LCD_ReadControlRegister                                     
//---------------------------------------------------------------------------
UWORD32 LCD_ReadControlRegister(void)
{
return(REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) & LCD_CONTROL_REG_MSK); 
}


//---------------------------------------------------------------------------
//               LCD_ControllerEnable                                     
//---------------------------------------------------------------------------
void  LCD_ControllerEnable(void)
{
// Read control register
UWORD32 value = REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR); 
value |= LCD_Enable;
REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) = value;
}


//---------------------------------------------------------------------------
//               LCD_ControllerDisable                                     
//---------------------------------------------------------------------------
void  LCD_ControllerDisable(void)
{
// Read control register
UWORD32 value = REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR); 
value &= ~LCD_Enable;
REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) = value;
}


//---------------------------------------------------------------------------
//               LCD_SetControllerRegister                                    
//---------------------------------------------------------------------------
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 = 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 |= (FrameInterruptMask << LCD_DoneMask_BIT_POSITION);
value |= (LoadInterruptMask << LCD_LoadMask_BIT_POSITION);
value |= (ActiveMode << LCD_LcdTFT_BIT_POSITION);
value |= (EndianMode << LCD_LcdBE_BIT_POSITION);
value |= (Mono8BitMode << LCD_M8B_BIT_POSITION);
value |= (FifoDmaRequestDelay << LCD_FDD_BIT_POSITION);
value |= (LoadingMode << LCD_PLM_BIT_POSITION);
value |= (WinCEMode << LCD_WCE_BIT_POSITION);
// write control register
REG32(LCD_CONTROL_REG_SUPERVISOR_ADDR) = value;
}


//---------------------------------------------------------------------------
//               LCD_ReadStatusRegister                                     
//---------------------------------------------------------------------------
void  LCD_ReadStatusRegister(BOOL * const FrameDone,
			     BOOL * const SynchroLost,
			     BOOL * const ACBiasCount,
			     BOOL * const FifoUnderFlow,
			     BOOL * const PaletteLoaded)
{
// Read status register
UWORD32 value = REG32(LCD_STATUS_REG_SUPERVISOR_ADDR); 
*FrameDone =  (BOOL)(value & 1);
*SynchroLost =  (BOOL)((value >> LCD_Sync_BIT_POSITION ) & 1);
*ACBiasCount =  (BOOL)((value >> LCD_ABC_BIT_POSITION ) & 1);
*FifoUnderFlow = (BOOL)((value >> LCD_FUF_BIT_POSITION ) & 1);
*PaletteLoaded = (BOOL)((value >> LCD_PL_BIT_POSITION ) & 1);
}


//---------------------------------------------------------------------------
//               LCD_SetSubPanelRegister                                     
//---------------------------------------------------------------------------
void  LCD_SetSubPanelRegister(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
// DefaultPixelData coded on 12 bits
value |= (DefaultPixelData & 0xFFF);
// 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;
}





//---------------------------------------------------------------------------
//               LCD_SetLcdTiming0Register                                    
//---------------------------------------------------------------------------
void  LCD_SetLcdTiming0Register(UWORD16 PixelPerLine,
				UWORD8 HorizontalSynchroPulseWidth,
				UWORD8 HorizontalFrontPorsh,
				UWORD8 HorizontalBackPorsh)
{
// Read  register
UWORD32 value = REG32(LCD_TIMING0_REG_SUPERVISOR_ADDR); 
// clear all used bits
value &= LCD_TIMING0_REG_MSK;
// set corresponding parts of register

// 4 lsb bits are used
value |= (PixelPerLine & 0x3F0);
// 6 bits are used
value |= ((HorizontalSynchroPulseWidth & 0x3F) << LCD_HSW_BIT_POSITION);
value |= (HorizontalFrontPorsh << LCD_HFP_BIT_POSITION);
value |= (HorizontalBackPorsh << LCD_HBP_BIT_POSITION);
// write register
REG32(LCD_TIMING0_REG_SUPERVISOR_ADDR) = value;
}


//---------------------------------------------------------------------------
//               LCD_SetLcdTiming1Register                                    
//---------------------------------------------------------------------------
void  LCD_SetLcdTiming1Register(UWORD16 LinePerPanel,
				UWORD8 VerticalSynchroPulseWidth,
				UWORD8 VerticalFrontPorsh,
				UWORD8 VerticalBackPorsh)
{
// Read  register
UWORD32 value = REG32(LCD_TIMING1_REG_SUPERVISOR_ADDR); 
// clear all used bits
value &= ~LCD_TIMING1_REG_MSK;
// set corresponding parts of register

// 10 bits are used
value |= (LinePerPanel & 0x3FF);
// 6 bits are used
value |= ((VerticalSynchroPulseWidth & 0x3F) << LCD_VSW_BIT_POSITION);
value |= (VerticalFrontPorsh << LCD_VFP_BIT_POSITION);
value |= (VerticalBackPorsh << LCD_VBP_BIT_POSITION);
// write register
REG32(LCD_TIMING1_REG_SUPERVISOR_ADDR) = value;
}




//---------------------------------------------------------------------------
//               LCD_SetLcdTiming2Register                                    
//---------------------------------------------------------------------------
void  LCD_SetLcdTiming2Register(UWORD8 PixelClockDivisor,
				UWORD8 AcPinFrequency,
				UWORD8 AcBiasPinTransitionPerInterrupt,
				BOOL InvertVsync ,
				BOOL InvertHsync ,
				BOOL InvertPixelClock,
				BOOL InvertOutputEnable)

{
// Read  register
UWORD32 value = REG32(LCD_TIMING2_REG_SUPERVISOR_ADDR); 
// clear all used bits
value &= ~LCD_TIMING2_REG_MSK;
// set corresponding parts of register
value |= PixelClockDivisor;
value |= (AcPinFrequency << LCD_ACB_Pin_BIT_POSITION);
value |= (AcBiasPinTransitionPerInterrupt << LCD_ACBI_BIT_POSITION);
value |= (InvertVsync << LCD_IVS_BIT_POSITION);
value |= (InvertHsync << LCD_IHS_BIT_POSITION);
value |= (InvertPixelClock << LCD_IPC_BIT_POSITION);
value |= (InvertOutputEnable << LCD_IEO_BIT_POSITION);
// write register
REG32(LCD_TIMING2_REG_SUPERVISOR_ADDR) = value;
}


//---------------------------------------------------------------------------
//               LCD_SetLcdTiming2Register                                    
//---------------------------------------------------------------------------
void  LCD_SetHvSyncPolarity(BOOL Rising_nFalling_Edge)

{
// Read  register
UWORD32 value;
value = REG32(LCD_TIMING2_REG_SUPERVISOR_ADDR); 
// clear bit
value &= ~(1<<(LCD_HVSYNC_EDGE_POLARITY_BIT_POSITION));
// set bit to 
value |= Rising_nFalling_Edge << LCD_HVSYNC_EDGE_POLARITY_BIT_POSITION;
// turn on functionnality
value |= 1 << LCD_HVSYNC_PROG_BIT_POSITION;
// write register
REG32(LCD_TIMING2_REG_SUPERVISOR_ADDR) = value;
}



⌨️ 快捷键说明

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