代码改变世界

fpga硬件驱动TFT液晶屏-小结

2012-06-01 22:11  上帝之骰  阅读(1752)  评论(0编辑  收藏  举报

    最近折腾了一下fpga,发现还真是不好搞,硬件描述语言和顺序代码的真的是天差地别,还好电路的底子还在一些。通过发挥不怕效率低,只要能运行的精神,终于把ili9320的初始化和写操作调通了。最后跑了下时序分析,发现时钟最高频率居然能到160MHz,可惜实际中跑50MHz的时钟还要在写操作中插入空闲,以满足ili9320时序的严格要求。这练杀鸡用牛刀都算不上,应该是虐蚂蚁用了把水果刀。。。

    写vhdl代码中最让人无奈的就是一大堆的初始化指令,c语言里一串函数调用可以解决的事情,在vhdl里就要设置一堆rom数据。初始化中的延时不能像以前一样delay()一下了事,还要编一段计时器代码。还好这些都解决了,tft已经驱动成功,彩色条纹终于千呼万唤始出来,成功的乐曲就要奏响,然后~~

    然后,还有点小问题,ili9320的手册中,信誓旦旦地向我们描述了一副美好的前景:在16位接口模式下,只要按照565的格式写入并行数据,就可以得到对应的RGB颜色效果,在我的小代码里,也就能依次看到蓝-绿-红-浅蓝四种颜色。遗憾的是,我试过之后发现,颜色顺序完全不是那么回事儿,我按照datasheet所说的蓝-绿-红-蓝+绿的顺序写入数据后,出现的居然是红-绿-蓝-黄。这么说的话,16位并行端口应该是BGR的格式才对。然后当我向配置寄存器的BGR位写入1(脑残的人都知道,这样该启动BGR格式,但是。。),发现颜色顺序居然坑爹地变成了RGB格式。

    我猜想,这要么是数据手册弄错了,工作人员谁没个粗心大意的时候呢,但是考虑到在网上没有多少人反应这个问题,这个解释似乎不太行得通。

  另一个可能是tft液晶的驱动电路出现了岔子,ili9320通过720条驱动信号加320个门控信号来驱动彩色屏,其中320个门控信号对应于320列,而720个驱动信号则对应于240行,这样每行就有三个驱动信号,这三个驱动信号分别控制着rgb三种颜色,如果在制板时弄反了三色信号,最后出来的液晶屏,颜色肯定是反相的。

    当然这些都只是猜测,无从求证,也说不准,我的液晶屏根本就不是9320,是不负责任的商家弄错了驱动型号呢。