引言
TFT液晶显示器(LCD)具有功耗低、体积小、工作电压低、使用寿命长、可以显示复杂的文字及彩色图像等优点,在嵌入式设备中得到了广泛的应用,成为人机交互的重要方式。但是TFT液晶显示器驱动具有数据量大、占用引脚多等特点,采用传统的单片机驱动方式不仅会耗费大量的系统运行时间,降低系统效率,而且也会占用大量的I/O引脚。针对这种情况,参考文献[1]提出了一种基于PicoBlaze软核的TFT液晶显示控制方案,取得了较好的效果;但是PicoBlaze软核的程序开发以汇编语言为主,开发难度较大,并且移植困难。本文以Xilinx公司32位嵌入式处理器MicroBlaze为平台,结合EPC软核研究TFT液晶的显示控制方法。
用MicroBlaze实现TFT液晶显示控制有3种方案:
① 通过GPIO模拟液晶的读写时序来实现液晶显示控制,该方案简单易行,缺点是效率低下、刷新速度慢;
② 通过编写底层HDL代码,用自定义IP实现液晶显示控制,该方案可获得较高的性能,但是编写底层HDL代码较为繁琐,难度较大;
③ 利用EDK提供的EPC软核,通过参数配置和少量的胶合逻辑实现液晶显示控制,兼具上述两种方案的优点,并且开发难度适中。因此,本文采用基于EPC软核的实现方案。
1 EPC软核简介
EPC(External Peripheral Controller)是Xilinx公司提供的用于外设控制的IP核,实现PLB总线到外部同步/异步设备之间的数据交互。EPC软核具有以下特点[2]:
◆ 支持字节使能;
◆ 最多支持4个外设,并且每个外设具有独立的地址空间;
◆ 支持同步或异步设备;
◆ 支持地址线、数据线复用和非复用两种模式;
◆ 外设数据宽度可配置,包括8位、16位和32位;
◆ 接口时序参数可配置。
EPC软核的原理框图如图1所示。
图1 EPC软核原理框图
2 TFT液晶显示模块
TFT液晶显示模块为320×240像素、26万色彩色图形点阵式液晶,不仅可以显示数字、字符等内容,还可以显示汉字和任意图形。该模块的控制芯片为SSD1289,与外部的连接只有16位数据线、5根控制线及电源[3]。TFT液晶显示模块引脚功能说明如表1所列。TFT液晶显示模块的读写时序满足标准的8080并行时序,FPGA只要通过这些数据线和控制线,按照相应的时序进行读写,即可实现对模块的显示控制。PWM引脚在本设计中没有用到,将其接到高电平即可。
表1 TFT液晶显示模块引脚功能表
引脚编号引脚名称功能说明
1Vcc电源正(+3.3V)
2GND电源地
3~18DB0~DB15数据线
19CS片选,低有效
20RSRS=1选通数据,
RS=0选通命令
21WR写使能,低有效
22RD读使能,低有效
23PWM亮度调节
9RST复位,低有效
3 系统设计
由于TFT液晶显示模块内置了SSD1289控制芯片,并且其读写时序满足标准的8080并行时序,因此,通过设置EPC软核的相关参数,并配合外部胶合逻辑产生相应的读写时序,即可实现对TFT液晶显示模块的控制。TFT液晶控制模块结构框图如图2所示。
图2 TFT液晶控制模块结构框图
3.1 EPC软核参数配置
EPC软核的参数较多,在充分理解各项参数含义的前提下,对照外设的数据手册对其参数进行设置。本例中的EPC参数设置如下:
BEGIN xps_epc
PARAMETER INSTANCE=xps_epc_0
PARAMETER HW_VER=1.00.a
PARAMETER C_SPLB_CLK_PERIOD_PS=20000
PARAMETER C_PRH0_ADDR_TSU=5000
PARAMETER C_PRH0_ADDR_TH=5000
PARAMETER C_PRH0_ADS_WIDTH=5000
PARAMETER C_PRH0_CSN_TSU=5000
PARAMETER C_PRH0_CSN_TH=5000
PARAMETER C_PRH0_WRN_WIDTH=5000
PARAMETER C_PRH0_WR_CYCLE=120000
PARAMETER C_PRH0_DATA_TSU=5000
PARAMETER C_PRH0_DATA_TH=5000
PARAMETER C_PRH0_RDN_WIDTH=600000
PARAMETER C_PRH0_RD_CYCLE=1200000
PARAMETER C_PRH0_DATA_TOUT=15000
PARAMETER C_PRH0_DATA_TINV=10000
PARAMETER C_PRH0_RDY_TOUT=4000
PARAMETER C_PRH0_RDY_WIDTH=50000
PARAMETER C_PRH_MAX_AWIDTH=4
PARAMETER C_PRH_MAX_DWIDTH=16
PARAMETER C_PRH_MAX_ADWIDTH=16
PARAMETER C_PRH0_AWIDTH=4
PARAMETER C_PRH0_DWIDTH=16
PARAMETER C_PRH0_SYNC=0
PARAMETER C_PRH0_BASEADDR=0x80800000
PARAMETER C_PRH0_HIGHADDR=0x8080ffff
BUS_INTERFACE SPLB=mb_plb
PORT PRH_Data_O=xps_epc_0_PRH_Data_O
PORT PRH_Data_I=xps_epc_0_PRH_Data_I
PORT PRH_Rdy=net_vcc
PORT PRH_Wr_n=xps_epc_0_PRH_Wr_n
PORT PRH_Rd_n=xps_epc_0_PRH_Rd_n
PORT PRH_BE=xps_epc_0_PRH_BE
PORT PRH_Addr=xps_epc_0_PRH_Addr
PORT PRH_CS_n=xps_epc_0_PRH_CS_n
PORT PRH_Clk=net_vcc
END
由上可知,EPC软核的外部接口包括xps_epc_0_PRH_Data_O、xps_epc_0_PRH_Data_I、xps_epc_0_PRH_Data_O、xps_epc_0_PRH_Wr_n、xps_epc_0_PRH_Rd_n、xps_epc_0_PRH_Addr和xps_epc_0_PRH_CS_n。由于上述信号中没有用于选通数据/命令的RS信号和复位信号RST,因此,还要配合胶合逻辑才能与TFT液晶显示模块连接。
3.2 外部胶合逻辑
外部胶合逻辑主要用于产生RS信号和RST信号。由于EPC接口为32位,因此,其最低寻址单元为addr(2)。将其直接连到TFT液晶的RS端,当addr(2)为0时选通命令,当addr(2)为1时选通数据。另外,EPC核没有提供TFT液晶所需的RESET信号,故在胶合逻辑中扩展了一个寄存器,作为TFT液晶的复位控制。由于在本文中不需对TFT进行读操作,因此,将TFT的数据线连到xps_epc_0_PRH_Data_O即可,各信号连线如下所示:
tft_data<=dbi;
tft_rd_n<=re_n when addr(3)=0 else 1;
tft_wr_n<=we_n when addr(3)=0 else 1;
tft_rs<=addr(2);
tft_cs_n<=ce_n when addr(3)=0 else 1;
tft_rst_n<=ctrl_reg(0);
编者注:外部胶合逻辑源代码详见本刊网站www.mesnet.com.cn。
3.3 MicroBlaze C程序设计
完成了底层硬件设计后,即可着手进行顶层的C程序设计。顶层C程序设计最基本的功能是实现写命令和写数据操作。通过上述分析可知,命令寄存器的地址为EPC基地址+0x00,数据寄存器的地址为EPC基地址+0x04。为方便程序设计,作如下宏定义:
#define TFT_COMMAND_REG*(volatile Xuint16 *)(XPAR_XPS_EPC_0_PRH0_BASEADDR)
#define TFT_DATA_REG*(volatile Xuint16 *)(XPAR_XPS_EPC_0_PRH0_BASEADDR+0x04)
在上述宏义基础上,发送命令、发送数据和写命令函数如下所示:
void send_command(uint out_data){
TFT_COMMAND_REG=out_data;
}
void send_data(uint out_data){
TFT_DATA_REG=out_data;
}
void write_com(uint address,uint num){
send_command(address);
send_data(num);
}
有了上述3个函数,就可以很方便地编写出字符显示函数和图形显示函数了。限于篇幅,这里不作介绍,有兴趣的读者请参见本刊网站www.mesnet.com.cn——编者注。
用Xilinx公司的嵌入式开发工具EDK进行综合、实现和下载验证,将生成的比特流下载到Xilinx XUP VirtexII PRO开发板上进行验证。实验结果表明,能够正确驱动TFT液晶实现单种或多种颜色、文字和图形显示,达到了预期目标。经测算,当系统时钟为50 MHz时,本设计刷新率约为24 帧/s,具有较高的实时性。如果将系统时钟提高到100 MHz,还可以进一步加快刷新速度。
结语
本文设计的基于EPC软核的TFT液晶显示控制方案已在Xilinx XUP VirtexII PRO开发板上进行了验证,具有控制灵活、刷新速度快等优点,取得了良好的效果。该方案可以为基于MicroBlaze的嵌入式平台的TFT液晶显示控制提供设计参考。