TFT-LCD驱动程序设计(系列一)


在开发中LCD触摸屏幕使用的频率特别高,所以我要写个系列,将TFT-LCD讲的透彻一些,做一个专题,今天的主要是读正点原子的F4开发手册的重要知识总结和分析,供大家参考借鉴指点啊。有问题请指点,感激不尽。


驱动原理:


我们选用FSMC来驱动外部SRAM的原理来驱动TFT-LCD,这样就不用自己配置IO引脚的时序,那样速度慢,而且麻烦,外部的SRAM控制线一般的有:n根地址线,n根数据线,写信号,读信号,片选信号,还有的支持字节控制的控制信号。而我们的TFT-LCD用到的RS,D0~D15,WR,RD,CS,RST,BL等,其中真正操作的是RS(判别指令和数据),D0~D15,WR,RD,CS。
其中值得一提到的是将RS接在地址线的最低位时候,向地址写0的时候传输的是命令,当地址写1的时候传输的是数据了而且可以方便的连续内存操作,创建LCD地址结构体的时候就有应用了。
FSMC将外部存储器分为4个区域,每个区域固定256M,地址是6000 000h~6FFF FFFFh,7000 0000h~7FFF FFFFh,8000 0000h~8FFF FFFF,9000 0000h 9FFF FFF
每个Bank区被分为4个小区,每个区管理64M,每个小区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。

HADDR是内部AHB地址总线,值得一提的是HADDR[26:27]对Bank1区进行片选,使用FSMC_NE3链接外部设备就配置了HADDR[27:26]=10;我们只要配置对应3区的寄存器组就可以对外部设备操作了。


数据手册标注:
“不论你的存储器是8位还是16位的,FSMC_A[0]永远都要接在外部设别地址A[0];
当接16为存储器时,HADDR[25:1]->FSMC_A[24:0];
,当接8位的存储器时候,HADDR[25:0]->FSMC_A[25:0]”(我还是不太明白,大体上就是地址方便自增,我似乎明白又似乎不太明白,理解深的大神请指点“);



实际配置中,我们根据寄存器类型的特征确定时序模型,根据存储芯片数据手册给定的参数指标,计算出FSMC中所需要的各时间参数,从而对时间参数寄存器进行合理配置。
模式A支持独立的读写时序控制,这对驱动TFT-LCD非常有用,因为读的时候比较慢,写的时候比较快。这样满足速度的要求,又不需要频繁更改配置。  

 

                 模式 A 读操作时序图                  模式 A 写操作时序

通过设置ADDSET 和 DATAST的值来实现不同存储设备的配置,这些参数在FSMC的配置寄存器中进行修改。FSMC_BCRx,FSMC_BWTRx,FSMC_BTRx。


根据上面的原理考虑:

设计两个结构体,一个是LCD地址结构体,包括了寄存器地址和RAM地址

一个是LCD的重要参数集(我们常用结构体来表示一个控制器,控制器里面有函数指针,数据指针,变量,自定义结构体等),包括:

LCD的高度,宽度,LCD的ID,LCD的横竖屏标志位,x,y坐标的设置指令(不同驱动器不同),开始写gram之前的指令。

你可能感兴趣的:(TFT-LCD驱动程序设计(系列一))