@@ -35,6 +35,8 @@ static uint32_t __ALIGNED(32) L8_CLUT[256];
35
35
36
36
static uint32_t pend_buffer = 0 ;
37
37
38
+ volatile uint32_t reloadLTDC_status = 0 ;
39
+
38
40
/* Exported variables --------------------------------------------------------*/
39
41
DSI_HandleTypeDef dsi;
40
42
@@ -321,10 +323,19 @@ uint32_t dsi_getFramebufferEnd(void) {
321
323
322
324
void dsi_drawCurrentFrameBuffer (void ) {
323
325
int fb = pend_buffer++ % 2 ;
324
-
326
+
327
+ /* Enable current LTDC layer */
325
328
__HAL_LTDC_LAYER_ENABLE (&(ltdc), fb);
329
+ /* Disable active LTDC layer */
326
330
__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
+ }
328
339
}
329
340
330
341
uint32_t dsi_getCurrentFrameBuffer () {
@@ -385,4 +396,14 @@ void dsi_fillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t yS
385
396
}
386
397
}
387
398
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
+
388
409
/* *** END OF FILE ****/
0 commit comments