|
|
求助大佬,求助,求助
我移植LVGL9.3,但是显示不正常,有些显示混乱,附件Bug视频的
看了cache配置,也不行, 即使关闭cache配置为strong order 而且void ltdc_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t *color)
{
uint32_t psx, psy, pex, pey; /* 以LCD面板为基准的坐标系,不随横竖屏变化而变化 */
uint32_t timeout = 0;
uint16_t offline;
uint32_t addr;
/* 坐标系转换 */
if (lcdltdc.dir) /* 横屏 */
{
psx = sx;
psy = sy;
pex = ex;
pey = ey;
}
else /* 竖屏 */
{
psx = sy;
psy = lcdltdc.pheight - ex - 1;
pex = ey;
pey = lcdltdc.pheight - sx - 1;
}
SCB_CleanInvalidateDCache();
offline = lcdltdc.pwidth - (pex - psx + 1);
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx));
__HAL_RCC_DMA2D_CLK_ENABLE(); /* 使能DM2D时钟 */
DMA2D->CR &= ~(DMA2D_CR_START); /* 先停止DMA2D */
DMA2D->CR = DMA2D_M2M; /* 存储器到存储器模式 */
DMA2D->FGPFCCR = LTDC_PIXFORMAT; /* 设置颜色格式 */
DMA2D->FGOR = 0; /* 前景层行偏移为0 */
DMA2D->OOR = offline; /* 设置行偏移 */
DMA2D->FGMAR = (uint32_t)color; /* 源地址 */
DMA2D->OMAR = addr; /* 输出存储器地址 */
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16); /* 设定行数寄存器 */
DMA2D->CR |= DMA2D_CR_START; /* 启动DMA2D */
while((DMA2D->ISR & (DMA2D_FLAG_TC)) == 0) /* 等待传输完成 */
{
timeout++;
if (timeout > 0X1FFFFF)break; /* 超时退出 */
}
DMA2D->IFCR |= DMA2D_FLAG_TC; /* 清除传输完成标志 */
SCB_CleanInvalidateDCache();
//SCB_InvalidateDCache();
} 还是有问题 困了好久了,实在不知道为啥了
|
|