|
关于lvgl fsmc使用dma加速后,一直显示历程的初始页面,触摸无效,开启显示帧率后,这个画面页不显示帧率的问题,求解答
相关代码如下
dma初始化
void MX_DMA_Init(void)
{
/* DMA controller clock enable */
__HAL_RCC_DMA2_CLK_ENABLE();
/* Configure DMA request hdma_memtomem_dma2_stream0 on DMA2_Stream0 */
hdma_memtomem_dma2_stream0.Instance = DMA2_Stream0;
hdma_memtomem_dma2_stream0.Init.Channel = DMA_CHANNEL_0;
hdma_memtomem_dma2_stream0.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma_memtomem_dma2_stream0.Init.PeriphInc = DMA_PINC_ENABLE;
hdma_memtomem_dma2_stream0.Init.MemInc = DMA_MINC_DISABLE;
hdma_memtomem_dma2_stream0.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_memtomem_dma2_stream0.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_memtomem_dma2_stream0.Init.Mode = DMA_NORMAL;
hdma_memtomem_dma2_stream0.Init.Priority = DMA_PRIORITY_VERY_HIGH;
hdma_memtomem_dma2_stream0.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
hdma_memtomem_dma2_stream0.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_memtomem_dma2_stream0.Init.MemBurst = DMA_MBURST_SINGLE;
hdma_memtomem_dma2_stream0.Init.PeriphBurst = DMA_PBURST_SINGLE;
if (HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK)
{
Error_Handler();
}
/* DMA interrupt init */
/* DMA2_Stream0_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
}
dma中断服务函数
void DMA2_Stream0_IRQHandler(void)
{
LVGL_LCD_FSMC_DMA_pCallback(&hdma_memtomem_dma2_stream0);
HAL_DMA_IRQHandler(&hdma_memtomem_dma2_stream0);
}
disp_flush
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
if(disp_flush_enabled) {
uint16_t height,width;
width=area->x2-area->x1+1; //得到填充的宽度
height=area->y2-area->y1+1; //高度
lcd_set_window(area->x1,area->y1,width,height);
lcd_write_ram_prepare();
HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream0, (uint32_t)color_p, (uint32_t)&LCD->LCD_RAM, height*width); //写数据
}
}
dma中断回调函数
uint32_t xy=0;
void LVGL_LCD_FSMC_DMA_pCallback(DMA_HandleTypeDef *_hdma)
{
xy++; //这里debug,xy加到0x30之后就停了,不知道为什么
//lv_disp_flush_ready(&disp_drv);
lv_disp_flush_ready(lv_disp_get_default()->driver);
}
运行会一直卡在图片上的页面,不显示帧率(已开启显示),大学生入门,求哥哥姐姐们解答
|
-
卡着的页面
|