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

📄 post_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	u32 uPostIsrCount, uPostFrameCount;
	
	UART_Printf("[POSTT_SimpleFreeRunDmaToDma_R2R_Int]\n");

	uSimpleTest = 1;
	POSTT_SetCscTypeDmaToDma_R2R();
	
	bIsPollingOrInt = 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;
	uPostIntOccured = FALSE;

	INTC_Enable(NUM_POST0);
	INTC_SetVectAddr(NUM_POST0, PostISRDma);
	POST_EnableInterrupt(POST_LEVEL_INT, &oPost);

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

	POST_StartProcessing(&oPost);

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

#if (POST_IMAGE_BMP_SLIDE)	
	POSTT_GetImageFromBMP(uNxtAddr1, uLcdHSz, uLcdVSz, 11, eSrcDataFmt);
	POSTT_GetImageFromBMP(uNxtAddr2, uLcdHSz, uLcdVSz, 12, eSrcDataFmt);

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

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

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

	}
#endif	

	POST_DisableInterrupt(&oPost);
	POST_ClearPending(&oPost);	
	INTC_Disable(NUM_POST0);
}



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

	uSimpleTest = 0;
	POSTT_SetCscTypeDmaToDma_R2R();

	bIsPollingOrInt = TRUE;
	//bIsR2Y2RFlag = 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;
	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, &oPost); // src. frm. buf. num: 1, double buffering: false

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

	uFrmCnt = 0;

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

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

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


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

	UART_Printf("[POSTT_ComplexFreeRunDmaToDma_R2R_Int]\n");

	uSimpleTest = 0;
	POSTT_SetCscTypeDmaToDma_R2R();
	
	bIsPollingOrInt = false;	
	//bIsR2Y2RFlag = 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;
	uPostIntOccured = FALSE;
	//INTC_InitIp();
	//INTC_SetHandlerAndUnmask(INT_POST, PostISRDma);
	INTC_Enable(NUM_POST0);
	INTC_SetVectAddr(NUM_POST0, PostISRDma);
	POST_EnableInterrupt(POST_LEVEL_INT, &oPost);

	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, &oPost);

	POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oPost);

	POST_StartProcessing(&oPost);

	while(uPostFrameCount < uMaxFrameCnt)
	{
		if(uPostIntOccured == TRUE)
		{
			uPostIsrCount++;
			if(uPostIsrCount == 400)
			{
				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;
		}
	}

	POST_DisableInterrupt(&oPost);
	POST_ClearPending(&oPost);	
	//INTC_Mask(INT_POST);
	INTC_Disable(NUM_POST0);
}


void POSTT_ScaleUpDown_RGB(void)
{
	u32 uGlibStAddr, uGlibStAddr1;
	u32 uBytesPerPixel;
	u32 uScaleOffsetX, uScaleOffsetY;
	u8 uScale;
	u32 uHOffset, uVOffset, uPreHOffset, uPreVOffset, uHRatio, uVRatio;
	s32 nSelDmaCscType_R2R;	

	UART_Printf("[POSTT_ScaleUpDown_RGB]\n");

	while(1)
	{
		UART_Printf("\n");
		UART_Printf("[1] RGB16\n");
		UART_Printf("[2] RGB24\n");
		UART_Printf("\n");

		UART_Printf(">>Select The Source Image Type: ");

		nSelDmaCscType_R2R = UART_GetIntNum();

		if (nSelDmaCscType_R2R == 1 || nSelDmaCscType_R2R == 2 )
		{
			eSrcDataFmt = (nSelDmaCscType_R2R == 1) ? RGB16 : RGB24;
			eDstDataFmt = (nSelDmaCscType_R2R == 2) ? RGB16 : RGB24;
			break;
		}
		else 
			UART_Printf("Invalid Input! Retry It!!\n");
		
	}

	//bIsR2Y2RFlag = false;
	ePostRunMode = ONE_SHOT;

	//LCD_InitLDI(MAIN);
	LCD_InitDISPC(eSrcDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
	LCD_SetWinOnOff(1, WIN0);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uImgHSz = uLcdHSz;	
	uImgVSz = uLcdVSz;
	uSrcStartX = 0; 
	uSrcStartY = 0;
	uSrcCroppedHSz = uLcdHSz;	
	uSrcCroppedVSz = uLcdVSz;
	
	uMidImgHSz = 2048;
	uMidImgVSz = 2048;
	uMidStartX = 0;
	uMidStartY = 0;
	uMidScaledHSz = 2048;
	uMidScaledVSz = 2048;
		
	uDstStartX = 0; 
	uDstStartY = 0;
	uDstScaledHSz = uLcdHSz, 
	uDstScaledVSz = uLcdVSz;	
	
	// To Clear the LCD Display
	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_ClearFrame(C_BLACK);

	uBytesPerPixel = (eSrcDataFmt == RGB16) ? 2: 4;
	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
	uGlibStAddr1 = uGlibStAddr + uMidImgHSz*uMidImgVSz*uBytesPerPixel;
	
	//uSrcStAddr=0;

	// CSC & Scaling the DrawPattern 1
	//GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	//GLIB_DrawPattern(uImgHSz, uImgVSz);
	POSTT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 11, eSrcDataFmt);

	uScaleOffsetX = uMidImgHSz/2;
	uScaleOffsetY = uMidImgVSz/2;
	// generation mid image
	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uGlibStAddr1, eSrcDataFmt,
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oPost);
	POST_StartProcessing1(0, 0, &oPost);
	while (!POST_IsProcessingDone(&oPost));

	// default display image
	POST_InitIp1(	uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz-uScaleOffsetX, uMidScaledVSz-uScaleOffsetY, uGlibStAddr1, eSrcDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eSrcDataFmt,
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oPost);
	POST_StartProcessing1(0, 0, &oPost);
	while (!POST_IsProcessingDone(&oPost));

	UART_Printf("=============================================\n");
	UART_Printf("'w' : Vertical Scale-up,  'x' : Vertical Scale-down\n");
	UART_Printf("'d' : Horizontal Scale-up,  'a' : Horizontal Scale-down\n");
	UART_Printf("=============================================\n");
	UART_Printf("Press 'q' key to exit\n");	

	//RGB24 -> Width : multiple of 1,   RGB16 -> Width : multiple of 2
	while((uScale=UART_Getc()) != 'q')
	{
		switch (uScale)
		{
			//Vetical Scale Up
			case 'w' :
			case 'W' :	POST_CalcurateScaleOffset(	uMidScaledHSz-uScaleOffsetX-uPreHOffset, uMidScaledVSz-uScaleOffsetY-uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oPost, 
													&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
						if(uPreVOffset == uVOffset)
						{
							if(uScaleOffsetY < (uMidImgVSz-uPreVOffset))
								 uScaleOffsetY += uPreVOffset;
						}
						else
						{	
							if(uScaleOffsetY < (uMidImgVSz-uVOffset))
								uScaleOffsetY += uVOffset - (uScaleOffsetY%(uVOffset));
							uPreVOffset = uVOffset;
						}
						break;
			//Vetical Scale Down
			case 'x' :
			case 'X' :	POST_CalcurateScaleOffset(	uMidScaledHSz-uScaleOffsetX+uPreHOffset, uMidScaledVSz-uScaleOffsetY+uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oPost, 
													&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
						if(uPreVOffset == uVOffset)
						{

⌨️ 快捷键说明

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