LTDC STMF32 Problema de doble búfer

0

Estoy tratando de hacer doble búfer usando el hardware, STMF32492I .. así que Primero estoy iniciando dos capas en dos direcciones diferentes.

Luego escribo en el búfer trasero, cambio el búfer trasero ..

Pero el problema es que obtengo varias copias del sprite animado, por lo tanto, estoy dibujando en el búfer frontal varias veces o es necesario borrar el búfer trasero.

Así es como lo estoy haciendo

void main
{
 while (1) 
    {

        LTDC_switch_framebuffer();
        // draw spries
    }
}

void LTDC_switch_framebuffer(void)
{




    LTDC->SRCR = LTDC_SRCR_VBR;                     // reload shadow registers on vertical blank
  while ((LTDC->CDSR & LTDC_CDSR_VSYNCS) == 0);    // wait for reload
    ;
    flip ^= 1;
    BSP_LCD_SetLayerVisible(flip, ENABLE);
    BSP_LCD_SelectLayer(1-flip);


}
    
pregunta Ahmed Saleh

1 respuesta

1

No debe inicializar las dos capas de LTDC para el búfer doble. Como expliqué aquí (vea en " Usando doble búfer ") solo usas una capa y cambias la dirección base de la capa (capa 1 en mi caso). Lo que debe hacer es lo siguiente: configura dos búferes en la memoria (generalmente, la memoria externa, para que quepa todo el tamaño de la pantalla), e inicialice la dirección base de LTDC con la dirección de inicio de uno de ellos (esta es su inicial amortiguador frontal). El LTDC recupera datos continuamente desde el búfer desde la dirección base configurada y cuando termina de actualizar el búfer fuera de pantalla, cambia las direcciones. Por lo tanto, el búfer frontal se convierte en el búfer posterior de la pantalla (donde puede actualizar la escena) y el búfer posterior anterior se convierte en el nuevo búfer frontal y se "presenta" en la pantalla.

El uso de dos capas se usa para superposiciones y otros efectos, ya que las dos capas se presentan en la pantalla al mismo tiempo.

    
respondido por el Luca

Lea otras preguntas en las etiquetas