我正在研究基于STM32F746的定制板,该定制板集成了LCD和ADV7180视频解码器IC。
我将ADV7180配置为以自由运行模式运行。使用DCMI将相机数据获取到指定的缓冲区。
我正在尝试将YCbCr 4:2:2数据转换为RBG数据。我正在排队活动。 。 从实时事件中,我正在执行以下代码,将其转换为RGB,然后使用ARGB888将其加载到LCD。
LCD_FRAME_BUFFER 0xC0000000 LCD_FRAME_BUFFER_LAYER1 0xC0130000 CAMERA_FRAME_BUFFER 0xC0260000
void LCD_LL_Test(void *pSrc,void *pDst,uint32_t lcd_offset,uint32_t cam_offset)
{
uint32_t * pTempDest = (uint32_t *)(LCD_FRAME_BUFFER_LAYER1);
uint32_t * pTempSource = (uint32_t *)(CAMERA_FRAME_BUFFER+cam_offset);
uint32_t * pFinalDest = (uint32_t *)(LCD_FRAME_BUFFER+lcd_offset);
uint32_t * pFinalSource = (uint32_t *)(LCD_FRAME_BUFFER_LAYER1);
for(uint32_t i = 0; i < (480/2) ; i++ ){
uint32_t te = *pTempSource;
// CB Y1 CR,RESULT
toRGB( (te>>0),(te>>8),(te>>16),(uint32_t *)pTempDest);
pTempDest++;
// CB Y2 CR,RESULT
toRGB( (te>>0),(te>>24),(uint32_t *)pTempDest);
pTempDest++;
pTempSource++;
}
static DMA2D_HandleTypeDef hDma2dEval;
hDma2dEval.Init.Mode = DMA2D_M2M_PFC;
hDma2dEval.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hDma2dEval.Init.OutputOffset = 0;
hDma2dEval.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hDma2dEval.LayerCfg[1].InputAlpha = 0xFF;
hDma2dEval.LayerCfg[1].InputColorMode = DMA2D_RGB888;
hDma2dEval.LayerCfg[1].InputOffset = 0;
hDma2dEval.Instance = DMA2D;
/* DMA2D Initialization */
if(HAL_DMA2D_Init(&hDma2dEval) == HAL_OK)
{
if(HAL_DMA2D_ConfigLayer(&hDma2dEval,1) == HAL_OK)
{
if (HAL_DMA2D_Start(&hDma2dEval,(uint32_t)pFinalSource,(uint32_t )(pFinalDest),BSP_LCD_GetXSize()*4,1) == HAL_OK)
{
/* Polling For DMA transfer */
HAL_DMA2D_PollForTransfer(&hDma2dEval,10);
}
}
}
}
我已经使用LCD_FRAME_BUFFER初始化了LCD,并且我仅使用单层。
我正在转换数据,并使用中间的LCD_FRAME_BUFFER_LAYER1缓冲区将其复制到LCD_FRAME_BUFFER。
DCMI-> CAMERA_FRAME_BUFFER->转换-> LCD_FRAME_BUFFER_LAYER1-> DMA-> LCD_FRAME_BUFFER
但是,我没有将自由运行模式屏幕显示为BLUE屏幕。