Chinaunix

标题: [MID project] Daily Report from taoxie17 [打印本页]

作者: taoxie17    时间: 2010-03-07 23:28
标题: [MID project] Daily Report from taoxie17
今天一天的工作:
1。熟悉了一下lcd video mode, 以及mode database.
2。看了一下相关寄存器的极性,及相关电路原理图。
4。完成了相关平台环境的测试工作。
3。在gbios中加一个一个LCD屏的MODE, 但现在还在测试当中不知是否屏怀了。


今天是一些初期的准备工作。明天继续。。。。。
作者: taoxie17    时间: 2010-03-08 23:58
回复 1# taoxie17


    1.已经完成了的task:
        一):在g-bios中完成对logo的图片的开机动画,从小到大的缩放。(另有一个计划,就是从小到大的过程式中,放大到半个屏幕时,整个LOGO慢慢拉到右小角,然后把整个logo图片从右下角沿对角线拉到右上角,至全屏。)
        二):lcdc中断,这里只是小小的实验。实现向系统注册lcd驱动。并实现在中断服务程序打印语句。
        三):在添加中断处理部分时,有三个寄存器。这三个寄存器是与中断相关的。这也是中断机制相关的,我现在来谈谈自己的理解:
              LCDSRCPND, LCDINTPND,LCDINMSK
                     中断源未决寄存器, 中断未决寄存器, 中断屏蔽寄存器
              LCDINMSK复位后是全屏蔽的,所以要开启中断,只要将相就的位激活就OK了。
              当中断源来时LCDSRCPND相应的被置1,同时使LCDINPND相就位置1,这样中断服务程序只需判断该位就是了。但得在服务程序中将其清掉,如果某个中断被屏蔽,那么LCDSRCPND相应的位置1,是不会使LCDINPND相应的位置1的。
   2.待完成的task
           一):注册中断后,实现程序的控制。
       二):借助软件,模拟硬件完成的双缓冲!从而实现无刷屏现象!
遇到的问题及其解决方法:
     1。今天在刚开始做的时候出现在这样的一个问题,对于单次图片缩放,可以看到效果,但如果将多个缩放连接起来,形成动画,将不能看到动画,只会显示最后一个缩放后的效果。这个问题弄了很久,但最后跟代码发现了一个问题,从而使问题得到了解决。
       解决方法:这是由于LCD还没有开启就往显存一画多个图,所以当LCD开启时,只显示最后一个图。 将写显存提至打开LCD后写时,情况就正常用了,形成了一个动画。
    2。 打开中断后,原本正常的动画,却在屏幕上出现了花屏。这个问题还不知道,有待明天继续实验!
作者: taoxie17    时间: 2010-03-09 23:48
今天没有大的进展
1。由于昨天没有完成缩放后图片其他区域的填充,所以今天把全屏都填充满了,但发现了一个问题。
     问题: LCD完成动画后,系统便死了!
觖决方法:由于在刚开始的那段空白填空时,没有计数的,所以最后在总和计算时,出现在需要更大的mem,所以出现在访问显存越界,所以导到至系统挂了。只要将前面的计数加上就OK了

2。昨天最后打开中断后,出现了花屏,今天没有花屏了,但发现当中断打开时中断就一直被触发不断的进入中断服务程序,导致无法做其他的事情。这个问题一直困拢了到现在,但有了一点点思路,明天再看看不知是否能解决。另外我也尝试在服务程序中将中断关闭,但却发现关不了!很痛苦,希望明天可以解决,到时我跟贴好好的分析一下

3。今天也试一下软件实现双显存,但由于中断没有实现,所以不知道如何实现。

哎,今天就写到这,明天继续。。。。
作者: taoxie17    时间: 2010-03-10 23:51
回复 3# taoxie17


    继昨天的工作,今天只完成一点点内容。

1。昨天的软件实现双缓存,今天得到了解决,今天的代码与昨天的相差不大,但不知为什么今天的就正常了,昨天的有误。想不通。可能是某些细节上的处理吧!
不理想的地方:那就是为每帧数据准备的时间太外导致每个画面播放完成后,要等的时间有点长。这个问题目前我没有其他的解决方法,可能要做的就是算法的优化吧!

2。s3c2440上g-bios开机logo的一个从底往上拉的效果! 这个很简单!相信大家都知道的。
有这个过程中有一个小问题。结果发现比预期效果出现在半屏的差,跟踪代码发代,这是一个传参的变量,与局部变量不同的问题,导致做指针加法时,出了差错。

今天中断还是没有得到解决,明天接着看看。
作者: taoxie17    时间: 2010-03-11 23:50
回复 4# taoxie17


   今天与小组成员,就前几天的工作进行了一些小结和交流,我也在讨论当中学到了很多。
1:在 “汪”的帮助中,我完成了屏幕画任意画直线。但是没有实现软件抗锯齿。
2:前面的缩放算法不好,需改进。
3:LCD的中断,我也有了思路,好像是我以前理解的不对,呆会再去试试,也许就成功了。
4:实现在屏幕上画一个圆的算法。

在画任意直线,和画圆的二个算法,我都用到的就是中点算法。 由于中点算法中,涉及到了0.5的小数。 所以我将所有数,扩大N倍的。 然后作比较。
这里我是扩大1024,这样就只有移位运算,避免的除法运算。
作者: taoxie17    时间: 2010-03-12 20:46
本帖最后由 taoxie17 于 2010-03-12 23:50 编辑

回复 5# taoxie17


    一》已经完成了的任务:
          1。困拢了几天的LCD中断,今天得到了实现。我启用是的frame中断。苦脑了几天的问题,其实很简单:清未决寄存器的方法错误。
                错误原因: 要清未决寄存器的状态,应该先所寄存器的值读出来,然后再写进去(或者是直接写1进去);我以前是写的0,所以错误,导致服务程序中关不了中断。
                解决方法: 思路没有变,进服务程序,消中断状态,并实现DMA显存地址的切换。
          2。用软件实现了图片的任意缩小。 比例按照目前用的屏16:9
    二》正在进行的任务:
          1。屏上出现了一点点偏差,导致最后四列错位了。每屏的起如几个像素到了屏幕的右下角。
              我和小组成员讨伦了一下,用了最不好的方法,这个问题就可以解决了,但我们认为这一定是正规的觖决的办法,还要继续看一下datasheet,然后再行修改。
           我们将pixclk设为4.2M,这样就可以正常用显示,不发生错位偏移了。但这样带来了另外一个问题:刷新率。 这样一改把像素时间改小了,但使画面看起了很闪。
  三》明天的计划:
          1。最后那个像素错位的问题。
          2。实现三角形填充算法。
          3。没试每帧画面,像画多少个三角形并填充!
作者: taoxie17    时间: 2010-03-13 19:59
本帖最后由 taoxie17 于 2010-03-13 20:20 编辑

回复 6# taoxie17


    昨天的定的计划,今天实现了,哈哈,高兴。也许是计划任务量太小了吧。哎,还得加油。

一》已经完成了的任务:
1.昨天的象素偏差,今天调了一段时间没有调出来。所在准备pass掉,等以后都做完后,再回过来做。
但有一个暂替的办法:减小pixclk或提高HCLK。但这是以牺牲视觉效果为代价的。因为这样调后,屏幕后变得有点闪。

2.三角形填充今天得以实现。用的是区域抄描法。
  指定三角形内的某个点即实现填充。
       
3.s3c2440芯片上画三角形速度测试(无双缓存,无硬件加速):
  ACLK: 405MHz
  AHB BUS CLK: 101MHz
  APB BUS CLK: 50Mhz
  测试时所使用的LCD屏基本特性:
       Model NO: P043F1A4F-xxxx
       Display resolution: 480 * 272
       LCD TYPE: 4.3" TFT-LCD
       Color Depth: RGB 24-bit

  测试结果:
     1. 原位置画三角形,不带填充。 三角形三点坐标30,20),(200,20),(400,100)/指定填充点为200,25)
        一次: 3050(个) / 600(帧)
        二次: 3048(个) / 600(帧)
        三次: 3047(个) / 600(帧)
        四次: 3047(个) / 600(帧)
        五次: 3048(个) / 600(帧)

        平均速度:约   5个/帧。
     2.原位置画三角形,带填充。三角形三点坐标30,20),(100,20),(200,100)/指定填充点为100,20)
        一次: 268(个) / 600(帧)
        二次: 276(个) / 600(帧)
        三次: 277(个) / 600(帧)
        四次: 276(个) / 600(帧)
        五次: 276(个) / 600(帧)
作者: taoxie17    时间: 2010-03-15 21:57
DONE:
   1。 大概的看了一些s3c6410lcd控制器的公用寄存器,和window0所需寄存器
   2。 在lcd屏上用BPP为8的格式画了三个种颜色的条形区域。(没有配置调色板的)
   3。 用BPP为16的格式画屏。(未完成)。明天继续,可以相有些寄存器的设置有关。

TODO:
   1。用BPP为16的格式画屏。
   2。用硬件实现画一些简单的基本图形。
作者: taoxie17    时间: 2010-03-16 20:08
回复 8# taoxie17


    DONE:
     1.在g-bios中点亮了lcd屏。并进行了一些基本的操作。
   2. 配置了一下基本系统环境。准备好kernel和rootfs
     
   TODO:
   1。在kernel中写s3c6410的frame buffer driver.
作者: taoxie17    时间: 2010-03-17 21:31
回复 9# taoxie17


    DONE:
      1.今天在kernel里写了一下s3c6410的framebuffer的驱动(最简单的driver,能用fbv打开图片,和mplayer 视频)。
    2.看了一下Graphics2D模块的功能寄存器,并在g-bios中测试了一下,但至今没有成功。
  
   TODO:
     1。继续开发framebuffer dirver,整理,并完善相关功能。
     2。看看graphics2D datasheet并实验。
作者: taoxie17    时间: 2010-03-18 22:45
回复 10# taoxie17


   
DONE:
    1.修改kernel的fb代码并使fb能够正常的工作。但效果有误,还得调试。
    2.使2D加速模块能在屏幕上画出点/线出来了。但颜色不可控,线型角度不可自由控制。
      弄了几天的2D功能,今天在“汪”和“王”的一起讨论下,有了一点进展,真是开心啊
TODO:
    1。看datasheet继续今天的2D模块功能。
作者: taoxie17    时间: 2010-03-20 01:24
回复 10# taoxie17


    今天继续2D部分:
DONE:
  1。硬件画点,画线,能够控制颜色的显示。
  2。能自由控制画线的角度。
  3。硬件实现图形的缩放。

问题:1。在图形缩小的过程中,如果缩小的后的图片与原图片有一条边是重合的,那么这第效果是正常的,但如果没有一条边是重合的,那么图形就会多次缩小,出现图形重叠加。
目前还没有想到解决方法!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2