📄 7-2.c
字号:
#include <windows.h>
#include <types.h>
#include <drv_glob.h>
#include <string.h>
#include <stdio.h>
#include <tchar.h>
#include "xsc1.h"
#include "xsc1bd.h"
#include "DispDrvr.h"
#include "palette.h"
#include "bcr.h"
#define DEFINE_CURSOR_GLOBALS
#include "cursor.h"
#define NONE (0)
#define LQ035Q7DB02 (10) // 定义LCD为夏普公司(sharp)240×320像素-16bpp
#define LQ035Q7DB02_CLOCK_FREQUENCY 8
#define LQ10D321_CLOCK_FREQUENCY 3
#define LIGHT_ON 0x00000080
#define LIGHT_OFF 0x00000080
#define LCD_ON 0x00000100
#define LCD_OFF 0x00000100
#define CLK_PWM0 0x00000001
#define CLK_LCD 0x00010000
#define FRAME_BUFFER_BASE_PHYSICAL FRAME_BUFFER_0_BASE_PHYSICAL
BOOL gDrawCursorFlag = FALSE;
BOOL gInPowerHandler = FALSE;
BOOL bLandscapeDisplay = FALSE;
BOOL bAllowOSFrameBufferUpdates = TRUE;
CRITICAL_SECTION displayMutex;
CRITICAL_SECTION frameDescriptorMutex;
int DispDrvr_cxScreen;
int DispDrvr_cyScreen;
int DispDrvr_cdwStride;
int activeFrameBuffer=0;
unsigned int frameBufferSize = 0;
PBYTE gDibBuffer = NULL;
PBYTE gFrameBuffer = NULL;
PBYTE gBlankFrameBuffer=NULL;
int gDibBufferWidth;
int gDibBufferHeight;
RECT gCursorRect;
UINT nDisplayType;
void* DispDrvrPhysicalFrameBuffer = NULL;
BOOL gUseDispDrvrPhysicalFrameBuffer = FALSE;
volatile SA2lcdregs *v_pLcdRegs = NULL;
volatile CLKMAN_REGS *v_pClkRegs = NULL;
volatile GPIO_REGS *v_pGPIORegs = NULL;
volatile LCD_FRAME_DESCRIPTOR *frameDescriptorCh0fd1=NULL;
volatile LCD_FRAME_DESCRIPTOR *frameDescriptorCh0fd2=NULL;
volatile LCD_FRAME_DESCRIPTOR *frameDescriptorCh1=NULL;
volatile LCD_FRAME_DESCRIPTOR *frameDescriptorPalette=NULL;
volatile LCD_FRAME_DESCRIPTOR *frameDescriptorTemp=NULL;
volatile LCD_PALETTE *v_pPaletteBuffer=NULL;
#ifdef PLAT_LUBBOCK
volatile BLR_REGS *v_pBoardLevelRegister;
#endif
#ifdef PLAT_SANDGATE
volatile PWM_REGS *v_pPWMRegs = NULL;
#endif
INSTANTIATE_PALETTE
void LCDClearStatusReg();
void LcdSetupGPIOs();
void Cleanup();
void InitLCDController();
void EnableLCDController();
void DisableLCDController();
void InitCursor();
BOOL MapVirtualAddress();
BOOL ReadRegistryData(VOID);
void CopyFrameBuffer(BOOL gDirection);
void ClearFrameBuffer(BOOL color);
void DisplayPageBuffer(int page);
void ScrollBuffer(int direction);
extern void msWait(unsigned msVal);
extern PVOID VirtualAllocCopy(unsigned size,char *str,PVOID pVirtualAddress);
#ifdef OSV_LOCAL_MERLIN
extern BOOL VirtualSetAttributes(LPVOID lpvAddress, DWORD cbSize, DWORD dwNewFlags, DWORD dwMask, LPDWORD lpdwOldFlags);
#endif
void ConfigureFrameBufferSectionDescriptor(unsigned int descriptor);
#define _OPT_ASM
#ifdef _OPT_ASM
void dirtyRectDump_core_ASM(WORD *pwSrc, WORD *pwDst,int rowLen, DWORD srcWidthB,
DWORD bytesPerRow, DWORD srcMarginWidth, DWORD dstMarginWidth);
void DirtyRectDumpPortraitLoop_C(BYTE *pDstBuf, BYTE *pSrcBuf, DWORD yTop,
DWORD yBottom, DWORD srcWidthB, DWORD bytesPerRow,DWORD bytesPerPixel,
DWORD srcMarginWidth, DWORD dstMarginWidth);
void ellipse_core_ASM(WORD srcColor,DWORD margin,DWORD width,WORD* pDstBuf);
void DispDrvrDirtyRectDump2(LPCRECT prc,DWORD color);
void DirtyRectDumpPortraitLoop_C_rectfill(BYTE *pDstBuf, WORD srcColor,
DWORD yTop,DWORD yBottom,DWORD srcWidthB, DWORD bytesPerRow,
WORD bytesPerPixel, DWORD srcMarginWidth, DWORD dstMarginWidth);
void DispDrvrDirtyRectDump_rectfill(LPCRECT prc, DWORD color);
#endif
void DispDrvrSetDibBuffer(void *data)
{
gDibBuffer = data;
ClearFrameBuffer(FALSE);
}
void DispDrvrSetPalette (const PALETTEENTRY source[],unsigned short firstEntry,unsigned short numEntries)
{
int i;
int end = firstEntry + numEntries;
EnterCriticalSection(&frameDescriptorMutex);
for(i=firstEntry;i<end;i++)
{
// store 5 bits red, 6 bits green, and 5 bits blue
v_pPaletteBuffer->palette[i] = ((source[i].peBlue) >> 3|((source[i].peGreen & 0xfc)<< 3)|
((source[i].peRed & 0xf8) << 8));
}
frameDescriptorCh0fd2->FDADR= LCD_FDADR(frameDescriptorCh0fd2->PHYSADDR);
frameDescriptorPalette->FDADR = LCD_FDADR(frameDescriptorCh0fd2->FDADR);
frameDescriptorPalette->FSADR= LCD_FSADR(PALETTE_BUFFER_BASE_PHYSICAL);
frameDescriptorPalette->FIDR = LCD_FIDR(0);
frameDescriptorPalette->LDCMD = LCD_Len(512) | LCD_Pal; // 2^bpp * 2;
frameDescriptorPalette->PHYSADDR=
LCD_FDADR(PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL);
frameDescriptorCh0fd1->FDADR=
LCD_FDADR(PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL);
frameDescriptorTemp = frameDescriptorCh0fd1;
frameDescriptorCh0fd1 = frameDescriptorCh0fd2;
frameDescriptorCh0fd2 = frameDescriptorTemp;
LeaveCriticalSection(&frameDescriptorMutex);
}
void DispDrvrInitialize (void)
{
ReadRegistryData();
msWait(20);
frameBufferSize = bpp / 8 * DispDrvr_cxScreen * DispDrvr_cyScreen;
if (!MapVirtualAddress())
return;
InitializeCriticalSection(&displayMutex);
InitializeCriticalSection(&frameDescriptorMutex);
InitCursor(); // 初始化光标
LcdSetupGPIOs(); // 初始化GPIO 寄存器
ClearFrameBuffer(TRUE); // 清帧缓冲寄存器
InitLCDController(); // 初始化LCD控制器和板控寄存器
LCDClearStatusReg(); // 清LCD状态寄存器
EnableLCDController(); // 使能LCD控制器
if(bpp < 16)
{
DispDrvrSetPalette(_rgbIdentity,0,PALETTE_SIZE);
}
RETAILMSG(0,(TEXT("InitializeDisplayHardware Complete\r\n")));
return;
}
//…………
case LQ035Q7DB02: // 针对LQ035Q7DB02型号LCD的驱动
{
PCD = 10;
RETAILMSG(1, (TEXT("InitLCDController:LQ035Q7DB02 display type, PCD=%d\r\n"), PCD));
v_pLcdRegs->TRGBR = LCD_TRS(0x00) | LCD_TGS(0x55) | LCD_TBS(0xAA);
v_pLcdRegs->TCR = LCD_TM2S | LCD_TM1S | LCD_TM2En | LCD_TM1En |
LCD_TVBS(0x04) | LCD_THBS(0x05) | LCD_TSCS(0x03) | LCD_TED;
v_pLcdRegs->LCCR1 = ( LCD_PPL(239) | LCD_HSW(2) | LCD_ELW(10) | LCD_BLW(10) );
v_pLcdRegs->LCCR2 = ( LCD_LPP(319) | LCD_VSW(2) | LCD_EFW(5) | LCD_BFW(5) );
v_pLcdRegs->LCCR3 = ( LCD_PCD(PCD) | LCD_BPP(BPP) | LCD_PCP | LCD_ACB(255) );
v_pLcdRegs->LCCR0 = ( LCD_LDM | LCD_SFM | LCD_IUM | LCD_EFM | LCD_PAS |
LCD_QDM | LCD_BM | LCD_OUM);
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -