示例#1
0
void Capture_XY(void)
{
	//u32 uXDat = 0;
	//u32 uYDat = 0;

	UART_Printf("\n\n[ADCTS touch screen Tracking test.]\n");

	ADCTS_Init();

	g_oADCTSInform.ucTouchStatus	=	ADCTS_TOUCH_INIT;
	ADC_InitADCCON();
	ADCTS_SetDelay(50000);

	ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);

	Delay(10000);

	INTC_SetVectAddr(NUM_PENDNUP, ADCTS_ISR);
	INTC_Enable(NUM_PENDNUP);

    	UART_Printf("\nPress any key to exit!!!\n");
    	UART_Printf("\nStylus Down, please...... \n");

//	while(!GetKey())
//	{
		if (g_oADCTSInform.ucTouchStatus == ADCTS_TOUCH_DOWN)
		{
			while( ADCTS_GetXPStylusIntState() == STYLUS_DOWN )
			{
				ADC_InitADCCON();
				ADCTS_SetMeasureMode(eADCTS_MEASURE_AUTO_SEQ);

				ADC_EnableStart(ENABLE);

				while(! (ADC_IsAfterStartup() )) ;	//	Wait for begin sampling
				while (! (ADC_IsEOCFlag()));		//	Wait for the EOC

				uXDat	= ADCTS_GetXPData();
				uYDat	= ADCTS_GetYPData();

				UART_Printf("X : %f, Y : %f\n",uXDat,uYDat);
				ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);
				ADCTS_SetStylusDetectMode(STYLUS_UP);
				Delay(300);
			}
		}
//		else if (g_oADCTSInform.ucTouchStatus == ADCTS_TOUCH_UP)
//		{
//			if ( ADCTS_GetXPStylusIntState() == STYLUS_UP )
//			{
//				ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);
//			}
//		}
//	}

//	INTC_Disable(NUM_PENDNUP);
	UART_Printf("\n\n[ADCTS touch screen Tracking test End.]\n");	

}
示例#2
0
//////////
// Function Name : Isr_UsbOtg
// Function Description : USB OTG ISR
// Input : NONE
// Output : NONE
// Version : 
void __irq Isr_UsbOtg(void)
{
	INTC_Disable(NUM_OTG);
	
	OTGDEV_HandleEvent();
	
	INTC_Enable(NUM_OTG);
	
	INTC_ClearVectAddr();
}
示例#3
0
//////////
// Function Name : IrDA_Fifo_Tx
// Function Description : This function select FIR/MIR mode and Interrupt/DMA mode to test IrDA FIFO Tx
// Input : NONE
// Output : NONE
// Version : v0.1
void IrDA_Fifo_Tx(void)
{
	s32 iMode;
	s32 sSelect;
	s32 sClk;
	u8 cSelPort;

	UART_Printf("Which Port do you want to use?\n");
	UART_Printf("Port 2, 3 : ");
	cSelPort = (u8)UART_GetIntNum();
	if(cSelPort <2 || cSelPort >3)
		cSelPort = 2;

	UART_Printf("\nSelect Operation Clock Source     1. Ext_48Mhz   2.MPLL   3.EPLL : \n" );
	sClk = UART_GetIntNum();
	IrDA_ClkSrc((eIrDA_ClkSrc)sClk);
	
	IrDA_SetPort(cSelPort);

	UART_Printf("\nSelect transfering mode	1. FIR(D)    2. MIR full  3. MIR half : \n");
	iMode = UART_GetIntNum() - 1;
	if (iMode == -2) 
		iMode = 0; 

	
	UART_Printf("IrDA Interrupt Tx Test\n");
	UART_Printf("Select control mode : 1. Interrupt(D)    2. DMA\n");
	sSelect = UART_GetIntNum();
	if(sSelect == -1)
		sSelect = 1;

	if(sSelect == 2)
		{
		IrDA_IntClear();	
		Test_Irda_Fifo_Dma_Tx(iMode, PREAMBLE_VALUE, STARTFLAG_VALUE, TXFL_DMAVALUE, TXTR_DMAVALUE);
		}
	else
		{
		// Register IrDA ISR
		INTC_SetVectAddr(NUM_IRDA,Isr_IrDA_Int_Tx);
		INTC_Enable(NUM_IRDA);
		IrDA_IntClear();	
		Irda_Fifo_Int_Tx(iMode, PREAMBLE_VALUE, STARTFLAG_VALUE, TXFL_VALUE, TXTR_VALUE);
		}
	IrDA_Reset();
	IrDA_ReturnPort();
}
示例#4
0
文件: timer.c 项目: hylu/s3c6410_ucos
void TIMER_OSREQUEST(void)
{
	int i;
	unsigned long *p;
	unsigned long tv;

	S3C64XX_INTERRUPT *const interrupt0 = (S3C64XX_INTERRUPT *)0x71200000;
	S3C64XX_INTERRUPT *const interrupt1 = (S3C64XX_INTERRUPT *)0x71300000;
	S3C64XX_TIMERS *const timers = (S3C64XX_TIMERS *)0x7F006000;
	S3C64XX_GPN *const gpn = (S3C64XX_GPN *)0x7f008830;
	S3C64XX_EINT0 *const eint0 = (S3C64XX_EINT0 *)0x7f008900;
#if 0    
	p = (unsigned long *)0x71200100;
	for(i=0;i<32;i++)    
	{
		*p = (unsigned long)(__ENTRY + 0x18);
		p++ ;
	}
	p = (unsigned long *)0x71300100;
	for(i=0;i<32;i++)    
	{
		*p = (unsigned long)(__ENTRY+0x18);    
		p++;
	}
   
	gpn->GPNCON = 0xaaa;
	gpn->GPNPUD = 0xaaa; /*0 1 2 3 up pull*/
	eint0->CON0 = 0x444;
	eint0->FLTCON0= 0xcfcfcfcf;
	eint0->MASK = 0xffffffc0;

	interrupt0->INTSELECT = 0x00000000;        
	interrupt1->INTSELECT = 0x00000000;
#endif
	
//	timers->TCFG0 = 0x0f00;
	//tv = get_PCLK() / (2 * 16 * 100);
	//timers->TCNTB4 = tv; //0x512d;


#define TCON_4_AUTO        (1 << 22) 
#define TCON_4_UPDATE	    (1 << 21) 
#define TCON_4_ONOFF	    (1 << 20) 
#define COUNT_4_ON        (TCON_4_ONOFF*1)
#define _ISR_STARTADDRESS	0xc7ff7e00
#define pISR_TIMER4	    (*(unsigned *)(_ISR_STARTADDRESS+0x90))

	
	/* auto load, manual update of Timer 4 */
//	timers->TCON = (timers->TCON & ~0x00700000) | TCON_4_AUTO  | TCON_4_UPDATE;
	/* auto load, start Timer 4 */
//	timers->TCON = (timers->TCON & ~0x00700000) | TCON_4_AUTO  | COUNT_4_ON;
//	pISR_TIMER4 = (unsigned)Isr_TIMER4;
	
	// 打开TIMER4中断允许
//	timers->CSTAT |= 0x10;    
//	interrupt0->INTENABLE |= (1<<28); // enable timer4 
//	interrupt0->INTENABLE |= (3 << 0); // enable vic0_int0 vic0_int1
//	g_uIntCounter4 = 0;    
#if 1    
	PWM_stopAll();	// stop timers

	g_uIntCounter4 = 0;
	
//	pISR_TIMER4 = (unsigned)Isr_TIMER4;	
	INTC_SetVectAddr(NUM_TIMER4,Isr_TIMER4);
	INTC_Enable(NUM_TIMER4);
	
	PWM_Select(4,255,0,30000,15000,0,0,0,1,0,1);
#endif
//	INTC_Disable(NUM_TIMER0);

}
示例#5
0
//////////
// Function Name : EintSW_Test
// Function Description : SMDK6410 EINT SW Test
// Input : 	None
// Output :	None 
// Version : v0.1
void EintSW_Test(void)
{

	u32  usel;
	u32 uEintNo, uFltWidth ;
	u32  uIntType, uFltType;

	UART_Printf("[External Interrupt Test ]\n");
	UART_Printf("\nSelect EINT SW : 0:EINT9, 1:EINT10, 2:EINT11	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	GPIO_Init();
	
	switch(usel)
	{
		case 0: 
				UART_Printf("Selected EINT9 SW..... \n");
				uEintNo = 9;
				GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1,  Isr_Eint9);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
               
		case 1: 
				UART_Printf("Selected EINT10 SW ..... \n");
			     	uEintNo = 10;
			     	GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1, Isr_Eint10);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
		case 2: 
				UART_Printf("Selected EINT11 SW ..... \n");
				uEintNo = 11;
				GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1,  Isr_Eint11);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
			     	
		default : Assert(0);
	}
   
	
	UART_Printf("\nSelect Int. Type : 0:Low Level,  1:High Level,  2:Falling Edge,  3:Rising Edge, 4:Both Edge	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	switch(usel)
	{
		case 0: 
				uIntType= Low_Level;
			     	break;       
		case 1: 
				uIntType= High_Level;
			     	break;
		case 2: 
				uIntType= Falling_Edge;
			     	break;
		case 3: 
				uIntType=Rising_Edge;
			     	break;
	     	case 4: 
				uIntType=Both_Edge;
			     	break;
		default : Assert(0);
	}

	UART_Printf("\nSelect Filter Type : 0:Filter Disable,  1: Delay Filter,  2:Digital Filter	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	switch(usel)
	{
		case 0: 
				uFltType= eDisFLT;
			     	break;       
		case 1: 
				uFltType= eDLYFLT;
			     	break;
		case 2: 
				uFltType= eDIGFLT;
				UART_Printf("\nEnter Filter Width [1~0x3F] :    ");
				uFltWidth = UART_GetIntNum();
				UART_Printf("\n");			
			     	break;
		default : Assert(0);
	}


	GPIO_SetEint0(uEintNo, uIntType, (FLT_eTYPE)uFltType, uFltWidth);
	GPIO_EINT0DisMask(uEintNo);

	g_IntCnt = 0;
	UART_Printf("Press the EINT buttons or Press any key to exit.\n");


	UART_Getc();
	UART_Printf("EINT interrupt is occurred %d.\n", g_IntCnt);


	GPIO_EINT0EnMask(uEintNo);
	INTC_Disable(NUM_EINT1);
	
}
示例#6
0
int Transform(void)
{	
	unsigned int nNumOfVertices;
	unsigned int nNumofData;
	//unsigned int ConstFloatAddr;
	bool bSwapBackBuffer = false;
    	unsigned int nNumTrisCube = 12;
	unsigned int nNumAttributesCube = 12;

	FGL_TexUnitParams tuParams;
    
	Matrix4 matMV, matProj, matMVP;
	//float 	fXAng = 0.0f;
	// Initial Angle
	float 	fXAng = 45.0f;
	float 	fYAng = 45.0f;
	
	float		fX=0, fY=0;

	#if 1	// touch
	
	UART_Printf("\n\n[ADCTS touch screen Tracking test.]\n");

	ADCTS_Init();

	g_oADCTSInform.ucTouchStatus	=	ADCTS_TOUCH_INIT;
	ADC_InitADCCON();
	ADCTS_SetDelay(50000);

	ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);

	Delay(10000);

	INTC_SetVectAddr(NUM_PENDNUP, ADCTS_ISR);
	INTC_Enable(NUM_PENDNUP);

    	UART_Printf("\nPress any key to exit!!!\n");
    	UART_Printf("\nStylus Down, please...... \n");

	ADC_InitADCCON();
	ADCTS_SetMeasureMode(eADCTS_MEASURE_AUTO_SEQ);
	ADC_EnableStart(ENABLE);

	if (g_oADCTSInform.ucTouchStatus == ADCTS_TOUCH_DOWN)
	{
		while( ADCTS_GetXPStylusIntState() == STYLUS_DOWN )
		{
			ADC_InitADCCON();
			ADCTS_SetMeasureMode(eADCTS_MEASURE_AUTO_SEQ);
			ADC_EnableStart(ENABLE);

			while(! (ADC_IsAfterStartup() )) ;	//	Wait for begin sampling
			while (! (ADC_IsEOCFlag()));		//	Wait for the EOC

			uXDat	= ADCTS_GetXPData();
			uYDat	= ADCTS_GetYPData();

			UART_Printf("a/d X : %f, a/d Y : %f\n",uXDat,uYDat);
			ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);
			ADCTS_SetStylusDetectMode(STYLUS_UP);
			Delay(300);
		}
	}
//		else if (g_oADCTSInform.ucTouchStatus == ADCTS_TOUCH_UP)
//		{
//			if ( ADCTS_GetXPStylusIntState() == STYLUS_UP )
//			{
//				ADCTS_SetMeasureMode(eADCTS_MEASURE_FOR_STYLUS);
//			}
//		}

		
	#endif

    
	float Cube_Data[] =
	{
		//  x      y      z     w     r     g     b     a     s     t     r     q
		// FRONT
		-0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		// BACK
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// LEFT
		-0.3f, -0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f,  0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// RIGHT
		 0.3f, -0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		// TOP
		-0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f,  0.3f,  0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		 0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		-0.3f,  0.3f, -0.3f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		// BOTTOM
		-0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  0.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f,
		-0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f, -0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  1.f,  0.f,  1.f,
		 0.3f, -0.3f,  0.3f,  1.f,  0.f,  1.f,  1.f,  0.f,  0.f,  0.f,  0.f,  1.f

	};

	matProj.SetAsPerspectiveMatrix(60, 800./480., 0.1, 100);

	UART_Printf("Transform Demo Test~~~\n");

	if (fglLoadVShader(Transform_vsa) != FGL_ERR_NO_ERROR)
	{
		return ERROR;
    	}

    	if (fglLoadPShader(Transform_psa) != FGL_ERR_NO_ERROR)
	{
		return ERROR;
    	}
    

#if 0
	Matrix4 matMVP(1.707107f,  0.0f,           1.707107f,   0.0f,
				    1.207107f,  1.707107f,   -1.207107f, 0.0f,
				    0.501001f,  -0.708522f, -0.501001f, 1.302803f,
				    0.5f,      	 -0.707107f, -0.5f,      	    1.5f);

    	fglWriteVertexShaderConstFloat(0, 16, matMVP.m[0]);
#endif


	drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
	drvsys_clear_buf((unsigned int*)FIMG_COLOR_BUFFER, CLEAR_SCREEN_SIZE, 0x0);

	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status

	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX0, 0x02020100);
	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX1, 0x07060504);
	fglSetVShaderAttribTable(FGL_OUTPUT_ATTRIB_IDX2, 0x0B0A0908);

	fglVSSetAttribNum(3);
	fglPSSetAttributeNum(2);

	// Raster engine SFR set
	fglSetFaceCullControl(FGL_TRUE, FGL_FALSE/*CCW*/, FGL_FACE_BACK);
	//FGL_DPFAPI( fglSetLODControl(0x0000003F) );
	fglSetLODRegister(FGL_LODCOEFF_ENABLE_ALL,	FGL_LODCOEFF_ENABLE_ALL,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE,
						FGL_LODCOEFF_DISABLE,	FGL_LODCOEFF_DISABLE);


	// Per-fragment Unit SFR set
	fglSetZBufBaseAddr(FIMG_DEPTH_BUFFER);
	fglSetDepthParams(FGL_COMP_LESS);
	fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_TRUE);

	// Primitive Engine SRF Set
	FGL_Vertex Vtx;
	Vtx.prim = FGL_PRIM_TRIANGLES;
	Vtx.enablePointSize = FGL_FALSE;
	Vtx.numVSOut = 2;
	Vtx.shadeModel = FGL_SHADING_SMOOTH;
	Vtx.colorAttribIdx = 0;
	fglSetVertex(&Vtx); // Vertex context register

    	// Texture Unit SFR Setting
    	tuParams.eType = FGL_TEX_2D;
    	tuParams.eColorkey = FGL_CKEY_DISABLE;
    	tuParams.bUseExpansion = FGL_FALSE;
    	tuParams.ePaletteFormat = FGL_PALETTE_ARGB8888;
    	tuParams.eFormat = FGL_TEXEL_ARGB1555;
    	tuParams.eUMode = FGL_TEX_WRAP_REPEAT;
    	tuParams.eVMode = FGL_TEX_WRAP_REPEAT;
    	tuParams.bIsNonparametric = FGL_FALSE;
    	tuParams.bUseMagFilter = FGL_TRUE;
    	tuParams.bUseMinFilter = FGL_TRUE;    	
    	//tuParams.bUseMinFilter = FGL_FALSE;    	
    	tuParams.eMipMapFilter = FGL_FILTER_LINEAR;
    	tuParams.uUSize = 256;
    	tuParams.uVSize = 256;
    	tuParams.uPSize = 1;
    	fglSetTexUnitParams(0, &tuParams);
	fglSetTexBaseAddr(0, FIMG_TEXTURE_MEMORY);

	// Host Interface SFR Set
	FGL_HInterface HInterface;
	HInterface.enableAutoInc = FGL_TRUE;
	HInterface.enableVtxBuffer = FGL_FALSE;
	HInterface.enableVtxCache = FGL_FALSE;	
	HInterface.idxType = FGL_INDEX_DATA_UINT;
	HInterface.numVSOut = 3;
	fglSetHInterface(&HInterface);

	FGL_Attribute HIAttr;
	HIAttr.bEndFlag = FGL_FALSE;
	HIAttr.type = FGL_ATTRIB_DATA_FLOAT;
	HIAttr.numComp = 4;
	HIAttr.srcW = FGL_ATTRIB_ORDER_4TH;
	HIAttr.srcZ = FGL_ATTRIB_ORDER_3RD;
	HIAttr.srcY = FGL_ATTRIB_ORDER_2ND;
	HIAttr.srcX = FGL_ATTRIB_ORDER_1ST;
	fglSetAttribute(0, &HIAttr);
	fglSetAttribute(1, &HIAttr);
	HIAttr.bEndFlag = FGL_TRUE;
	fglSetAttribute(2, &HIAttr);

	nNumOfVertices = nNumTrisCube * 3;
	nNumofData = nNumAttributesCube * nNumOfVertices;

	//while(1)
	while(GetKey() == 0)
	{
		matMV.LoadIdentity();
		matMVP.LoadIdentity();
		matMV.Rotate(1,0,0,fXAng);
		matMV.Rotate(0,1,0,fYAng);
		//matMV.Translate(0, 0, -1.1);
		matMV.Translate(fX, fY, -1.1);
		matMVP = matProj*matMV;

	      fglWriteVertexShaderConstFloat(0, 16, matMVP.m[0]);
	
	unsigned int uiDummy = 0xFFFFFFFF;
	fglSendToFIFO(4, &nNumOfVertices);
	fglSendToFIFO(4, &uiDummy);

	fglSysTransferToPort( (unsigned int *)Cube_Data, nNumofData);

	fglFlush(FGL_PIPESTATE_ALL);	// Pipeline status
		fglClearCache(FGL_CACHECTL_INIT_ALL);

#if 1
		//fXAng += 0.0872664f;  // 5 degree
		//fYAng += 0.1745328f;  // 10 degree
		fXAng += 2.0f;  // 5 degree
		fYAng += 5.0f;  // 10 degree
		
		//if(fXAng > 2*PI) fXAng = 0.0f;
		//if(fYAng > 2*PI) fYAng = 0.0f;	
		if(fXAng > 360.f) fXAng = 0.0f;
		if(fYAng > 360.f) fYAng = 0.0f;			
#endif

		if(bSwapBackBuffer == false) 
		{
			#if 0
			fglSwapBuffer(0);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(0x65000000+(CLEAR_SCREEN_SIZE)), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(0x65000000);
			bSwapBackBuffer = true;
			#else
			fglSwapBuffer(1);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(FIMG_COLOR_BUFFER), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(FIMG_COLOR_BUFFER);
			bSwapBackBuffer = true;
			#endif

		}
		else
		{	
			#if 0	// ori
			fglSwapBuffer(1);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(0x65000000+(2*CLEAR_SCREEN_SIZE)), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(0x65000000+(CLEAR_SCREEN_SIZE));
			bSwapBackBuffer = false;

			#else
			fglSwapBuffer(0);
			drvsys_clear_buf((unsigned int*)FIMG_DEPTH_BUFFER, CLEAR_SCREEN_SIZE, 0xFFFFFFFF);
			drvsys_clear_buf((unsigned int*)(FIMG_COLOR_BUFFER+CLEAR_SCREEN_SIZE), CLEAR_SCREEN_SIZE, 0xFF000000);
			fglSetColorBufBaseAddr(FIMG_COLOR_BUFFER+(CLEAR_SCREEN_SIZE));
			bSwapBackBuffer = false;
			#endif
		} 

		#if 1	// TOUCH

		Delay(10);
		//Capture_XY();
		fX = (( uXDat-210)/310)-1;
		fY = ((uYDat-300)/200)-1;
		UART_Printf("X = %.2f, Y = %.2f\n", fX, fY);
		
		#endif
	}


	fglSetFaceCullControl(FGL_FALSE, FGL_FALSE, FGL_FACE_BACK);
	fglSetLODControl(0x0);
    	fglEnablePerFragUnit(FGL_PF_DEPTH, FGL_FALSE);

	//INTC_Disable(NUM_PENDNUP);
		
	return NO_ERROR;
	
}