本系统通过一个数组对寄存器进行赋值,在初始化函数中利用s1dReg和s1dValue这两个实参写入:
static S1D_REGS aS1DRegs[] = {
…//前一个值为寄存器标识,后一个为写入寄存器的值[6]
{0x0032,0x63}, // 分辨率水平象素 =) ((032h)bit6-0)+ 1) × 8为800
{0x0038,0x57}, // 分辨率垂直象素0 = (038h)bit7-0 +分辨率垂直象素1为600
{0x0039,0x02}, // 分辨率垂直象素1 = ((039h)bit1-0) + 1
{0x0042,0x00}, // (042h)bit7-0帧缓冲区开始地址
{0x0043,0x00}, // (043h)bit7-0
{0x0044,0x00}, // (044h)bit3-0
{0x0046,0x20}, // (046h)bit7-0帧缓冲区宽度偏移量
{0x0047,0x03}, // (047h)bit2-0
{0x0048,0x00}, // lcd显示图像的起始位置地址0x00
}
至此,彩色LCD的驱动程序框架基本上已经完成了,通过5.1小节中已实现的成员函数调用就可以对帧缓冲区的显示内容进行控制调试,步骤是把编写好驱动程序用arm-linux-gcc进行交叉编译,然后通过串口在目标板上运行insmod/remod命令动态加载/卸载来调试。若程序已调试好就可以把它编译到Linux内核,烧录进目标板的flash就可以完成LCD的显示了。
6 结束语
文中介绍了Linux操作系统下的LCD驱动程序基本原理和框架,以及帧缓冲设备的作用。以基于AT91RM9200芯片的开发板和SLD13506控制器为例,编写了一个典型的帧缓冲设备驱动程序。LCD显示器的型号虽然很多,但其驱动的编写基本上是类似的,可以通过本文介绍的步骤对其它彩色LCD进行编写。
本文作者创新点:本文是介绍了基于ARM9技术的芯片的LCD显示屏驱动控制程序,给出实际项目中已实现了的操作,对同类芯片中的LCD驱动或其他硬件驱动有很好的参考价值。