make DMA2S non blovking
This commit is contained in:
@@ -401,6 +401,7 @@ LV_ATTRIBUTE_FAST_MEM static void fill_normal(const lv_area_t * disp_area, lv_co
|
||||
lv_coord_t line_h = LV_HOR_RES_MAX / draw_area_w;
|
||||
for(y = 0; y <= draw_area_h - line_h; y += line_h) {
|
||||
lv_gpu_stm32_dma2d_blend(disp_buf_first, disp_w, blend_buf, opa, draw_area_w, draw_area_w, line_h);
|
||||
lv_gpu_stm32_dma2d_wait_cb(NULL);
|
||||
disp_buf_first += disp_w * line_h;
|
||||
}
|
||||
|
||||
@@ -757,7 +758,6 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col
|
||||
|
||||
if(opa > LV_OPA_MAX) {
|
||||
#if LV_USE_GPU_NXP_PXP
|
||||
<<<<<<< HEAD
|
||||
if (lv_area_get_size(draw_area) >= GPU_NXP_PXP_BLIT_SIZE_LIMIT) {
|
||||
lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa);
|
||||
return;
|
||||
@@ -792,11 +792,6 @@ LV_ATTRIBUTE_FAST_MEM static void map_normal(const lv_area_t * disp_area, lv_col
|
||||
return;
|
||||
}
|
||||
/* Fall down to SW render in case of error */
|
||||
=======
|
||||
if(lv_area_get_size(draw_area) >= LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT) {
|
||||
lv_gpu_nxp_pxp_blit(disp_buf_first, disp_w, map_buf_first, map_w, draw_area_w, draw_area_h, opa);
|
||||
return;
|
||||
>>>>>>> 4c7a2ae0b7d8f564b22e7774039f6cbe5385926c
|
||||
}
|
||||
#elif LV_USE_GPU_STM32_DMA2D
|
||||
if(lv_area_get_size(draw_area) >= 240) {
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void invalidate_cache(void);
|
||||
static void dma2d_wait(void);
|
||||
static void wait_finish(void);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@@ -101,7 +101,7 @@ void lv_gpu_stm32_dma2d_fill(lv_color_t * buf, lv_coord_t buf_w, lv_color_t colo
|
||||
/* start transfer */
|
||||
DMA2D->CR |= DMA2D_CR_START_Msk;
|
||||
|
||||
dma2d_wait();
|
||||
wait_finish();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,7 +146,7 @@ void lv_gpu_stm32_dma2d_fill_mask(lv_color_t * buf, lv_coord_t buf_w, lv_color_t
|
||||
HAL_DMA2D_ConfigLayer(&hdma2d, 0);
|
||||
HAL_DMA2D_ConfigLayer(&hdma2d, 1);
|
||||
HAL_DMA2D_BlendingStart(&hdma2d, (uint32_t) mask, (uint32_t) buf, (uint32_t)buf, fill_w, fill_h);
|
||||
dma2d_wait();
|
||||
wait_finish();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ void lv_gpu_stm32_dma2d_copy(lv_color_t * buf, lv_coord_t buf_w, const lv_color_
|
||||
|
||||
/* start transfer */
|
||||
DMA2D->CR |= DMA2D_CR_START_Msk;
|
||||
dma2d_wait();
|
||||
wait_finish();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,7 +214,18 @@ void lv_gpu_stm32_dma2d_blend(lv_color_t * buf, lv_coord_t buf_w, const lv_color
|
||||
|
||||
/* start transfer */
|
||||
DMA2D->CR |= DMA2D_CR_START_Msk;
|
||||
dma2d_wait();
|
||||
wait_finish();
|
||||
}
|
||||
|
||||
void lv_gpu_stm32_dma2d_wait_cb(lv_disp_drv_t * drv)
|
||||
{
|
||||
if(drv && drv->wait_cb) {
|
||||
while(DMA2D->CR & DMA2D_CR_START_Msk) {
|
||||
drv->wait_cb(drv);
|
||||
}
|
||||
} else {
|
||||
while(DMA2D->CR & DMA2D_CR_START_Msk);
|
||||
}
|
||||
}
|
||||
|
||||
/**********************
|
||||
@@ -232,9 +243,11 @@ static void invalidate_cache(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void dma2d_wait(void)
|
||||
static void wait_finish(void)
|
||||
{
|
||||
lv_disp_t * disp = _lv_refr_get_disp_refreshing();
|
||||
if(disp->driver.gpu_wait_cb) return;
|
||||
|
||||
while(DMA2D->CR & DMA2D_CR_START_Msk) {
|
||||
if(disp->driver.wait_cb) disp->driver.wait_cb(&disp->driver);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ extern "C" {
|
||||
*********************/
|
||||
#include "../lv_misc/lv_area.h"
|
||||
#include "../lv_misc/lv_color.h"
|
||||
#include "../lv_hal/lv_hal_disp.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -91,6 +92,14 @@ void lv_gpu_stm32_dma2d_copy(lv_color_t * buf, lv_coord_t buf_w, const lv_color_
|
||||
*/
|
||||
void lv_gpu_stm32_dma2d_blend(lv_color_t * buf, lv_coord_t buf_w, const lv_color_t * map, lv_opa_t opa,
|
||||
lv_coord_t map_w, lv_coord_t copy_w, lv_coord_t copy_h);
|
||||
|
||||
|
||||
/**
|
||||
* Can be used as `gpu_wait_cb` in display driver to
|
||||
* let the MCU run while the GPU is working
|
||||
*/
|
||||
void lv_gpu_stm32_dma2d_wait_cb(lv_disp_drv_t * drv);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
Reference in New Issue
Block a user