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

📄 g2d.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (uspPattern != (u16*)0)
	{
		for(i=0; i<32; i++)
		{
		//	Outp32( rG2D_PATTERN_ADDR+(i*4), (uspPattern[2*i+1]<<16) | uspPattern[2*i+0]);
			(*(volatile u32 *)(0x4D408600+(i*4)))=(uspPattern[2*i+1]<<16) | (uspPattern[2*i+0]);
		}
	}
	else
	//	Assert(0); // There is no pattern.
		;
}

void G2D_Set3rdOperand(G2D_OPERAND3 e3rdOp)
{

	u32 u3rdOpSel =
		(e3rdOp == G2D_OPERAND3_PAT) ? G2D_OPERAND3_PAT_BIT :
		(e3rdOp == G2D_OPERAND3_FG) ? G2D_OPERAND3_FG_BIT :	 0xffffffff;

	if (u3rdOpSel == 0xffffffff) 
//		Assert(0); // UnSupported Third Operand!
		;

	G2D_CheckFifo(17);

//	Outp32(rG2D_ROP, (Inp32_0(rG2D_ROP) &= ~(0x1<<13)) | u3rdOpSel);
	rG2D_ROP=(rG2D_ROP&~(0x1<<13))| u3rdOpSel;
}


void G2D_SetRotationMode(u32 uRotationType)
{
	
	G2D_CheckFifo(17);
	rG2D_ROTATE= rG2D_ROTATE & ~(0x3f)|(uRotationType);	
}

void G2D_SetRotationOrg(u16 usRotOrgX, u16 usRotOrgY)
{
	G2D_CheckFifo(17);

	rG2D_ROT_OC_X= usRotOrgX;
	rG2D_ROT_OC_Y= usRotOrgY;
}

void G2D_SetScreenSize(u32 uMaxX, u32 uMaxY)
{
	G2D_CheckFifo(17);

	rG2D_SC_HORI_RES= (uMaxX&0x3ff);	
	rG2D_SC_VERT_RES= (uMaxY&0x3ff);
}

void G2D_SetSourceSize(u32 uHori, u32 uVert)
{
	G2D_CheckFifo(17);

	rG2D_SRC_HORI_RES= (uHori&0x3ff);	
	rG2D_SRC_VERT_RES= (uVert&0x3ff);	
}

void G2D_SetClippingWindow(u32 uLeftTopX, u32 uLeftTopY, u32 uRightBottomX, u32 uRightBottomY)
{

	G2D_CheckFifo(17);

	rG2D_CW_LT_X= uLeftTopX;	
	rG2D_CW_LT_Y= uLeftTopY;
	rG2D_CW_RB_X= uRightBottomX;
	rG2D_CW_RB_Y= uRightBottomY;	
}

void G2D_SetPatternMemory(u32 uCoordX, u32 uCoordY, u16 usColor)
{

	u32 uOffsetAddress;
	u32 uData;

	G2D_CheckFifo(17);
	
//	Assert(uCoordX <= 7);
	
//	Assert(uCoordY <= 7);

	uOffsetAddress = uCoordY*8*2 + (uCoordX/2)*4;
	uData=(*(volatile unsigned *)(G2D_BASE_TEMP+0x600+uOffsetAddress));	
	
	uData = (uData&~(0xffff<<(16*(uCoordX%2))))|(usColor<<(16*(uCoordX%2)));
	(*(volatile unsigned *)(G2D_BASE_TEMP+0x600+uOffsetAddress))=uData;
	
}

void G2D_GetPatternMemory(u32 uCoordX, u32 uCoordY, u16 *usColor)
{

	u32 uOffsetAddress;
	u32 uData;

	G2D_CheckFifo(17);
	
//	Assert(uCoordX <= 7);
	
//	Assert(uCoordY <= 7);

	uOffsetAddress = uCoordY*8*2 + (uCoordX/2)*4;	
	uData=(*(volatile unsigned *)(G2D_BASE_TEMP+0x600+uOffsetAddress));	

	if((uCoordX%2)==0) *usColor= (u16)(uData&0xffff);
	else *usColor= (u16)((uData&0xffff0000)>>16);
	
}

void G2D_SetPatternOffset(u8 ucPatOffsetX, u8 ucPatOffsetY)
{

//	Assert(ucPatOffsetX<=7);
//	Assert(ucPatOffsetY<=7);

	G2D_CheckFifo(17);
	rG2D_PATOFF_X= ucPatOffsetX;
	rG2D_PATOFF_Y= ucPatOffsetY;
}


void G2D_SetCoordinateDrawingText(u32 uStartX, u32 uStartY, u32 uEndX, u32 uEndY)
{

	G2D_CheckFifo(17);

	rG2D_COORD0_X= uStartX;
	rG2D_COORD0_Y= uStartY;
	rG2D_COORD1_X= uEndX;
	rG2D_COORD1_Y= uEndY;	
}

void G2D_SetFirstText(u32 uFirstText)
{
	G2D_CheckFifo(17);

	rG2D_CMDR4= uFirstText;
}

void G2D_SetNextText(u32 uNextText)
{
	G2D_CheckFifo(17);

	rG2D_CMDR5= uNextText;
}

void G2D_SetCMDR7(u32 uTestDrawingFbAddr)
{
	G2D_CheckFifo(17);

	rG2D_CMDR7= uTestDrawingFbAddr;
}

void G2D_SetFontType(u32 uFontType, u32 *uFontWidth, u32 *uFontHeight)
{

	switch(uFontType)
	{
		case 0:
			oG2d.m_upFontType = (u8 *)chr_font8X8;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 8;
			*uFontWidth=8;
			*uFontHeight=8;
			break;
		case 1:
			oG2d.m_upFontType = (u8 *)font8x15;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 15;
			*uFontWidth=8;
			*uFontHeight=15;
			break;		
		case 2:
			oG2d.m_upFontType = (u8 *)chr_font8X16T;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 15;
			*uFontWidth=8;
			*uFontHeight=15;			
			break;
		case 3:
			oG2d.m_upFontType = (u8 *)chr_font8X16;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 16;
			*uFontWidth=8;
			*uFontHeight=16;			
			break;	
		default:
			oG2d.m_upFontType = (u8 *)chr_font8X8;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 8;
			*uFontWidth=8;
			*uFontHeight=8;			
			break;
	}
}

void G2D_FillMemoryForTextDrawing(u32 uFontType, u32 uTextDrawingFbAddr)
{
	u8* ucOneLetter;	
	u32 uHostData = 0x0;
	u32 uTempData = 0x0;
	u32 i,j,k;
	
	u32 uTotalSizeOfFont;
	u32 uAddressOffset;

	switch(uFontType) {
		case 0:
			oG2d.m_upFontType = (u8 *)chr_font8X8;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 8;
			uTotalSizeOfFont=sizeof(chr_font8X8);
			break;
		case 1:
			oG2d.m_upFontType = (u8 *)font8x15;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 15;
			uTotalSizeOfFont=sizeof(font8x15);
			break;
		case 2:
			oG2d.m_upFontType = (u8 *)chr_font8X16T;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 15;
			uTotalSizeOfFont=sizeof(chr_font8X16T);		
			break;
		case 3:
			oG2d.m_upFontType = (u8 *)chr_font8X16;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 16;		
			uTotalSizeOfFont=sizeof(chr_font8X16);
			break;	
		default:
			oG2d.m_upFontType = (u8 *)chr_font8X8;
			oG2d.m_uFontWidth = 8;
			oG2d.m_uFontHeight = 8;
			uTotalSizeOfFont=sizeof(chr_font8X8);	
			break;			
	}

//	*uFontSize = oG2d.m_uFontHeight;
/*
	for(i=0; i< uTotalSizeOfFont/4; i++) {
		ucOneLetter = oG2d.m_upFontType + i*4; // get start address of chosen letter in font8x15
		for (j=0; j<4; j++) // Generate 1-word of data!!
		{
			uTempData = (u32)ucOneLetter[j];
			uHostData |= (uTempData << (24 - 8*j));
		}
		*(unsigned int *)(uTextDrawingFbAddr+i*4)=uHostData;
		uHostData=0;
	}	
*/	
	// oG2d.m_ufontWidth might be multiple of 8.
	uAddressOffset=((oG2d.m_uFontWidth/8*oG2d.m_uFontHeight+3)/4)*4;
	for(i=0; i< (uTotalSizeOfFont)/(oG2d.m_uFontWidth/8*oG2d.m_uFontHeight); i++) {
		ucOneLetter = oG2d.m_upFontType + i*oG2d.m_uFontWidth/8*oG2d.m_uFontHeight; 
		for (j=0; j<(oG2d.m_uFontWidth/8*oG2d.m_uFontHeight+3)/4; j++) // Generate 1-word of data!!
		{
			for (k=0; k<4; k++) // Generate 1-word of data!!
			{
				uTempData = (u32)ucOneLetter[j*4+k];
				uHostData |= (uTempData << (24 - 8*k));
			}
			*(unsigned int *)(uTextDrawingFbAddr+i*uAddressOffset+j*4)=uHostData;
			uHostData=0;
		}

	}

}

void G2D_SetCoordinateSrcBlock(u32 uStartX, u32 uStartY, u32 uEndX, u32 uEndY)
{

	G2D_CheckFifo(17);

	rG2D_COORD0_X= uStartX;
	rG2D_COORD0_Y= uStartY;
	rG2D_COORD1_X= uEndX;
	rG2D_COORD1_Y= uEndY;	
}

void G2D_SetCoordinateDstBlock(u32 uStartX, u32 uStartY, u32 uEndX, u32 uEndY)
{

	G2D_CheckFifo(17);

	rG2D_COORD2_X= uStartX;
	rG2D_COORD2_Y= uStartY;
	rG2D_COORD3_X= uEndX;
	rG2D_COORD3_Y= uEndY;	
}

void G2D_SetFirstBitBLTData(u32 uFirstData)
{
	G2D_CheckFifo(17);

	rG2D_CMDR2= uFirstData;
}

void G2D_SetNextBitBLTData(u32 uNextData)
{
	G2D_CheckFifo(17);

	rG2D_CMDR3= uNextData;
}

void G2D_SetFirstBitBLTEData(G2D_COLOR eFirstData)
{

	G2D_SetFirstBitBLTData(oG2d.m_uColorVal[eFirstData]);
}

void G2D_SetNextBitBLTEData(G2D_COLOR eNextData)
{
	G2D_SetNextBitBLTData(oG2d.m_uColorVal[eNextData]);
}

void G2D_SetStencilKey(u32 uIsInvOn, u32 uIsAOn, u32 uIsROn, u32 uIsGOn, u32 uIsBOn)
{	
	rG2D_COLORKEY_CNTL= ((uIsInvOn&1)<<4)|((uIsROn&1)<<3)|((uIsGOn&1)<<2)|((uIsBOn&1)<<1)|(uIsAOn&1);
}

void G2D_SetStencilMinMax(u32 uAMin, u32 uAMax, u32 uRMin, u32 uRMax, u32 uGMin, u32 uGMax, u32 uBMin, u32 uBMax, CSPACE eBpp)
{

	switch(eBpp)
	{
		case RGB16:
			rG2D_COLORKEY_DR_MIN= ((uRMin<<3)<<16)|((uGMin<<2)<<8)|(uBMin<<3);
			rG2D_COLORKEY_DR_MAX= ((uRMax<<3)<<16)|((uGMax<<2)<<8)|(uBMax<<3);
			break;
		case RGBA16:
			rG2D_COLORKEY_DR_MIN= ((uAMin&0xff)<<24)|((uRMin&0xff)<<16)|((uGMin&0xff)<<8)|(uBMin&0xff);
			rG2D_COLORKEY_DR_MAX= ((uAMax&0xff)<<24)|((uRMax&0xff)<<16)|((uGMax&0xff)<<8)|(uBMax&0xff);
			break;
		case ARGB16:
			rG2D_COLORKEY_DR_MIN= ((uAMin&0xff)<<24)|((uRMin&0xff)<<16)|((uGMin&0xff)<<8)|(uBMin&0xff);
			rG2D_COLORKEY_DR_MAX= ((uAMax&0xff)<<24)|((uRMax&0xff)<<16)|((uGMax&0xff)<<8)|(uBMax&0xff);
			break;
		case RGB24:
		case RGBX24:		
			rG2D_COLORKEY_DR_MIN= ((uRMin&0xff)<<16)|((uGMin&0xff)<<8)|(uBMin&0xff);
			rG2D_COLORKEY_DR_MAX= ((uRMax&0xff)<<16)|((uGMax&0xff)<<8)|(uBMax&0xff);
			break;
		case RGBA24:
		case ARGB24:
			rG2D_COLORKEY_DR_MIN= ((uAMin&0xff)<<24)|((uRMin&0xff)<<16)|((uGMin&0xff)<<8)|(uBMin&0xff);
			rG2D_COLORKEY_DR_MAX= ((uAMax&0xff)<<24)|((uRMax&0xff)<<16)|((uGMax&0xff)<<8)|(uBMax&0xff);
			break;
		default:
	//		Assert(0);
			break;									
	}

}

void G2D_GetFrmSz(u32 *uG2dWidth, u32 *uG2dHeight)
{
	u32 uMaxScreenVal;

	uMaxScreenVal=rG2D_SC_RES;
	//*uG2dWidth = (uMaxScreenVal&0x7ff)+1;
	//*uG2dHeight = ((uMaxScreenVal>>16)&0x7ff)+1;

	*uG2dWidth = (uMaxScreenVal&0x7ff);
	*uG2dHeight = ((uMaxScreenVal>>16)&0x7ff);
}

void G2D_GetFbAddr(u32 *uG2dFbAddr)
{
	//*uG2dFbAddr= Inp32_0(rG2D_FB_BA);
	//G2dFbAddr = oG2d.m_uFbStAddr;
	*uG2dFbAddr= rG2D_DEST_BASE_ADDR;	
}
/*
void G2D_GetBppMode(CSPACE *eBpp)
{
	u32 uBppVal;

	uBppVal=Inp32_0(rG2D_COLOR_MODE);
	switch(uBppVal&0xf) {
		case 1:
			*eBpp=ARGB8; //15-bpp
			break;
		case 2:
			*eBpp=RGB16; //16-bpp
			break;
		case 4:
			*eBpp=RGB18; // 18-bpp
			break;
		case 8:
			*eBpp=RGB24; // 24-bpp
			break; 
		default:
			*eBpp=RGB16; //16-bpp
			break;
	}		
}
*/
void G2D_GetSrcBppMode(CSPACE *eBpp)
{
	u32 uBppVal;

	uBppVal=rG2D_SRC_COLOR_MODE;
	if (!(uBppVal&G2D_COLOR_YUV_MODE)) //means RGB mode
	{
		switch(uBppVal&0x7) {
			case 0:
				*eBpp=RGB16; //16-bpp
				break;
			case 1:
				*eBpp=RGBA16; //16-bpp
				break;
			case 2:
				*eBpp=ARGB16; //16-bpp
				break;
			case 3:
				*eBpp=RGBA24; // 24-bpp
				break;
			case 4:
				*eBpp=ARGB24; // 24-bpp
				break; 
			case 5:
				*eBpp=RGB24; // 24-bpp
				break; 
			case 6:
				*eBpp=RGBX24; // 24-bpp
				break; 
			default:
				*eBpp=RGB24; //24-bpp
				break;
		}	
	}
}

void G2D_GetDestBppMode(CSPACE *eBpp)
{
	u32 uBppVal;

	uBppVal=rG2D_DEST_COLOR_MODE;
	switch(uBppVal&0x7) {
		case 0:
			*eBpp=RGB16; //16-bpp
			break;
		case 1:
			*eBpp=RGBA16; //16-bpp
			break;
		case 2:
			*eBpp=ARGB16; //16-bpp
			break;
		case 3:
			*eBpp=RGBA24; // 24-bpp
			break;
		case 4:
			*eBpp=ARGB24; // 24-bpp
			break; 
		case 5:
			*eBpp=RGB24; // 24-bpp
			break; 
		case 6:
			*eBpp=RGBX24; // 24-bpp
			break; 
		default:
			*eBpp=RGB24; //24-bpp
			break;
	}			
}

void G2D_SetColorExpansionMethod(bool bIsScr2Scr)
{
	oG2d.m_bIsScr2Scr  = (bIsScr2Scr) ? 1 :	0;
}


void G2D_SetFontAddr(u32 uFontAddr)
{
	oG2d.m_uFontAddr= uFontAddr;
}

void G2D_InterruptEnable(void)
{
	//Outp32(rG2D_INTEN, 0x1<<9);//Enable Interrupt
	rG2D_INTEN= (0x1<<10);//Enable Interrupt
	rG2D_INTC_PEND= 0x80000000;
	bG2dDone=0;
}

void G2D_InterruptDisable(void)
{
	//Outp32(rG2D_INTEN, (Inp32_0(rG2D_INTEN)&~(1<<9)));//Disable Interrupt
	rG2D_INTEN&= ~(1<<10);//Disable Interrupt
}

void G2D_IntEnSelectable(u32 uWhichInt)
{
	rG2D_INTEN= uWhichInt;//Enable Interrupt
	rG2D_INTC_PEND= 0x80000000;
	bG2dDone=0;

⌨️ 快捷键说明

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