您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 请教一个TFT例程的问题-2D DMA的外循环计算... 
本帖共有783个阅读者
发表帖子 发表投票 回复主题
请教一个TFT例程的问题-2D DMA的外循环计算
sjtu_wjq(论坛新手)
sjtu_wjq
头衔:社区公民
帮派:无帮无派
帖数:3
金钱:135
积分:5
注册时间:2013/5/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
请教一个TFT例程的问题-2D DMA的外循环计算

上传的图片
  201352923482267.jpg [ 13.11 KB 528×317 ] (缩略时请点击查看原图)

 


在 TFT的程序中 (BF53X_TFT_480_272)

section("sdram0_bank1") unsigned char DisplayBuffer_565[272][1440] ;

DisplayBuffer_565 已经是转换成 RGB565格式的数据。如图所示,实际行有效的数据是480*2=960个。

在设置DMA的时候:
*pDMA0_Y_MODIFY = 2;

意思就是当行(内循环)结束了之后,下一行第一个数据距离上一行最后一个数据的地址偏移(hardware manule Page 376)
"The value is the offset between the last word of one “row” and the first word of the next “row.” "

这样说的话,因为我们的数组 比方说DisplayBuffer_565[0][480*2-2] 这个数据结束了之后,2个byte的偏移不是 DisplayBuffer_565[1][0],而是DisplayBuffer_565[0][480*2]。这样不就是不对了么,但是为什么实际效果是没有问题的呢?



PS: 我试了一下数组定义改为
section("sdram0_bank1") unsigned char DisplayBuffer_565[272][960] ;
这样也是能正常工作的。




「该帖子被 sjtu_wjq 在 2013-05-30 20:16:08 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/5/29 23:57:19
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
首先,你先确认你的Buffer的565数据是否每一行的结尾都是包含一些无效数据,还是你的565数据本身在内存中是连续存放的。你可以用imgview工具,以565的方式查看一个720*272的图像,如果能显示出你绘制的类似图像,说明你每一行结尾有荣誉数据,这样你可以通过配置DMA的Y修改,按你理解的配置即可。如果看不到图像,而以480*272就可以看到完整图像,说明你565的数据在内存是连续的,所以出现了你描述的现象。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/5/31 0:50:21
wanjin333(论坛新手)
wanjin333
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:131
积分:5
注册时间:2014/12/16
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
同问这个问题 对于candy的解答也没看懂

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/12/16 18:20:07
wanjin333(论坛新手)
wanjin333
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:131
积分:5
注册时间:2014/12/16
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我写一下我的理解:
看程序---
DisplayBuffer_565[272][1440]   数据在DisplayBuffer_565 中依次存放 每行 1440 都是有效数据。这个二位数组并没有存到 272 行。
而不是以 每行 480×2//272 行的存放方式。这个要注意

另一个
pDMA0_Y_MODIFY 的计算: 下一行第一个数据距离上一行最后一个数据的地址偏移=个字节,因为它两个字节(16BIT)的方式传的 ,差16 bit 。所以
pDMA0_Y_MODIFY=2

如果 每行 480×2//272 行的存放方式,,那么
pDMA0_Y_MODIFY=1440-480*2+2=482

andy 有时间看下我算的对不对


「该帖子被 wanjin333 在 2014-12-16 19:30:17 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/12/16 19:28:42
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你的理解是对的,DMA0_Y_MODIFY的作用是为了让你从一副大图中,裁剪出来一部分小图,所以当一行数据只采集前面一部分时,要通过DMA0_Y_MODIFY 将不需要采集的数据去掉。其计算方式就是你说的:pDMA0_Y_MODIFY=1440-480*2+2=482

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/12/21 22:01:30
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159245 Call, 1 Queries, Processed in 0.078125 second(s),