Skip to content

Commit bd97eb5

Browse files
dsi: add reload callback check for LTDC layer drawing
1 parent bdb2f2d commit bd97eb5

File tree

1 file changed

+23
-2
lines changed
  • libraries/Arduino_H7_Video/src

1 file changed

+23
-2
lines changed

libraries/Arduino_H7_Video/src/dsi.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ static uint32_t __ALIGNED(32) L8_CLUT[256];
3535

3636
static uint32_t pend_buffer = 0;
3737

38+
volatile uint32_t reloadLTDC_status = 0;
39+
3840
/* Exported variables --------------------------------------------------------*/
3941
DSI_HandleTypeDef dsi;
4042

@@ -321,10 +323,19 @@ uint32_t dsi_getFramebufferEnd(void) {
321323

322324
void 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(&ltdc, LTDC_SRCR_VBR);
335+
336+
while(reloadLTDC_status == 0) {
337+
/* Wait till reload takes effect */
338+
}
328339
}
329340

330341
uint32_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(&ltdc);
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

Comments
 (0)