免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3522 | 回复: 10
打印 上一主题 下一主题

[MID project] Daily Report from swangwu [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-08 01:13 |只看该作者 |倒序浏览
redo mw2440 frame buffer in linux kernel and try to get better understanding of
frame buffer and LCDC register setting

论坛徽章:
0
2 [报告]
发表于 2010-03-08 21:49 |只看该作者
回复 1# swangwu


    今天,在g-bios里实现了图片缩放的算法,缩放比例是2的幂次,也就是比例 N=1,2,4,8,16,。。。
算法大致如下,
1.从0行开始,每隔N-1行,取1行
2。对所取行,从第0个pixel开始,每隔(N-1)个pixel,取1个pixel
   已在application添加应用,该应用可以实现在LCD指定位置对图片缩放,准备先在应用程序实现动画效果。

论坛徽章:
0
3 [报告]
发表于 2010-03-09 20:26 |只看该作者
回复 1# swangwu


    1.  在应用程序实现动画效果。

   2。针对画尺寸大的图形,出现很明显的一行一行刷新图形的现象,尝试解决。
参考开机LOGO没有出现以上刷新慢的现象,开机LOGO是先在显存里将图形画好,
然后,再将显存的物理地址写到LCDSADDR里;仔细阅读DATASHEET,可以设置
双缓存,设置LCDSADDR1/2寄存器来切换显存。尝试修改,但是没有成功。

论坛徽章:
0
4 [报告]
发表于 2010-03-10 20:27 |只看该作者
解决画大尺寸图形刷新慢的方法
1。产生原因
参考以下连接
http://c51.cn/Article/mcuzh/200811/8851.html
当显存读写发生冲突时,LCD会产生雪花甚至黑屏,但没找到
刷屏慢的解释。之前我画图形是直接写frame buffer的,
没有考虑HBP,HPW,HFP,VBP,VPW,VFP,仔细阅读2440 datasheet P398,
LCDCDMA里有个28*4BYTES大小的FIFO,当FIFO里的数据空或部分空,LCDCDMA就要
从FRAME MEMORY请求数据(每次4*4BYTE大小),当MEMORY CONTROLLER的总线判决器
允许该请求,才会把数据从FRAME MEMORY传给LCDCDMA的FIFO。所以,如果发生FRAME MEMORY
的读写冲突,MEMORY CONTROLLER的总线判决器就可能不批准LCDCDMA的数据申请,就会发生
刷新延迟,雪花甚至黑屏。
2。解决办法以及实验结果
申请1块大小为480*272*2BYTES大小的内存,在该内存内事先画好图形;
画新图之前,读LINECNT的值,直到该值为0,将LCDSADDR1/2的DMA地址设为新内存的首地址,
新图就可以立刻刷到LCD屏上,几乎没有一行一行刷屏的现象。
值得注意的是,一定要等待LINECNT为0,才能操作FRAMEBUFFER,否则,会出现雪花和黑屏。

论坛徽章:
0
5 [报告]
发表于 2010-03-12 00:00 |只看该作者
回复 1# swangwu


    今天,编写调试上课讲的linux kernel 2440 frame buffer精解版驱动,熟悉了kernel驱动程序框架;大致阅读了6410datasheet display driver
和2D部分,准备6410 display driver驱动编写。

论坛徽章:
0
6 [报告]
发表于 2010-03-13 02:07 |只看该作者
回复 1# swangwu

已完成,
1. 根据以下算法,
( Xi- X0)(Y1 - Y0)=(Yi - Y0)(X1 - X0)
做了已知两个点,画一条直线的函数,并作了判断1个点是否在一条直线上的函数。
遗留问题,斜率是负数的直线画的不正常, 斜率是正数的直线画的正常。
2。参考Bresenham's line algorithm,
写了anti-aliasing的画直线函数,实现正常。

TODO,
利用已实现的函数,实现画填充三角形。

论坛徽章:
0
7 [报告]
发表于 2010-03-14 04:04 |只看该作者
回复 1# swangwu
已完成,
1。 完成画填充三角形的函数,大概测试了一下,没发生异常。算法如下,
1。1 已知3点,先使用画直线函数(采用Bresenham's line algorithm)将3条边画出,并生成3条边的坐标数组
1。2 将这3条边的数组按Y轴方向高度从小到大排序
1。3 依次遍历Y轴高度较小的两条边的每个点,并找到Y轴高度最大的边和这个点Y坐标相等的点(使用2分查找,数组是有序的),
使用画直线函数将这两个点连起来

2。将最近做的画线,图形缩放等函数放到专门的graphics_lib.c

TODO,
随机产生3个点,测试画填充三角形的函数,并测试每桢时间内,能画多少三角形。

论坛徽章:
0
8 [报告]
发表于 2010-03-16 00:40 |只看该作者
回复 1# swangwu

DONE,
在g-bios里编写,调试LCD驱动程序。本想显示一幅480*272的16位3色图,
测试结果是白屏。

TODO,
希望明天能正常显示该图,并测试6410 display controller提供的利用硬件实现特殊图形效果的功能,比如,图形的overlay,alpha等.

论坛徽章:
0
9 [报告]
发表于 2010-03-16 21:58 |只看该作者
回复 1# swangwu


    Done,
    查了两天g-bios的6410LCD 驱动, 终于在同组兄弟的帮助下,查到原因,是和LCDC pin脚相关的GPIO没有正确配置。

   TODO,
     编写测试kernel的6410 frame buffer 驱动。

论坛徽章:
0
10 [报告]
发表于 2010-03-17 23:01 |只看该作者
回复 1# swangwu


    Done,
    今天,完成在linux kernel添加精简版的6410frame buffer驱动,并测试了fbv和mplayer

    TODO,
    明天,在g-bios里尝试添加6410 2D驱动。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP