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

📄 7-2.c

📁 TI公司c6000系列 dsp 的案例源代码
💻 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 + -