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

📄 post_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	u32 uGlibStAddr, uPostStAddr;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;

	UART_Printf("[POSTT_SimpleDmaToDma_R2Y2R]\n");

	uSimpleTest = 1;
	POSTT_SetCscTypeDmaToDma_R2Y2R();
		
	//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_InitBase();
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);
	//LCD_InitDISPC1(uLcdHSz, uLcdVSz, 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;
	uPostStAddr = uGlibStAddr + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

#if (POST_IMAGE_SORCE == POST_IMAGE_PATTERN)
	GLIB_Init(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern(uLcdHSz, uLcdVSz);
#elif (POST_IMAGE_SORCE == POST_IMAGE_HEADER)
	POSTT_GetImageFromHeader(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
#endif

	// From RGB To YUV
	UART_Printf("========   RGB -> YUV   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uGlibStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uPostStAddr);
	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
									uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
									1, FALSE, ONE_SHOT, &oPost);
	//POST_InitIpForDmaInDmaOut(	uImgHSz, uImgVSz, uGlibStAddr, eSrcDataFmt, 
		//							uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
			//						1, FALSE, ONE_SHOT, &oPost);	
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));	

	//SaveToFile(POST_YUV_FILE_NAME1, uLcdHSz*uLcdVSz*2, uPostStAddr);
	
#if 0	// R->Y Wide & Narrow check
	{
		int R, G, B, YCbCr,i;
		for(i=0 ; i<uLcdVSz ; i++)
			for(j=0 ; j<uLcdHSz ; j++)
			{
				R = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0xFF0000)>>16;
				G = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0x00FF00)>>8;
				B = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0x0000FF)>>0;
				YCbCr = CSCR2Y_C(R, G, B, 0);
				UART_Printf("YCbCr : 0x%08x\n", YCbCr);
			}
	}
#endif

	// From YUV To RGB
	UART_Printf("========   YUV -> RGB   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uPostStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uLcdStAddr);	
	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt, 
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, FALSE, ONE_SHOT, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));	

#if (POST_IMAGE_BMP_SLIDE)	
	{
		u32 uImageNum;
		UART_Printf("Input the any key to display the other image ('q' : quit)\n");
		uImageNum = 0;
		
		while(UART_Getc() != 'q')
		{
			POSTT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, uImageNum, eSrcDataFmt);

			// RGB -> YUV
			POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
											uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
											1, FALSE, ONE_SHOT, &oPost);
			POST_StartProcessing(&oPost);
			while (!POST_IsProcessingDone(&oPost));	

			//SaveToFile(POST_YUV_FILE_NAME1, uLcdHSz*uLcdVSz*2, uPostStAddr);
			
			// YUV -> RGB
			POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt, 
											uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
											1, FALSE, ONE_SHOT, &oPost);
			POST_StartProcessing(&oPost);
			while (!POST_IsProcessingDone(&oPost));	
			uImageNum++;
		}
	}
#endif	

	UART_Printf("\n");
}


static void POSTT_ComplexDmaToDma_R2Y2R(void)
{
	u32 uGlibStAddr, uPostStAddr;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;

	UART_Printf("[POSTT_ComplexDmaToDma_R2Y2R]\n");

	uSimpleTest = 0;
	POSTT_SetCscTypeDmaToDma_R2Y2R();
	
	//bIsR2Y2RFlag = true;	
	ePostRunMode = ONE_SHOT;

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

	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

#if (POST_IMAGE_SORCE == POST_IMAGE_PATTERN)
	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);
#elif (POST_IMAGE_SORCE == POST_IMAGE_HEADER)
	POSTT_GetImageFromHeader(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
#elif (POST_IMAGE_SORCE == POST_IMAGE_BMP)
	POSTT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 3, eSrcDataFmt);
#endif

	// From RGB To YUV
	UART_Printf("========   RGB -> YUV   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uGlibStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uPostStAddr);	
	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	
	// From YUV To RGB
	UART_Printf("========   YUV -> RGB   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uPostStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uLcdStAddr);		
	POST_InitIp1(	uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt,
					1, false, ONE_SHOT, POST_DMA, POST_DMA, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));	
}


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

	UART_Printf("[POSTT_SimpleFreeRunDmaToDma_R2Y2R_Polling]\n");

	uSimpleTest = 1;
	POSTT_SetCscTypeDmaToDma_R2Y2R();
	
	bIsPollingOrInt = TRUE;

	//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;
	uPostStAddr = uGlibStAddr + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

	uGlibStAddr2 = uPostStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr2 = 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, uPostStAddr, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	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, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	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, &oPost);
	POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oPost);
	POST_StartProcessing(&oPost);

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

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

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

#if (POST_IMAGE_BMP_SLIDE)	
	POSTT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 16, eSrcDataFmt);
	POSTT_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, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	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, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	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, &oPost);
	POST_SetNextFrameStAddr(uPostStAddr, uLcdStAddr, &oPost);
	POST_StartProcessing(&oPost);

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

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

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


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

	uSimpleTest = 1;
	POSTT_SetCscTypeDmaToDma_R2Y2R();
		
	bIsPollingOrInt = 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, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	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, &oPost);
	POST_StartProcessing(&oPost);
	while (!POST_IsProcessingDone(&oPost));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 2\n");

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

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

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

⌨️ 快捷键说明

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