@@ -35,6 +35,8 @@ static uint32_t __ALIGNED(32) L8_CLUT[256];
3535
3636static uint32_t pend_buffer = 0 ;
3737
38+ volatile uint32_t reloadLTDC_status = 0 ;
39+
3840/* Exported variables --------------------------------------------------------*/
3941DSI_HandleTypeDef dsi;
4042
@@ -321,10 +323,19 @@ uint32_t dsi_getFramebufferEnd(void) {
321323
322324void dsi_drawCurrentFrameBuffer (void ) {
323325 int fb = pend_buffer++ % 2 ;
324-
326+
327+ /* Enable current LTDC layer */
325328 __HAL_LTDC_LAYER_ENABLE (&(ltdc), fb);
329+ /* Disable active LTDC layer */
326330 __HAL_LTDC_LAYER_DISABLE (&(ltdc), !fb);
327- __HAL_LTDC_VERTICAL_BLANKING_RELOAD_CONFIG (&(ltdc));
331+
332+ /* LTDC reload request within next vertical blanking */
333+ reloadLTDC_status = 0 ;
334+ HAL_LTDC_Reload (<dc, LTDC_SRCR_VBR);
335+
336+ while (reloadLTDC_status == 0 ) {
337+ /* Wait till reload takes effect */
338+ }
328339}
329340
330341uint32_t dsi_getCurrentFrameBuffer () {
@@ -385,4 +396,14 @@ void dsi_fillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t yS
385396 }
386397}
387398
399+ /* Handler for LTDC global interrupt request */
400+ extern " C" void LTDC_IRQHandler (void ) {
401+ HAL_LTDC_IRQHandler (<dc);
402+ }
403+
404+ /* Reload LTDC event callback */
405+ void HAL_LTDC_ReloadEventCallback (LTDC_HandleTypeDef *hltdc) {
406+ reloadLTDC_status = 1 ;
407+ }
408+
388409/* *** END OF FILE ****/
0 commit comments