📄 scaler_test.c
字号:
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 + -