硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1102|回复: 17
收起左侧

[DMA2D] H750 DMA2D诡异问题,求助硬汉哥和各路大神

[复制链接]

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2022-4-24 00:11:06 | 显示全部楼层 |阅读模式
H750 FMC+DMA2D刷RGB565图片,TFTLCD显示图片会撕裂错位,隔几行会多几个黑色像素,导致后面图片数据逐渐错开了。配置不同的行和列分配,现象还不一样,有好有坏。
H750 480M,内部FLASH跑程序,图片在AXI RAM里
正常和异常详细对比见图

正常和异常配置对比

正常和异常配置对比
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-24 00:17:51 | 显示全部楼层
如果是正常调用这种
DMA2D_Copy(width, height, 0, 0, (uint32_t)bitmap, 0xC0800000);
那更严重,每行都会莫名其妙多四五个黑色像素点,错位更严重了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-4-24 01:51:45 | 显示全部楼层
lzhtem 发表于 2022-4-24 00:17
如果是正常调用这种
DMA2D_Copy(width, height, 0, 0, (uint32_t)bitmap, 0xC0800000);
那更严重,每行都 ...

分享下图片和你要绘制的目标位置,我帮你测试下。
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-24 20:58:02 | 显示全部楼层
@eric2013,感谢硬汉哥

关键代码.zip

7.58 KB, 下载次数: 1

回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-24 20:58:56 | 显示全部楼层
本帖最后由 lzhtem 于 2022-4-24 21:31 编辑
eric2013 发表于 2022-4-24 01:51
分享下图片和你要绘制的目标位置,我帮你测试下。

附件在上一楼的回复中附上了。感谢硬汉哥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-4-25 17:14:23 | 显示全部楼层
帮你用我们V7板子测试了下,没问题。


image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-4-25 17:15:32 | 显示全部楼层
我的测试代码
[C] 纯文本查看 复制代码
	/* 第3个图:显示RGB565位图 ##############################################################*/
	LCD_DispStr(328, 2, "刷RGB565位图", &tFont);
	_DMA2D_Copy((uint32_t *)bitmapStLogo_162x124,                              /* 位图地址 */
			    (uint32_t *)(SDRAM_LCD_BUF1 + g_LcdWidth*20*2 + 328*2),       /* 显示起始地址(328, 20) */  
			    162,                                                          /* 位图长 */
			    124,                                                          /* 位图高 */
			    0,                                                            /* 位图行偏移 */
			    g_LcdWidth-162,                                               /* 目标区行偏移 */
				LTDC_PIXEL_FORMAT_RGB565);                                    /* 目标区颜色格式 */



[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: _DMA2D_Copy
*	功能说明: 通过DMA2D从前景层复制指定区域的颜色数据到目标区域
*	形    参: pSrc          颜色数据源地址
*             pDst          颜色数据目的地址
*             xSize         目的区域的X轴大小,即每行像素数
*             ySize         目的区域的Y轴大小,即行数
*             OffLineSrc    前景层图像的行偏移
*             OffLineDst    输出的行偏移
*             PixelFormat   目标区颜色格式
*	返 回 值: 无
*********************************************************************************************************
*/
static void _DMA2D_Copy(void * pSrc, 
	                    void * pDst, 
						uint32_t xSize, 
						uint32_t ySize, 
						uint32_t OffLineSrc, 
						uint32_t OffLineDst, 
						uint32_t PixelFormat) 
{

	/* DMA2D采用存储器到存储器模式, 这种模式是前景层作为DMA2D输入 */  
	DMA2D->CR      = 0x00000000UL | (1 << 9);
	DMA2D->FGMAR   = (uint32_t)pSrc;
	DMA2D->OMAR    = (uint32_t)pDst;
	DMA2D->FGOR    = OffLineSrc;
	DMA2D->OOR     = OffLineDst;
	
	/* 前景层和输出区域都采用的RGB565颜色格式 */
	DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_RGB565;
	DMA2D->OPFCCR  = LTDC_PIXEL_FORMAT_RGB565;
	
	DMA2D->NLR     = (uint32_t)(xSize << 16) | (uint16_t)ySize;

	/* 启动传输 */
	DMA2D->CR   |= DMA2D_CR_START;   

	/* 等待DMA2D传输完成 */
	while (DMA2D->CR & DMA2D_CR_START) {} 
}

回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-25 22:47:25 | 显示全部楼层
eric2013 发表于 2022-4-25 17:15
我的测试代码
[mw_shl_code=c,true]        /* 第3个图:显示RGB565位图 ###################################### ...

用了一模一样的代码刷DMA2D,现象一模一样,都是错位,刷RAM就行一模一样,刷FMC的8080屏幕就不行错位,找不出原因
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-25 23:57:21 来自手机 | 显示全部楼层

由手机上传

由手机上传

由手机上传

由手机上传


我造了一个最严重的情况,黄色为WR信号,绿色为DB,发白色时DB理论全为高,正常的波形的确全为高,异常的波形有低电平,就形成了黑色像素,造成图片错位了
硬汉哥帮忙再看看,感谢
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-26 00:07:01 来自手机 | 显示全部楼层

由手机上传

由手机上传



补充问题现象。正常显示时,会有黑色像素,把图像都错位了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2022-4-26 00:15:07 | 显示全部楼层
lzhtem 发表于 2022-4-26 00:07
补充问题现象。正常显示时,会有黑色像素,把图像都错位了

我知道怎么回事了,我以为你这个是RGB接口显示屏。

你这个是FMCJ接口屏,这种屏你得开窗测试啊。图片多大,你就开多大的窗口,这里的窗口是指的显示屏的窗口。
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-26 00:40:58 | 显示全部楼层
eric2013 发表于 2022-4-26 00:15
我知道怎么回事了,我以为你这个是RGB接口显示屏。

你这个是FMCJ接口屏,这种屏你得开窗测试啊。图片 ...

刷图片前,会先设置开始结束的xy地址。
我刚改HAL库测试效果也一样。。。
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-26 22:49:37 | 显示全部楼层
eric2013 发表于 2022-4-26 00:15
我知道怎么回事了,我以为你这个是RGB接口显示屏。

你这个是FMCJ接口屏,这种屏你得开窗测试啊。图片 ...

反复实验得出结论,DMA2D驱动FMC刷图片
LL_DMA2D_SetNbrOfPixelsPerLines(DMA2D, linePixelNum);中的linePixelNum即每行点数,或者称为xSize,必须为4的整数倍
而LL_DMA2D_SetNbrOfLines(DMA2D, lineNum);中的lineNum即多少行,或者称为ySize,没有限制是某数的整数倍

遵循这个原则,DMA2D驱动FMC刷图片就没有错位出现了。

xSize,必须为4的整数倍,这个在H750参考手册有说明吗?我没有找到。在勘误手册也没有说明

求助下硬汉哥对此有没有了解?
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-26 22:58:02 | 显示全部楼层
eric2013 发表于 2022-4-26 00:15
我知道怎么回事了,我以为你这个是RGB接口显示屏。

你这个是FMCJ接口屏,这种屏你得开窗测试啊。图片 ...

这样的话,图片x宽度非4个像素整数倍的话,还不好直接DMA2D刷屏,要先开个全屏缓冲,刷到缓冲上后再刷x为4的整数倍的区域到FMC,这样很麻烦浪费资源。。。不知道有没有更好的方法
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2022-4-27 08:56:56 来自手机 | 显示全部楼层
测试了下,R2M填纯色,x宽度也必须是4的整数倍,否则也会有黑色像素导致错位
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2022-6-30 15:39:35 | 显示全部楼层
st官方有篇应用笔记刚好就是这个:
在STM32L496xx/L4A6xx/L4Rxxx/L4Sxxx微控制器上使用Chorm-ART Accelerator &#8482;来刷新LCD-TFT显示器
https://www.st.com/content/ccc/r ... s/zh.DM00338361.pdf
回复

使用道具 举报

5

主题

165

回帖

180

积分

初级会员

积分
180
发表于 2022-6-30 15:47:41 | 显示全部楼层
不过大概看了下,似乎里面演示的像素尺寸都是整倍数尺寸
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2022-6-30 16:56:30 | 显示全部楼层
lzhtem 发表于 2022-4-27 08:56
测试了下,R2M填纯色,x宽度也必须是4的整数倍,否则也会有黑色像素导致错位

貌似可以吧图片的大小 缩放成 4 的倍数即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 16:27 , Processed in 0.262431 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表