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