Partial buffer dosent get to the LCD

Description

hello,
I’m using stm32u5a as controller. in some cases when new frame gets to the LCD some of the partial buffers didn’t get updated values. what’s the main reason of this behavior?

What MCU/Processor/Board and compiler are you using?

stm32U5a

What LVGL version are you using?

V8.1

What do you want to achieve?

what’s the reason and how to solve it.

What have you tried so far?

different LTDC Peripheral Timing Values. Update commands sends on a specific LTDC Line Interrupt. timer1 sent interrupt every 5ms.

Code to reproduce

uint32_t LTDC_LINE_INTE = 854 ;

void TIM1_UP_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_UP_IRQn 0 */

lv_task_handler();

/* USER CODE END TIM1_UP_IRQn 0 /
HAL_TIM_IRQHandler(&htim1);
/
USER CODE BEGIN TIM1_UP_IRQn 1 */

/* USER CODE END TIM1_UP_IRQn 1 */
}

void LTDC_IRQHandler(void)
{
/* USER CODE BEGIN LTDC_IRQn 0 */

if(__HAL_LTDC_GET_FLAG(&hltdc, LTDC_FLAG_LI)){

	__HAL_LTDC_CLEAR_FLAG(&hltdc, LTDC_FLAG_LI);
}

LTDC->IER |= LTDC_IER_LIE;
LTDC->LIPCR = LTDC_LINE_INTE;

// HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);

if(!F_Flag){

	lv_task_handler();

	F_Flag = true;

	HAL_TIM_Base_Start_IT(&htim1);
}

if(LTD_counter++==10)
{
	Graphics_Page_Update();
	LTD_counter=0;
}

/* USER CODE END LTDC_IRQn 0 /
HAL_LTDC_IRQHandler(&hltdc);
/
USER CODE BEGIN LTDC_IRQn 1 */

/* USER CODE END LTDC_IRQn 1 */
}

Screenshot and/or video

Place lv_task_handler into IRQ routine is hardcore. From where you have your code.?

Check out my example, it will work with U5 as well (tested with U5A9), but you do not need cache cleaning/invalidation. On U5 DCache is used only for external memory and GPU2D, but not DMA2D.

Thank you Sir, It works fine now

as the reference code I backed it to the main with 5ms