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