硬汉嵌入式论坛

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

[emWin] emWin多缓冲,DMA实现?

[复制链接]

58

主题

118

回帖

292

积分

高级会员

积分
292
发表于 2015-11-23 08:24:12 | 显示全部楼层 |阅读模式
请教,有无用DMA实现多缓冲的buffer copy?memcpy方式的可以理解,使用DMA后emWin如何知道DMA已经完成复制,开始绘图呢?按手册定制了一个基于DMA的复制,总是花屏,怀疑是DMA还没完成复制,CPU就已经开始重绘了,ST官方的例程看了也没有利用DMA完成中断进行消息的发送,弄不明白了,求解答。
11.png 22.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2015-11-23 08:51:14 | 显示全部楼层
官方搞的都加上了等待DMA2D传输完成的操作,你再看下是是否有这个等待传输完成的函数。
回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
 楼主| 发表于 2015-11-24 15:08:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:
官方搞的都加上了等待DMA2D传输完成的操作,你再看下是是否有这个等待传输完成的函数。
确实要加等待。个人理解的多缓冲机理如下,错误之处望指正:
打开WM时,GUI_Exec函数发现窗口失效,此时启动回调函数进行buffer的复制(buffer0->buffer1),复制完成后,在buffer1中重绘,重绘完成后通过LCD_X_DisplayDriver中的LCD_X_SHOWBUFFER抛出消息,既可用的buffer编号,通过紧接着的LCD_IRQ中的VSYNC更新缓冲视频区的基地址。我们要做的工作就是定制一个复制buffer的函数来解放CPU,即DMA copy。通过试验验证,copy完成后紧跟着就是重绘,使用memcpy函数不存在问题,因为CPU copy完成后就重绘,使用DMA后,CPU与DMA异步,如果直接重绘,屏幕是花的,即没有copy完就已经开始重绘了。因此在启动DMA后可以使用信号量等待,在DMA完成中断中释放信号量,使得CPU得以继续未完成的重绘工作。(LPC1857,180M CPU+90M SDRAM无等待仅可绘制半屏。)
PS:附上官方的LPC1788的多缓冲应用手册,只需要将copy函数换成DMA,然后等待中断消息即可。
LPC1788 emWin multiple buffers.pdf (381 KB, 下载次数: 1104)
回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
 楼主| 发表于 2015-11-24 15:16:59 | 显示全部楼层

回 eric2013 的帖子

eric2013:官方搞的都加上了等待DMA2D传输完成的操作,你再看下是是否有这个等待传输完成的函数。 (2015-11-23 08:51)
官方的没有加,我被坑了两天。不知道STM的DMA及SDRAM速度如何,是否跟速度有关联。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2015-11-24 15:26:37 | 显示全部楼层

回 yuanfp 的帖子

yuanfp:官方的没有加,我被坑了两天。不知道STM的DMA及SDRAM速度如何,是否跟速度有关联。 (2015-11-24 15:16) 
ST的有个专门的DMA2D功能,用来实现LCD接口的DMA功能,速度还行。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2015-11-24 15:27:34 | 显示全部楼层

回 yuanfp 的帖子

yuanfp:确实要加等待。个人理解的多缓冲机理如下,错误之处望指正:
打开WM时,GUI_Exec函数发现窗口失效,此时启动回调函数进行buffer的复制(buffer0->buffer1),复制完成后,在buffer1中重绘,重绘完成后通过LCD_X_DisplayDriver中的LCD_X_SHOWBUFFER抛出消息,既可用的buffer编 .. (2015-11-24 15:08) 
谢谢兄弟提供的文档。,这个emWin多缓冲还没有怎么研究过,我现在一直用的是开启内存设备
回复

使用道具 举报

6

主题

18

回帖

36

积分

新手上路

积分
36
发表于 2017-9-25 10:03:55 | 显示全部楼层

回 yuanfp 的帖子

yuanfp:确实要加等待。个人理解的多缓冲机理如下,错误之处望指正:
打开WM时,GUI_Exec函数发现窗口失效,此时启动回调函数进行buffer的复制(buffer0->buffer1),复制完成后,在buffer1中重绘,重绘完成后通过LCD_X_DisplayDriver中的LCD_X_SHOWBUFFER抛出消息,既可用的buffer编 .. (2015-11-24 15:08) 
楼主 有lpc1788使用DMA copy的例子吗 我想参考一下  在emwin使用三缓冲的时候 我把等待加上但是使用lpc1788 DMA copy还是有问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 03:14 , Processed in 0.260349 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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