Estoy tratando de dibujar un mapa de bits usando DMA 2D, así que tengo la dirección del destino que es el búfer frontal, y luego leo una línea del mapa de bits, la abrozo usando el DMA 2D ... Obtengo líneas de escaneo , y la imagen de la basura. No estoy seguro de dónde está el problema
void BSP_LCD_DrawBitmap(uint16_t layer,uint32_t X, uint32_t Y, const uint16_t *pBmp)
{
uint32_t index = 0, width = 0, height = 0, bitpixel = 0;
/* Get bitmap data address offset */
index = 0;
/* Read bitmap width */
width = 240;
/* Read bitmap height */
height = 320;
uint16_t address = LtdcHandler.LayerCfg[ActiveLayer].FBStartAdress ;
for (int i = 0 ; i < height ; i++)
{
ConvertLineToRGB565( (uint16_t *)pBmp, (uint16_t *) address , width , CM_RGB565) ;
address += (width*2) ;
pBmp += (width*2) ;
}
}
static void ConvertLineToRGB565(void * pSrc, void * pDst, uint32_t xSize, uint32_t ColorMode)
{
/* Configure the DMA2D Mode, Color Mode and output offset */
Dma2dHandler.Init.Mode = DMA2D_M2M_PFC;
Dma2dHandler.Init.ColorMode = DMA2D_RGB565;
Dma2dHandler.Init.OutputOffset = 0;
/* Foreground Configuration */
Dma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
Dma2dHandler.LayerCfg[1].InputAlpha = 0xFF;
Dma2dHandler.LayerCfg[1].InputColorMode = ColorMode;
Dma2dHandler.LayerCfg[1].InputOffset = 0;
Dma2dHandler.Instance = DMA2D;
/* DMA2D Initialization */
if(HAL_DMA2D_Init(&Dma2dHandler) == HAL_OK)
{
if(HAL_DMA2D_ConfigLayer(&Dma2dHandler, 1) == HAL_OK)
{
if (HAL_DMA2D_Start(&Dma2dHandler, (uint16_t)pSrc, (uint16_t)pDst, xSize, 1) == HAL_OK)
{
/* Polling For DMA transfer */
HAL_DMA2D_PollForTransfer(&Dma2dHandler, 10);
}
}
}
}