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

📄 scaler_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is fiished for pattern 2\n");
	
	// From YUV To RGB
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uPostStAddr2, eMidDataFmt,
								uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
								1, FALSE, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oSc);
	POST_StartProcessing(&oSc);

	uFrmCnt = 0;
	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uPostStAddr2, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oSc);
		POST_ClearPending(&oSc);

		DelayfrTimer(milli, 1000);
		uFrmCnt++;
	}

	POST_StopProcessingOfFreeRun(&oSc);	
	while (!POST_IsProcessingDone(&oSc));	
	POST_ClearPending(&oSc);	

#if (POST_IMAGE_BMP_SLIDE)	
	ScalerT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 16, eSrcDataFmt);
	ScalerT_GetImageFromBMP(uGlibStAddr2, uLcdHSz, uLcdVSz, 17, eSrcDataFmt);

	// From RGB to YUV for pattern 1
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
								uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 1\n");
	
	// From RGB to YUV for pattern 2
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr2, eSrcDataFmt,
								uLcdHSz, uLcdVSz, uPostStAddr2, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is fiished for pattern 2\n");
	
	// From YUV To RGB
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uPostStAddr2, eMidDataFmt,
								uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
								1, FALSE, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oSc);
	POST_StartProcessing(&oSc);

	uFrmCnt = 0;
	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uPostStAddr2, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oSc);
		POST_ClearPending(&oSc);

		DelayfrTimer(milli, 1000);
		uFrmCnt++;
	}

	POST_StopProcessingOfFreeRun(&oSc);	
	while (!POST_IsProcessingDone(&oSc));	
	POST_ClearPending(&oSc);
#endif		
}


static void ScalerT_SimpleFreeRunDmaToDma_R2Y2R_Int(void)
{
	u32 uGlibStAddr, uGlibStAddr2;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;
	u32 uPostIsrCount, uPostFrameCount;
	
	UART_Printf("[ScalerT_SimpleFreeRunDmaToDma_R2Y2R_Int]\n");

	uSimpleTest = 1;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
		
	bScalerIsPollingOrInt = FALSE;

	//LCD_InitLDI(MAIN);
	
#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif

	LCD_SetWinOnOff(1, WIN0);

	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB16) ? 2 : 4;
	uDstBytesPerPixel = (eDstDataFmt == RGB16) ? 2 : 4;

	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uNxtAddr1 = uGlibStAddr + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

	uGlibStAddr2 = uNxtAddr1 + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uNxtAddr2 = uGlibStAddr2 + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

	GLIB_Init(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern(uLcdHSz, uLcdVSz);

	GLIB_Init(uGlibStAddr2, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uLcdHSz, uLcdVSz);

	// From RGB to YUV for pattern 1
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
								uLcdHSz, uLcdVSz, uNxtAddr1, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 1\n");

	// From RGB to YUV for pattern 2
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr2, eSrcDataFmt,
								uLcdHSz, uLcdVSz, uNxtAddr2, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 2\n");

	//Interrupt Setting
	uPostIsrCount = 0;
	uPostFrameCount = 0;
	uScalerIntOccured = FALSE;
	//INTC_InitIp();
	//INTC_SetHandlerAndUnmask(INT_POST, ScalerISRDma);
	INTC_Enable(NUM_SCALER);
	INTC_SetVectAddr(NUM_SCALER, ScalerISRDma);
	POST_EnableInterrupt(POST_LEVEL_INT, &oSc);
	
	// From YUV To RGB
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uNxtAddr1, eMidDataFmt,
								uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt, 
								1, FALSE, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);

	POST_StartProcessing(&oSc);
	
	while(uPostFrameCount < uMaxFrameCnt)
	{
		if(uScalerIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount > 1000)
			{
				uPostFrameCount++;
				
			 	if (uPostFrameCount % 2)
					POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);
				else 
					POST_SetNextFrameStAddr(uNxtAddr1, uLcdStAddr, &oSc);

				if (uPostFrameCount == uMaxFrameCnt)
				{
					POST_StopProcessingOfFreeRun(&oSc);	
					while (!POST_IsProcessingDone(&oSc));	
					uScalerIntOccured = FALSE;
					break;
				}
				uPostIsrCount = 0;
			}
			uScalerIntOccured = FALSE;
		}
	}


#if (POST_IMAGE_BMP_SLIDE)	
	ScalerT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 18, eSrcDataFmt);
	ScalerT_GetImageFromBMP(uGlibStAddr2, uLcdHSz, uLcdVSz, 19, eSrcDataFmt);

	// From RGB to YUV for pattern 1
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
								uLcdHSz, uLcdVSz, uNxtAddr1, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 1\n");

	// From RGB to YUV for pattern 2
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr2, eSrcDataFmt,
								uLcdHSz, uLcdVSz, uNxtAddr2, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 2\n");

	//Interrupt Setting
	uPostIsrCount = 0;
	uPostFrameCount = 0;
	uScalerIntOccured = FALSE;
	//INTC_InitIp();
	//INTC_SetHandlerAndUnmask(INT_POST, ScalerISRDma);
	INTC_Enable(NUM_SCALER);
	INTC_SetVectAddr(NUM_SCALER, ScalerISRDma);
	POST_EnableInterrupt(POST_LEVEL_INT, &oSc);
	
	// From YUV To RGB
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uNxtAddr1, eMidDataFmt,
								uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt, 
								1, FALSE, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);

	POST_StartProcessing(&oSc);
	
	while(uPostFrameCount < uMaxFrameCnt)
	{
		if(uScalerIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount > 1000)
			{
				uPostFrameCount++;
				
			 	if (uPostFrameCount % 2)
					POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);
				else 
					POST_SetNextFrameStAddr(uNxtAddr1, uLcdStAddr, &oSc);

				if (uPostFrameCount == uMaxFrameCnt)
				{
					POST_StopProcessingOfFreeRun(&oSc);	
					while (!POST_IsProcessingDone(&oSc));	
					uScalerIntOccured = FALSE;
					break;
				}
				uPostIsrCount = 0;
			}
			uScalerIntOccured = FALSE;
		}
	}
#endif	

	POST_DisableInterrupt(&oSc);
	POST_ClearPending(&oSc);	
	//INTC_Mask(INT_POST);			
	INTC_Disable(NUM_SCALER);
}


static void ScalerT_ComplexFreeRunDmaToDma_R2Y2R_Polling(void)
{
	u32 uGlibStAddr, uGlibStAddr2, uPostStAddr, uPostStAddr2;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;
	u32 uFrmCnt;

	UART_Printf("[ScalerT_ComplexFreeRunDmaToDma_R2Y2R_Polling]\n");

	uSimpleTest = 0;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
	
	bScalerIsPollingOrInt = true;	
	ePostRunMode = FREE_RUN;
	
	//LCD_InitLDI(MAIN);
#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif
	LCD_SetWinOnOff(1, WIN0);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB24) ? 4 : 2;
	uDstBytesPerPixel = (eDstDataFmt == RGB24) ? 4 : 2;

	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr = uGlibStAddr + uImgHSz*uImgVSz*uSrcBytesPerPixel;

	uGlibStAddr2 = uPostStAddr + uMidImgHSz*uMidImgVSz*uDstBytesPerPixel;
	uPostStAddr2 = uGlibStAddr2 + uImgHSz*uImgVSz*uSrcBytesPerPixel;

	// clear the frame
	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

	// Draw Pattern 1
	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);

	// Draw Pattern 2
	GLIB_Init(uGlibStAddr2, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uImgHSz, uImgVSz);

	// CSC From RGB To YUV For Pattern 1
	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					1, FALSE, ONE_SHOT, POST_DMA, POST_DMA, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	
	// CSC From RGB To YUV For Pattern 2
	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr2, eSrcDataFmt,
					uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr2, eMidDataFmt,
					1, false, ONE_SHOT, POST_DMA, POST_DMA, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	
	// From YUV To RGB
	POST_InitIp1(	uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt, 
					1, false, FREE_RUN, POST_DMA, POST_DMA, &oSc); // src. frm. buf. num: 1, double buffering: disable
	POST_SetNextFrameStAddr(uPostStAddr2, uLcdStAddr, &oSc);
	POST_StartProcessing(&oSc);

	uFrmCnt = 0;
	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uPostStAddr2, uLcdStAddr, &oSc);
		POST_ClearPending(&oSc);

		DelayfrTimer(milli, 500);
		uFrmCnt++;
	}

	POST_StopProcessingOfFreeRun(&oSc);	
	while (!POST_IsProcessingDone(&oSc));	
}


static void ScalerT_ComplexFreeRunDmaToDma_R2Y2R_Int(void)
{
	u32 uGlibStAddr, uGlibStAddr2;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;
	u32 uPostIsrCount, uPostFrameCount;

	UART_Printf("[ScalerT_ComplexFreeRunDmaToDma_R2Y2R_Int]\n");

	uSimpleTest = 0;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
	
	bScalerIsPollingOrInt = false;
	ePostRunMode = FREE_RUN;

	//LCD_InitLDI(MAIN);
#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif
	LCD_SetWinOnOff(1, WIN0);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB24) ? 4 : 2;
	uDstBytesPerPixel = (eDstDataFmt == RGB24) ? 4 : 2;

	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uNxtAddr1 = uGlibStAddr + uImgHSz*uImgVSz*uSrcBytesPerPixel;

	uGlibStAddr2 = uNxtAddr1 + uMidImgHSz*uMidImgVSz*uDstBytesPerPixel;
	uNxtAddr2 = uGlibStAddr2 + uImgHSz*uImgVSz*uSrcBytesPerPixel;

	// clear the frame
	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

	// Draw Pattern 1
	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);

	// Draw Pattern 2
	GLIB_Init(uGlibStAddr2, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uImgHSz, uImgVSz);

	// CSC From RGB To YUV For Pattern 1
	POS

⌨️ 快捷键说明

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