LCD驱动程序的编写(二)

     到今天,我可以说我用NIOS 来调试LCD驱动可算是成功了,蛮值得高兴的。

     NIOS有两种写IO的方式——库函数方式和寄存器方式。一般很多人借鉴51的,像P0=0x55,P1=0xaa等,

这叫寄存器方式。类似STM32中的GIPO_init()等,NIOS也用库函数来操作IO ,不过操作起来比STM32直观。初

学NIOS编程,有教程里推荐用寄存器方式,说可以加深硬件结构了解,其实这话我觉得说的用点笼统。比如,NIOS

中有IOWR(base,offset,val)的库函数,其实通过这个也可了解到寄存器排列:在base地址偏移offset的32位空间里

写入值val。

     这里有个很重要的一点,库函数写的程序一般比直接操作寄存器的程序更加稳定。我是用的切身感受来说的。

我参考手册写了两套LCD刷屏程序,分别使用上述两种方式,程序的流程一样,时序一样。往FPGA里下载配置文件后,

通过esclipse首先下载寄存器方式的程序,屏幕白板一个;但是接下来我下载库函数实现的程序,通过esclipse下载后

刷屏成功!在没断电,没重写配置文件的前提下,我又下载寄存器方式的程序,同样刷屏成功。   

    我分析了,出现上述结果的原因很可能是ALTERA 公司的库函数在其内部加入了某些对PIO的初始化代码,当然这么重

要的细节ALTERA公司没有公开,其实我表示理解,人家是在鼓励你使用库函数,看是不是每个库函数下面的是不是还有一

长串的字符,让你多写几遍好记住公司名称。

    接着说说上一次的《LCD驱动程序的编写》中为什么液晶DeviceID=5408没用读出来。长时间的调试这么简单的这么个东

西,我忽略了官方的关于PIO的详细说明手册。明明人家说的是PIO的DIRECTION寄存器每位分别控制对应的PIO的方向,1表

示输出,0表示读入。我却理所当然的认为DIRECTION=1就是输出,DIRECTION=0就是输入。忽略了分别二字啊,原文中写

的是selectable。所以对应于LCD 16位的数据线,DIRECTION=0xffff是输出。

      谢谢你的品读!

 

 

posted @ 2013-04-03 19:44  boyang987  阅读(227)  评论(0编辑  收藏  举报