基于Blackfin 处理器的TFT LCD 驱动设计
扫描二维码
随时随地手机看文章
0、前言
长期以来,传统的掌上电脑(PDA)等小型手持式设备,由于硬件条件的限制,显示器件通常是单色 LCD, 用户界面非常简单。随着高性能嵌入式处理器的普及和硬件成本的不断降低,嵌入式系统的功能也越来越 强。在多媒体应用的推动下,彩色 LCD 开始应用到嵌入式系统中。新一代掌上电脑(PDA)多采用 TFT LCD 显示器件,支持彩色图形界面,图片显示和视频媒体播放。掌上电脑(PDA)的操作系统有微软 Window CE, PalmOS 等。其中 Linux 核心小,成本低廉,源代码开放,成为各家厂商极力发展的操作系统。本文就探 讨了两种基于 Blackfin 嵌入式处理器的 TFT LCD 的驱动方案。
1、Blackfin 处理器和 TFT 液晶简介
Blackfin系列处理器是ADI公司研制的业内首款嵌入式处理器,它将微控制器、DSP和媒体处理器的优 势集成于单一架构中,已被广泛应用于消费类多媒体、网络通信等多个领域。
BF531 是 Blackfin 处理器中的一款,最大时钟频率 400MHz,有 2 个 16 位 MAC,两个 40 位 ALU,4个 8 位视频 ALU,以及 1 个 40 位移位器。并有高达 148Kbytes 片内存储器,和两个双通道存储器 DMA 控 制器;系统外设包含一个 UART 口,一个 SPI 口,两个串行口(SPORTs),四个通用时钟定时器(三个有 PWM 功能),一个实时时钟,一个看门狗时钟定时器,以及一个并行外设接口。
设计中我们采用了FG050605作为我们的设计屏,此款液晶为5.6英寸屏,有960(W) x 234(H)个像素, 每三个像素一个点,即每行320个点,共234行。此款连线非常简单:共32个引脚,其中,一根数据时钟、 一根行频、一根场频、一根数据使能,三色共18根数据线,其余为空脚和电源线。
液晶时序图如图1所示:
图 1:液晶时序图
三种真彩的液晶驱动方案:即基于DSP硬件的液晶驱动,基于DSP的嵌入式uClinux液晶驱动和基于FPGA的液晶驱动。本文重点介绍前两种方案的具体实现。
2、系统总体设计
Blackfin 处理器的 PPI 口共 20 个引脚,每个时钟周期可以收发 16 位数据,它为 TFT LCD 提供了一个无缝的数据传输接口。
我们采用的这款液晶屏像素时钟频率6.25MHz,采用FPGA分频得到,该时钟同时接PPI_CLK引脚。行 频408个像素时钟周期,场频59Hz,即259个行频周期,分别接Blackfin处理器的TMR1/ PPI_FS1和TMR2/ PPI_FS2口。
设计中,我们采用16bit的颜色显示方式,故分别将红色和绿色的最高位和最低位相连,即R0和R5、B0和B5。16根数据线分别与Blackfin处理器的PPI0到PPI15口相连。数据使能引脚接到FPGA上。 硬件框图如图2所示:
2:硬件框图[!--empirenews.page--]
3、基于硬件的液晶驱动 同传统的DSP一样,直接基于Blackfin处理器液晶驱动。
我们采用DMA的方式通过PPI口传输颜色数据,将要显示的数据存放在SDRAM中的两块缓存区域中, 采用乒乓模式,在向一块存储区中写数据时,从另一块存储区读。我们在SDRAM中设置一块非Cache的存储区,因为我们每个点用16 bit数据表示,故两块缓存区域共320*(234+9+16)*16 bit,9+16为每场信号丢失的行数。
3.1 DMA的初始化
我们首先配置DMA的工作参数。这里DMA采用Descriptor list (small model),2D传输方式,每次传输一个字的数据。首先设置一个地址列表,用于装载两块缓存区域的首地址,这样DMA将从地址指示的空间 读取数据传送到PPI口。设置DMA每场传输259行,每行传输320个字的数据。最后配置DMA0_CONGFIG, 并使能DMA。主要设置有Descriptor list,2D DMA 的 Inner loop count,设置下次2D DMA的读取地址相对 本地地址的增量,2D DMA 的 outer loop count,配置DMA工作模式等。
3.2 PPI的初始化
PPI有两种工作模式:ITU-R 656和General-Purpose PPI。因为我们只需将数据通过PPI口送出,故使用GP模式。 设置PPI_FS1和PPI_FS2下降沿有效,一次传输16bit数据,外部触发,两个外部帧同步信号。主要需要设置的为:PPI 参数配置,场频信号发出到开始数据传输的延迟和每行传输的数据个数。
3.3 Timer的初始化
由于我们采用2个外部帧同步信号,故采用TMR1/ PPI_FS1作为行频信号(HSYNC),TMR2/ PPI_FS2作为场频信号(VSYNC)。 为了调试程序需要,我们配置定时器为仿真时定时器持续工作。因为只需送出数据给液晶,故配置其为PWM_OUT模式,我们的定时器使用PPI_CLK,故仍需设置其为PWM_OUT时钟,计数到周期结束等。Timer1和Timer2的周期和脉宽按液晶硬件手册给出设置。
3.4 Frambuffer的初始化
这样,液晶的相关配置已基本完成,我们在屏幕上写数据即为在两块数据缓冲区中写数据。但应注意, 在每次场频信号到来之后,有19行数据不会显示在屏幕上,之后234行为屏幕显示部分,最后又有6行数据 为多余需丢掉的数据。因此,我们将显示的数据颜色信息要全部写在中间234行。初始化Framebuffer时应 先写入要丢掉的19行内容,再写入234行的初始化颜色数据,最后还须初始化末尾6行丢掉的数据。
4、基于 uClinux 的液晶驱动 嵌入式系统是以应用为中心,以计算机技术为基础、软硬件均可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。uCLinux 主要是针对目标处理器没有存储管理单元 MMU(Memory Management Unit)的嵌入式系统而设计的,它是一种优秀的嵌入式 Linux 版本,已经被成功地 移植到了很多平台上。对开发者来说,AD 的 Blackfin 处理器和 uClinux 的结合很有吸引力。
在 blackfin.uclinux.org 网站,提供对在 Blackfin 上嵌入 uclinux 的支持,本设计采用了其嵌入式软件支 持。选择了 uClinux-dist-R06R2-RC2.tar.bz2 作为系统使用 uClinux 的源代码,成功移植了 uClinux 嵌入式平台。我们用源文件根目录下 uClinux-dist/linux2.6.x/driver/video/bf537-lq035.c 作为模板,进行液晶驱动的修 改。
4.1 程序文件修改
以 bf537-lq035.c 为模板进行修改为 bf533-fg0506.c,由于源程序是按 BF537 开发板来编写,我们重点要修改的是信号使用端口,和液晶设置部分。 因为我们的液晶的背光是有逆变器调节,故将屏蔽原程序文件中关于背光亮度调节及相关选项。关键修改点:液晶的行场频、时钟、屏幕大小,定时器的设置(Timer1.Timer2),各种寄存器的设置, 以及写数据的 DMA、PPI 程序部分。液晶显示数据部分:场频信号到来之后需丢掉的行数、每场信号需丢掉的总行数、场频PPI_CLK 时钟部分:配置 PPI、Hdp+Hpw 此段时间内 PPI 不传数据等。配置 TIMER:使能时钟、设置 Timer 的参数。设置 DMA 的参数,设置屏幕尺寸色彩等信息,初始化 Framebuffer 等。
4.2 Makefile 的改写
此 部 分 是 为 在 编 译 内 核 时 能 够 将 新 编 写 的 液 晶 驱 动 编 译 为 目 标 文 件 。 在 uClinux-dist/linux2.6.x/driver/video/Makefile 加入编译规则。
4.3 修改 menu "Graphics support"此 部 分 使 编 译 uClinux 内 核 时 , 可 以 选 择 是 否 编 入LCD 驱 动 。 在 uClinux-dist/linux2.6.x/driver/video/Kconfig 文件里添加编译信息。这样,使用 make xconfig 编译系统内核时, 就可以在自定义内核设置的 Device Driver 下,Graphic support 中选择这个选项。
5、结论
经调试、修改,最终两种方案的液晶均可正确稳定显示所需数据,可以满足本设计预期的数据显示需 求。同时由于 TFT 液晶的可视角度较宽,16 位色彩表现丰富,设计得液晶显示得到了理想的效果,并对嵌入式设备的屏幕显示技术有一定的意义。
本文作者创新点:通过对 Blackfin 嵌入式处理器的内部资源的合理利用,将其和嵌入式系统 uClinux 的 相结合,应用于 TFT LCD 的驱动设计上。相对基于硬件的驱动设计,基于嵌入式系统 uClinux 的驱动设 计有功能性强、可靠性高、成本低、体积小、功耗低等优势,更具有实际的推广应用价值。