您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]外部的SDRAM的数值必须要用程序去初始... 
本帖共有425个阅读者
发表帖子 发表投票 回复主题
[求助]外部的SDRAM的数值必须要用程序去初始化吗?
lvben5d(论坛新手)
lvben5d
头衔:社区公民
帮派:无帮无派
帖数:61
金钱:672
积分:89
注册时间:2014/3/24
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]外部的SDRAM的数值必须要用程序去初始化吗?
由于显示1副18Bit的640*480彩图,当开机后,不但要读取背景图片,还要将叠加层的OverlayA ,
OverlayB
大数组数据,赋予0xFF, 导致代码执行需要不少时间,这个时候TFT屏早就上电完毕显示出杂乱的东西。
代码有如此

for(i=0; i<180; i++)
  memcpy(OverlayA + i*1200 +80, pFromPicture+ i*720, 720);

i*720  指令                                     算1周期
pFromPicture+ i*720                             算1周期
OverlayA + i*1200 +80  1乘法2加法               算3周期  
从外部SDRAM的数值拷贝  到OverlayA + i*1200 +80  算4周期
拷贝 720次    9*720 = 6480 周期    
for循环180次  
6480 *180 = 1166400
BF548 采用533MHZ    533000000个指令执行为1S 这里大约1S/500 = 2ms
  
我发现从NANDFLASH里 用非DMA方式读取数据 花掉的时间才造成了几S延迟。看来得优化去读的时刻,先读第1副显示界面,然后启动去显示后,再去读余下的画面 是正道!
解决: 我目前使用DMA方式去外部读取1 block的图片内容,按照手册和系统时钟,推算时间大约为250ms,可以读取1个640*480 24bit真彩色图片到外部SDRAM。 小技巧: 对于不是整数Page的图片,可以加大内存保存数组长度,来凑成整页处理哦。 比如2048 一个page size, 你的图片是200*180*3 个字节 那么。。。。




「该帖子被 lvben5d 在 2014-04-04 16:40:59 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/2 15:02:16
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
你可以将要显示的图片烧写到norflash中,这样开机后会立刻显示,无需重新生成数据,方法:
1. 将要显示的数据导入板卡内存中。
2. 将数据通过dump选项导出,并保存为16进制 .dat文件
3. 用ultra edit 软件打开这个文件,将“0x”替换为“,0x”,实际就是在每个数据之间加入逗号,删除第一个数据前多余的逗号,保存文件。
4. 将这个文件拷到你的工程文件夹下。
5. 在代码中包含以下语句:
unsigned char buffer[]={
#include "img.dat"
};

6. 确认你VDSP软件下加载的xml文件中已经包含了内存的初始化。

这样你编译代码后,你的图像数据img.dat会自动加载到内存中,如果生成烧写文件,会自动包含到.ldr文件中。

如果编译时找不到文件,你看看VDSP软件默认的路径是debug下还是你的工程下。

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