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

📄 scaler_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	GLIB_ClearFrame(C_BLACK);

	uBytesPerPixel = (eDstDataFmt == RGB16) ? 2: 4;
	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uSrcStAddr=0;

	// CSC & Scaling the DrawPattern 1
#if (POST_IMAGE_SORCE == POST_IMAGE_PATTERN)
	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);
#elif (POST_IMAGE_SORCE == POST_IMAGE_HEADER)
	ScalerT_GetImageFromHeader(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
#endif

	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt,
					2, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);

	UART_Printf("Draw Pattern 1(Frame 0)\n");
	POST_StartProcessing1(0, 0, &oSc);
	while (!POST_IsProcessingDone(&oSc));

	UART_Printf("Enter Any Key\n");
	UART_Getc();
	
	// CSC & Scaling the DrawPattern 2	
	POST_GetSrcStAddr(1, &uSrcStAddr, &oSc);
	GLIB_Init(uSrcStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uImgHSz, uImgVSz);

	UART_Printf("Draw Pattern 2(Frame 1)\n");	
	POST_StartProcessing1(1, 0, &oSc);
	while (!POST_IsProcessingDone(&oSc));	
}


static void ScalerT_SimpleFreeRunDmaToDma_R2R_Polling(void)
{
	u32 uGlibStAddr=0, uGlibStAddr2=0;
	u32 uBytesPerPixel=0;
	u32 uFrmCnt = 0;

	UART_Printf("[ScalerT_SimpleFreeRunDmaToDma_R2R_Polling]\n");

	uSimpleTest = 1;
	ScalerT_SetCscTypeDmaToDma_R2R();

	bScalerIsPollingOrInt = TRUE; // Polling

	//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);

	//uBytesPerPixel = (eDstDataFmt == RGB16) ? 2: 4;
	uBytesPerPixel = 4;
	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uGlibStAddr2 = uGlibStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;

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

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

	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, false, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uGlibStAddr, uLcdStAddr, &oSc);

	uFrmCnt = 0;

	POST_StartProcessing(&oSc);

	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uGlibStAddr2, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uGlibStAddr, 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, 8, eSrcDataFmt);
	ScalerT_GetImageFromBMP(uGlibStAddr2, uLcdHSz, uLcdVSz, 9, eSrcDataFmt);

	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, false, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uGlibStAddr, uLcdStAddr, &oSc);

	uFrmCnt = 0;

	POST_StartProcessing(&oSc);

	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uGlibStAddr2, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uGlibStAddr, uLcdStAddr, &oSc);
		POST_ClearPending(&oSc);

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

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


void ScalerT_SimpleFreeRunDmaToDma_R2R_Int(void)
{
	u32 uBytesPerPixel=0;
	u32 uPostIsrCount, uPostFrameCount;
	
	UART_Printf("[ScalerT_SimpleFreeRunDmaToDma_R2R_Int]\n");

	uSimpleTest = 1;
	ScalerT_SetCscTypeDmaToDma_R2R();
	
	bScalerIsPollingOrInt = TRUE; // Int

	//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);

	//uBytesPerPixel = (eDstDataFmt == RGB16) ? 2: 4;
	uBytesPerPixel = 4;
	uNxtAddr1 = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uNxtAddr2 = uNxtAddr1 + uLcdHSz*uLcdVSz*uBytesPerPixel;

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

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

	//Interrupt Setting
	uPostIsrCount = 0;
	uPostFrameCount = 0;
	uScalerIntOccured = FALSE;

	INTC_Enable(NUM_SCALER);
	INTC_SetVectAddr(NUM_SCALER, ScalerISRDma);
	POST_EnableInterrupt(POST_LEVEL_INT, &oSc);

	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uNxtAddr1, eSrcDataFmt,
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, false, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uNxtAddr1, uLcdStAddr, &oSc);

	POST_StartProcessing(&oSc);

	while(uPostFrameCount < uMaxFrameCnt)
	{
		if(uScalerIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount > 200)
			{
				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(uNxtAddr1, uLcdHSz, uLcdVSz, 11, eSrcDataFmt);
	ScalerT_GetImageFromBMP(uNxtAddr2, uLcdHSz, uLcdVSz, 12, eSrcDataFmt);

	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uNxtAddr1, eSrcDataFmt,
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, false, FREE_RUN, &oSc);
	POST_SetNextFrameStAddr(uNxtAddr1, uLcdStAddr, &oSc);

	uPostFrameCount = 0;
	uPostIsrCount = 0;
	POST_StartProcessing(&oSc);

	while(uPostFrameCount<uMaxFrameCnt)
	{
		if(uScalerIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount > 200)
			{
				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_Disable(NUM_SCALER);
}



void ScalerT_ComplexFreeRunDmaToDma_R2R_Polling(void)
{
	u32 uGlibStAddr, uGlibStAddr2;
	u32 uBytesPerPixel, uFrmCnt;
	
	UART_Printf("[ScalerT_ComplexFreeRunDmaToDma_R2R_Polling]\n");

	uSimpleTest = 0;
	ScalerT_SetCscTypeDmaToDma_R2R();

	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);

	// To Clear the LCD Display
	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

	uBytesPerPixel = (eDstDataFmt == RGB16) ? 2: 4;
	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uGlibStAddr2 = uGlibStAddr + uImgHSz*uImgVSz*uBytesPerPixel;

	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);

	GLIB_Init(uGlibStAddr2, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uImgHSz, uImgVSz);

	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt, 
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc); // src. frm. buf. num: 1, double buffering: false

	POST_SetNextFrameStAddr(uGlibStAddr2, uLcdStAddr, &oSc);
	POST_StartProcessing(&oSc);

	uFrmCnt = 0;

	while(uFrmCnt<uMaxFrameCnt)
	{
		while (!POST_IsProcessingDone(&oSc));			
		
		if (uFrmCnt%2)
			POST_SetNextFrameStAddr(uGlibStAddr, uLcdStAddr, &oSc);
		else
			POST_SetNextFrameStAddr(uGlibStAddr2, uLcdStAddr, &oSc);
		POST_ClearPending(&oSc);

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

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


void ScalerT_ComplexFreeRunDmaToDma_R2R_Int(void)
{
	u32 uBytesPerPixel=0;
	u32 uPostIsrCount, uPostFrameCount;

	UART_Printf("[ScalerT_ComplexFreeRunDmaToDma_R2R_Int]\n");

	uSimpleTest = 0;
	ScalerT_SetCscTypeDmaToDma_R2R();
	
	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);

	// To Clear the LCD Display
	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

	uBytesPerPixel = (eDstDataFmt == RGB16) ? 2: 4;

	uNxtAddr1 = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uNxtAddr2 = uNxtAddr1 + uImgHSz*uImgVSz*uBytesPerPixel;

	GLIB_Init(uNxtAddr1, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);

	GLIB_Init(uNxtAddr2, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uImgHSz, uImgVSz);

	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);

	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uNxtAddr1, eSrcDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt,
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);

	POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);

	POST_StartProcessing(&oSc);

	while(uPostFrameCount < uMaxFrameCnt)
	{
		if(uScalerIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount == 400)
			{
				uPostFrameCount++;

⌨️ 快捷键说明

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