APP下载

用于单片机系统的VGA显示驱动电路

2021-02-27何成焦杰

网络安全技术与应用 2021年2期
关键词:计数器矩形总线

◆何成 焦杰

用于单片机系统的VGA显示驱动电路

◆何成1焦杰2通讯作者

(1.葫芦岛广播电视监测台 辽宁 125000;2.吉林省广播电视研究所 吉林 130041)

一种可以用单片机驱动的VGA高性能显示电路;采用CPLD设计逻辑电路,控制两片作为显存的SRAM;以16位并行总线高速写入像素数据,经过缓存之后再保存到显存;并行总线不但支持单片机无条件高速写入,而且可以用DMA快速更新任意矩形窗口;具有刷新速度快的特点,并且用两片SRAM分别作为前景页和背景页,可以全屏快速切换刷新。

VGA;CPLD;单片机;DMA;显示页

低成本的单片机系统通常用数码管或小屏LCD输出信息,显示区较小。目前几乎所有的电视机、投影仪、显示器等大屏设备都有VGA输入接口[1]。如果设计一种由单片机直接驱动的VGA显示电路,用动态的文字、图形或视频展示信息,那就可以大幅提升人机界面交互水平。在640X480@60Hz条件下,VGA像素频率为25MHz[2];在800X600@60Hz时,像素频率高达40MHz。因其频率较高,用单片机难以直接处理显示复杂彩色图形、文字或视频[3]。本文介绍一种适用于单片机扩展VGA接口的驱动电路,可以很方便地高速刷新显示动态图像。运用该电路制作的设备在多个广播电视台站应用,效果良好。关于VGA的时序及部分接口电路设计,在参考文献[4]已有介绍,因此本文重点阐述提高系统动态刷新性能的方法。

1 设计目标

广播电视监测工作需要一种的VGA大屏幕信息发布系统,用大号字符动态显示当前时间和其他一些信息,具体要求:

(1)输出640X480@60Hz或800X600@60Hz的64K真彩色,支持16位并行输入接口;

(2)支持任意时刻总线无条件高速写入;

(3)可任意指定显存的写入地址,随机修改屏幕上任意像素;

(4)显存的写地址自动步进,支持快速DMA方式刷新;

(5)支持显示分页,实现全屏图像瞬间刷屏。

2 设计思路

像素采用16位RGB565真彩色格式,全屏像素保存在SRAM显存中,每个像素对应一个地址,用两片512KX16位的存储器IS61LV51216,分别保存前景与背景两屏图像。用CPLD设计数字电路,按VGA像素频率把显存中的数据按地址顺序读出,经过IO脚上由电阻网络组成的简易DAC转变成为模拟信号,分别输出到VGA的RGB三条颜色信号线上。

通常单片机输出的信息总量不会太大,640X480已能满足大多数的使用需要。如果像素频率为25MHz,那么就设计用50MHz的系统时钟,二分频后得到25MHz像素时钟,其低、高电平分别对应显存读取和写入两个时间窗口[5]。在读窗口期间,显存中数据送到DAC,并在读窗口期结束时保持锁存以维持DAC输出。为了支持任意时刻的单片机总线写入,必须把像素数据先缓存在一个16位的缓存中,等到下一次显存的写窗口期才真正写入显存。

若外部像素写入速度低,则显示内容刷新较慢,甚至能看到图像文字在蠕动。可采取显示换页的方法,在屏幕上显示前景页,而把像素悄悄写入背景页,写完之后交换两页可瞬间全屏刷新。

向显存写入像素之前,需要先写入像素的显存地址。通常显示输出的图形或字模都是一个矩形窗口,显示数据都是从左到右成行排列,每行结束再向下排列出新一行像素。因此在绝大多数情况下,像素数据都将顺序写入。若写入地址能够自动累加步进,则总线数据量可减少一半。

3 电路设计

图1是系统主要部分的电路原理图。

图1 主要电路图

图中,用两片型SRAM作为显存,共计1M地址空间,分成由U3低显示页,以及由U2高显示页,利用两个显存的片选CE19和CE19#,选择其中一个显存输出到DAC,二者切换则可实现瞬间换页刷新。用型号为EPM570的CPLD设计控制电路,生成行场同步信号。电阻网络RN1-RN11组成简易DAC,用50MHz的晶振实现640X480分辨率,若要实现800X600分辨率,则需换用80M晶振。

设计16位数据总线FSMC_DA[15..0]并行接口,写信号线FSMC_NWE和控制线FSMC_A16,只支持显存写,不需支持读。写入像素数据之前可写入地址控制字来设置显存的写入地址。控制字有1个位用于设置显示前景页。设计20位的显存地址空间,当FSMC_A16为1时,表明写入16位地址控制字。地址控制字分两次写入,第一次写入的是控制字和显存地址高4位,第二次写入显存低16位地址。当FSMC_A16为0时,写入的是像素数据,每写一次像素,显存的写地址都会自动累加步进。

4 显存读取

在VGA模块中,有一个19位同步累加计数器作为显存地址读计数器,在读窗口期向显存输出读地址,在像素时钟的上升沿累加计数值。

显存地址读计数器只输出19位地址,第20位地址用于总线设置而不参与计数,决定显存读地址处于512K以下还是在512K以上,实现分页功能,可实现图像高速刷新。

5 写地址计数器

地址写模块输出20位输出显存写地址,由1位显存写片选缓存和19位的可重装载同步累加计数器拼接组成。在FSMC_A16高电平期间,20位数值分两次写入,第一次写入高4位,第二次写入低16位。缓存第一次写入Bit15作为显存读片选位,确定哪片SRAM作为前景页;第一次写入Bit3也被缓存,确定像素写入哪片SRAM。在FSMC_A16低电平的像素写入期间,计数器在每个上升沿都累加一次,实现写地址自动步进。

地址步进功能可以提高总线效率。作为追求低成本的单片机系统,通常显示输出的信息量不会太大,需要更新的内容通常只局限于几个特定的矩形窗口区域。如果只想更新这部分内容,可以先写入矩形左上角坐标对应的显存地址,之后依次把这行数据连续写入即可完成第一行刷新。再写入矩形左上角第二行起点的坐标对应显存地址,连续写第二行的数据刷第二行。不断重复每行像素写入,直到最下边一行即可完成整个矩形区刷新。

6 DMA支持

对于那些具有DMA功能的单片机来说,利用地址步进功能可以实现高效快速的矩形窗口刷新。例如使用STM32F103单片机,把这套电路当作存储器接在16位FSMC总线[6]上。设置DMA为存储器到存储器的转输方式,可以把存储器中的图形字模快速写入显存而极少占用CPU时间片。

7 结语

本文介绍的VGA驱动显示电路用型号为EPM570的CPLD设计,资源消耗较少,实际仅占用182个逻辑宏元。运用该电路设计的设备经过实际使用,未出现图像抖动、扭曲、闪烁等差错,效果良好。

[1]陈平平,杨雷,张志坚. 基于FPGA的VGA数据线测试仪的设计与实现[J]. 现代电子技术,2016(14):127.

[2]廖延初.基于FPGA 的便携式视频显示系统的设计[J].福建师大福清分校学报,2018(2):29.

[3]乔威,崔旭晶,等. 基于FPGA 的门禁摄像采集与实时显示系统[J]. 沈阳理工大学学报,2019(1):69.

[4]申中杰,王素珍,等. 基于FPGA的VGA多幅图片动态显示系统[J].单片机与嵌入式系统应用,2018(1):52-56.

[5]焦杰. 利用USB接口的原始视频实时采集系统[J]. 单片机与嵌入式系统应用,2016(7):79.

[6]李良.基于STM32单片机FSMC接口驱动LCD的配置与分析[J]. 机电产品开发与创新,2018(4):72.

猜你喜欢

计数器矩形总线
采用虚拟计数器的电子式膜式燃气表
两矩形上的全偏差
关于74LS90计数器的Multisim仿真分析
化归矩形证直角
一种基于CAN总线的误码测试方法
从矩形内一点说起
SR620型与53230A型计数器的性能测试
算盘是个“小气鬼”
CAN总线并发通信时下位机应用软件设计
基于CAN总线的水下通信系统设计