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:硬件框图
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 的驱动设 计有功能性强、可靠性高、成本低、体积小、功耗低等优势,更具有实际的推广应用价值。