您当前的位置:钢材 > 型钢 > 市场分析

正点原子开拓者 原理图,正点原子touchgfx

来源:头条 作者: chanong
分享到
关注德勤钢铁网在线:
  • 扫描二维码

    关注√

    德勤钢铁网微信

在线咨询:
  • 扫描或点击关注德勤钢铁网在线客服

1)实验平台:正点原子Pioneer FPGA开发板2)摘自《开拓者 Nios II开发指南》 更多信息请关注官方微信公众号:正点原子3)全套实验源码+手册+视频下载地址:http://www.openv.com com/docs/index.html

第27章:先锋FPGA开发板GUI综合实验

本章通过全面的示例来展示FPGA 强大的并行处理能力及其与Nios II 的交互。

您可以管理和测试开发板的大多数功能。本实验包括uC/GUI、图像缩放处理、

音频播放、OV5640摄像头图像显示、手写画笔等内容很多,大部分功能都是在前端实现的。

由于这是一个实验性的实现,因此本章中我们不会解释代码,而只会介绍程序的设计思想和实现的功能。

本章包含以下部分:

27.1 先锋开发板GUI综合实验概述

27.2 实验任务

27.3 硬件设计

27.4 软件设计

27.5 下载验证

先锋开发板GUI综合实验介绍

您收到的开发板默认内置了这个GUI综合测试实验的程序,并且必须连接到LCD。

在屏幕上显示UI界面并测试开发板的外设。本实验支持Puntatom推出的所有液晶屏。

除了上电自检外,Trailblazer FPGA开发板的综合实验还包括按键测试、LED测试等共计14个关键功能。

测试、蜂鸣器、数码管、串口、红外遥控、EEPROM、环境光、RTC实时时钟、音乐播放、ADDA、

手绘画笔、相机和网络通信。

按钮测试:按钮测试应用程序,可让您测试四个板载按钮的质量。

LED 测试:LED 测试应用程序可让您测试板上四个LED 的质量。

蜂鸣器:蜂鸣器测试应用程序,可让您测试蜂鸣器的质量。

数字真空管:数字真空管测试应用程序,可让您测试数字真空管的质量。

串口:串口通信数据环回应用。通过串口助手完成与开发板的串口通信功能。

红外遥控:红外遥控测试应用程序,可让您测试板载红外遥控的质量。

EEPROM:向EEPROM写入数据,写入完成后读取数据,并将写入的数据与读取的数据进行比较。

通过一致性检查可以判断EEPROM的读写是否正确。

环境光:环境光传感器测试应用程序,读取并显示环境光传感器的光强度和距离值。

RTC 实时时钟:RTC 实时时钟测试应用程序,读取并显示当前日期和时间。

音乐播放:音频信号从板载LINE_IN接口通过扬声器和PHONE接口(接耳机)输入。

您可以通过播放来测试板载音频芯片和扬声器的音质。

ADDA:ADDA测试应用程序,通过DA和AD转换来测试板载ADDA的质量。

手写笔:在液晶屏上留下触摸痕迹,可用于绘图和书写。

摄像头:通过连接OV5640摄像头实时查看视频图像。

网络通讯:以太网上的SMI接口(串行管理接口,串行管理接口),

读取当前网络端口和其他网络设备的连接状态。

以上是综合实验的14个功能的介绍,但大部分功能在之前的实验中已经实现了。

如果还有疑问,请参考之前的内容。简介部分仅介绍新的Qsys IP 核和接口。

接口,即缩放IP核(Scaler II Edge Adaptive)和SMI接口。

扩展IP 核(Scaler II 边缘自适应)

Scaling IP 核是Qsys 系统提供的用于视频图像处理的IP 核。该IP核支持高达200的输入视频流分辨率。

提高或降低输出视频流的分辨率。我们知道,不同尺寸的液晶屏有不同的分辨率。

即使是相同尺寸的液晶屏也可能有不同的分辨率,因此为了进行支持不同分辨率的液晶屏的综合实验,

在我们的综合实验中,我们添加了缩放IP核,以方便兼容不同分辨率的LCD屏幕。

用于扩展IP 核的可选算法包括邻近算法、双线性算法、双三次算法、多项式算法和边缘自适应。

算法。与其他算法相比,邻近算法的缩放效果较小,但消耗的逻辑资源最少。

其他算法扩展性很好,但消耗的逻辑资源相对较多。综合实验考虑

由于驱动外设数量较多、功能复杂,且Pioneer FPGA开发板上的逻辑资源有限,本次实验

采用的缩放算法是消耗逻辑资源最少的邻近算法,其显示效果也能满足要求。

Scaling IP核的配置界面如下图所示。

图27.1.1 Scale IP 核配置界面

每个符号的位数:选择符号的位数(通常为1 个字节)

并行符号:选择要并行发送的符号数量。

顺序符号:选择连续发送的数据个数(通常为1)

启用输出帧大小和边缘/模糊阈值的运行时控制:启用运行时控制

帧输出大小和边缘/模糊阈值。

最大输入帧宽度:选择输入最大帧宽度

输入框最大高度:选择输入框的最大高度。

最大输出帧宽度:选择最大输出帧宽度。

最大输出帧高度:选择最大输出帧高度。

4:2:2视频数据:选择帧格式是否为4:2:2格式

视频无消隐:如果转换为Avalon-ST 视频协议时输入视频不包含垂直消隐,

然后启用

缩放算法:选择缩放算法。最近邻,双线性

法)、Bicubic(双三次算法)、Polyphase(多项式算法)、Edge Adaptive(边缘自适应)

算法)。

其他不常用的参数可以保持默认,这里不再赘述。

下表描述了常用于扩展IP 核的寄存器。

表27.1.1 Scale IP 核寄存器说明

从上表可以看出,地址0控制是否使能缩放IP核,地址3和4控制输出视频分辨率(宽度)。

度和高度)。一旦你知道了你的液晶屏的ID,你也就知道了你的液晶屏的分辨率。现在您所要做的就是输入您的扩展IP 核。

只需将输出分辨率设置为LCD 屏幕的分辨率即可实现与不同分辨率LCD 屏幕的兼容性。

Qsys 系统提供许多VIP(视频和图像处理)IP 核,包括:

示例:图像缩放、图像灰度校正和其他IP核。这些IP核在发送和接收视频数据时必须遵循Avalon

采用ST视频标准进行传输,Avalon-ST视频标准定义了传输信号线如图27.1.2所示。

图27.1.2 Avalon-ST 视频格式信号线

该图显示了两个VIP IP 核通过Avalon-ST 视频标准传输数据的示意图。

Avalon-ST 视频标准端口信号接下来,我们将介绍这些端口信号的含义。

startofpacket:开始数据包。用于指示视频传输中一帧的开始,高电平有效。

endofpacket:结束数据包。用于指示一帧视频传输结束,高电平有效。

数据:视频流数据。

空:可选的空标志信号,如果单次传输超过1个像素,则添加空标志信号。

用于指示哪些数据无效的数字。

valid:有效信号,用于指示数据是否有效。

Ready:就绪信号当Ready信号变高时,发送器开始发送数据。

Avalon-ST视频包传输时序图如下:

PHYAD(PHY地址):由PHY芯片的引脚9、10、12、13和15确定的5位物理地址。

REGAD(寄存器地址):5位寄存器地址。

TA(Turnaround):2位TA读命令,此时MDIO从MAC驱动转变为PHY驱动并等待

一个时钟周期为数据传输做准备。写命令不需要改变MDIO方向,只需等待2个时钟

一个周期准备写数据。

DATA:16位数据对于读命令,PHY芯片将读寄存器数据写入数据;对于写命令,PHY芯片将读寄存器数据写入数据。

,MAC将要写入寄存器的值写入到Data中。

IDLE:空闲状态。此时MDIO处于高阻状态。

PHY芯片在MDC时钟的上升沿收集并输出MDIO数据。 FPGA保证数据可靠传输

在MDC下降沿更新并收集MDIO数据。

请注意,PHY 地址由PHY 芯片的引脚9、10、12、13 和15 确定。这些引脚是

虽然这代表了PHY 芯片的物理地址,但它也用于指示连接状态LED 灯。如果通过RJ45 接口连接,

即使硬件引脚接地,连接到其他网络设备也会导致高电平。先锋FPGA 开发板

连接其他网络设备后,PHY地址为9。

PHY芯片有多个寄存器,表27.1.4和表27.1.5显示了程序中使用的两个寄存器。

其他寄存器详细信息请参阅RTL8201CP 数据表。

表27.1.4 寄存器地址1 详细信息

这里主要读取寄存器地址1的bit[2]来获取当前PHY芯片是否与其他网络设备进行过交互。

线路连接。

表27.1.5 寄存器地址3 的详细信息

寄存器地址3可用于读取当前PHY芯片是否为RTL8201。

实验任务

本章在带液晶屏的Trailblazer FPGA开发板上完成了全面的测试实验,包括上电自检。

14个应用功能,应用功能有:按键测试、LED测试、蜂鸣器、数码管、串口、红外遥控

控制、EEPROM、氛围灯、RTC实时时钟、音乐播放、ADDA、手写笔、摄像头、网络通讯。

此测试允许您测试开发板的大部分功能。

硬件设计

首先,我们将综合实验的功能实现分为“外设驱动”和“用户界面绘制”两部分。

“制造”:用户界面绘制相对复杂,适合软件实现,即在嵌入式处理器Nios II上。

采用C语言设计。对于通信或处理速度要求较高的外设,驱动程序外设选择性相对灵活。

说需要使用OV5640的摄像头图像采集和LCD等硬件来实现,也就是说需要使用Verilog HDL来设计

屏幕显示;其他通信或处理速度要求较低的外设可以使用硬件来实现。

这也可以使用软件来实现。

使用硬件驱动外设会消耗更多的逻辑资源,而使用软件驱动外设只会消耗更多的资源。

只有程序固定的情况下,很少有逻辑资源被限制为EPCS闪存存储资源。 Qsys 系统构建Nios

II处理器和扩展的IP核消耗大量逻辑资源,并受到FPGA逻辑资源大小的限制。

一些速度较慢的外设由Nios II 处理器驱动,而其余外设驱动程序则在硬件中实现。

划分好软硬件后,我们来看一下系统整体实现方案,如图27.3.1所示。 OV5640相机

由于头部图像采集和液晶显示对处理速度要求较高,因此与图像显示相关的功能均由硬件实现。

OV5640摄像头数据首先写入FIFO,然后SDRAM桥控制模块通过Qsys系统生成的SDRAM控制器。

图27.3.10 ST转VIP格式的模块接口及定义

正如引言部分所介绍的,VIP视频协议在发送视频数据包之前需要进行控制。

创建数据包时,通过数据包ID来标识数据包的类型,数据包第一次传输时的D0[3:0]成为数据包类型,用于指示后续传输。

输入类型可以是视频包、控制包或用户包。

ST格式转VIP格式模块在发送视频包之前,首先发送一个控制包类型(ID),ID=4’hF,然后

发送控制包内容,即输入视频宽度为800,高度为480,图像扫描方式为逐行扫描。

发送视频包类型(ID),ID=4'h0,最后发送视频包,即为有效的图像数据。运输包装类型

(ID),数据包开始信号(dout_startofpacket)必须为高电平,并且发送控制和视频数据包的最后一位数据。

传输完成后,数据包结束信号(dout_endofpacket)上升。

请注意,Scaling IP 核配置接口(在软件设计部分中介绍)设置以下数据位宽度:

数据格式为24位,即RGB888,输入数据为RGB565格式,所以输出数据时,每种颜色都是

为了满足Scaling IP核的格式化要求,在颜色分量的低位上加1,最后将该模块输出的信号连接到Qsys系统的缩放。

插入IP核模块。

VIP数据流转Avalon-ST格式数据流

由于缩放IP核模块的输入数据为VIP数据流格式,因此输出分辨率调整后的数据也是

VIP数据流格式。 VIP数据流到ST数据流模块实际上是解压数据及其模块接口定义。

如下所示:

图27.3.11 VIP到ST数据流模块及定义

该模块可以看作是ST格式转换为VIP格式模块的逆过程,将输出的Avalon-ST格式数据连接到VIP格式模块。

下一级模块。

Avalon-ST 数据流FIFO 模块(fifo_2_st)

Avalon-ST 数据传输FIFO 模块主要根据FIFO 中的数据数量将传入的ST 数据流存储到FIFO 中。

控制ST数据流的读取速度。 FIFO读操作接口与LCD驱动模块连接。模块接口定义为:

展示:

图27.3.12 ST 数据流FIFO 模块接口和定义

LCD顶部驱动模块

LCD驱动模块负责驱动LCD屏,包括MCU屏和LCD屏,其模块接口定义如下图所示。

图27.3.13 LCD上驱动模块

该图显示了两组LCD 端口信号,一组连接到顶层模块端口信号,另一组连接到Qsys 模块端口信号。

端口信号中,Qsys模块的LCD端口信号主要用于读取液晶屏的ID,初始化MCU液晶屏。

改变。初始化MCU液晶屏比较复杂,所以需要设置的寄存器有:

非常多,所以这部分内容非常适合 软件来实现,而LCD屏的显示对处理速度要求较高,因此使用硬件来实现。 LCD顶层模块例化了以下四个模块,分别是LCD信号选择模块(lcd_signal_sel)、RGB LCD屏驱动模块(rlcd_driver)、MCU LCD屏驱动(mlcd_driver)和时钟分频模块 (clk_p)。如下图所示: 图 27.3.14 LCD顶层模块框图 LCD信号选择模块主要对顶层模块的LCD端口信号进行连接的选择,当LCD初始化未完成 时,将顶层模块的LCD端口信号连接至Qsys模块;当LCD初始化完成,并且读到的ID为RGB LCD 屏的ID时,将顶层模块的LCD端口信号连接至RGB LCD屏驱动模块;否则连接至MCU LCD屏驱动 模块。 时钟分频模块根据输入的LCD屏的ID,选择输出不同的时钟频率,这是由于不同分辨率的 RGB LCD屏和MCU LCD屏,对应LCD的时钟频率不同。 RGB LCD驱动模块负责驱动RGB LCD屏,同时根据输入的RGB LCD屏的ID,来选择使用不同 的参数,如行同步像素数、行同步后沿像素数等。 MCU LCD驱动模块负责驱动MCU LCD屏,同样也需要根据输入的MCU LCD屏的ID,来选择使 用不同的寄存器地址与寄存器参数。 触摸屏驱动模块 触摸屏驱动模块完成对触摸屏按键的检测与触摸点坐标的获取,其模块接口定义如下图 所示: 图 27.3.15 触摸屏驱动模块接口及定义 触摸屏驱动模块支持正点原子推出的所有电阻屏和电容屏,该模块根据输入的LCD屏的 ID,来对触摸屏执行不同的配置和获取触摸点坐标。当检测到屏幕被按下后,会拉高 touch_done信号,如果touch_valid一直为高电平,则表示触摸屏一直被按下,Nios II通过 Avalon-MM接口来获取坐标值。图中page_paint_flag为Nios II输出的手写画笔界面的标志, 便于电阻屏连续检测触摸点坐标。 触摸屏驱动模块例化了三个子模块,如图 27.3.16所示。其中GT系列芯片配置模块 (touch_gt_cfg)用于初始化触摸屏(GT系列芯片包括4.3寸屏幕和10.1寸屏幕芯片),即通 过IIC接口对GT芯片进行配置,并在配置完成后拉高配置完成信号(cfg_done)。而电容触摸 驱动模块(touch_ctrl)负责控制所有电容触摸屏驱动的整个流程,包括控制触摸屏初始化 的开始、检测触摸屏是否被按下以及读取触摸点的坐标。电阻触摸驱动模块(xpt2046)负责 驱动电阻触摸屏,需要注意的是,电容触摸屏的驱动采用的是IIC协议,而电阻触摸屏采用的 是SPI协议。 图 27.3.16 触摸屏模块框图 GT系列芯片配置模块例化了以下三个模块,分别是信号切换模块(signal_switch)、 IIC驱动模块(i2c_dri_m)和i2c参数配置模块(i2c_reg_cfg),如图 27.3.17所示。 图 27.3.17 GT系列芯片配置模块框图 这里的IIC驱动模块和“EEPROM读写实验”中所使用的IIC驱动模块有些区别,在 “EEPROM读写实验”中,IIC驱动模块只支持单次读写,并不支持连续的读写。由于触摸屏的 初始化参数比较多,并且在读取触摸点坐标时也会对IIC接口进行连续的读操作,因此本次实 验在此基础上,增加了对IIC接口连续读写的功能,单次操作连续读写的次数由reg_num进行 设置,这样将会大大提高IIC读写的速度。当IIC单个地址读写完成后,IIC驱动模块会输出一 个单次完成的脉冲信号(once_done);当IIC单次操作完成后(连续地址读写完成),会输 出一个IIC操作完成的脉冲信号(i2c_done)。 IIC参数配置模块寄存了触摸屏初始化参数,由于本次试验FPGA的逻辑资源消耗很多,而 RAM资源消耗的较少,因此本次试验将GT系列的配置参数全部放在mif文件里,即存储在ROM 中。 由于电容屏驱动模块的读写操作和IIC参数配置模块的初始化操作都会用到IIC接口,因此这两个模块输出的端口信号需要先做一个选择,再连接到IIC的驱动模块中,信号选择的功 能是由信号切换模块实现的。这个模块实现的方法也比较简单,根据输入的cfg_switch信号 的高低电平进行选择。当cfg_switch为高电平时,将IIC参数配置模块的IIC操作端口信号连 接至IIC驱动模块;当cfg_switch为低电平时,将电容屏驱动模块的IIC操作端口信号连接至 IIC驱动模块。 在硬件设计部分中,主要向大家介绍了SDRAM桥控制模块的读写、缩放IP核输入数据的格 式转换与输出数据的格式转换、LCD屏幕显示驱动以及触摸驱动,而其它外设的驱动模块在前 面的实验中都有详细的讲解,这里不再重复赘述。需要说明的是,Nios II处理器通过 Avalon-MM端口来写入和读出模块中的数据,比如红外接收到的数据、数码管显示的数值等。 在介绍完各功能模块后,接下来我们在软件设计部分介绍一下如何实现UI界面的绘制, 以及如何利用触摸屏来实现与用户的交互。 软件设计 综合实验的UI界面比较复杂,包括上电自检界面、主界面以及14个应用功能子界面。为 了提高UI界面的开发效率,UI界面的绘制我们将在Nios II中采用uC/GUI来实现。Nios II除 了负责完成用户界面的绘制外,还根据触摸屏输入的触摸点坐标来实现相应的功能,为了做 到触摸点坐标的实时响应,本次实验触摸屏的驱动是在硬件中使用Verilog语言实现,Nios II通过Avalon-MM端口来获取触摸驱动模块输出的触摸点的坐标。由于FPGA的逻辑资源有限, Nios II处理器也负责驱动部分外设。 Qsys系统搭建 在介绍完触摸驱动模块和SDRAM桥控制模块之后,接下来我们来介绍下Qsys系统环境的搭 建,如图 27.4.1所示: 图 27.4.1 Qsys系统的搭建 Qsys系统使用的IP核,绝大多数在我们前面的实验中都有涉及,其中avalon_mm_bridge 为自定义的IP核,Nios II处理器通过Avalon-MM端口来写入和读出硬件模块中的数据; sdram_bridge为Avalon-MM Pipeline Bridge IP核,通过SDRAM控制器来突发读写SDRAM; pio_mdc和pio_mdio为以太网的MDC/MDIO管理接口,用于读取以太网的和其它网络设备的连接 状态;pio_cs、pio_clk、pio_mosi、pio_miso为SD卡的端口信号,用于对SD卡进行读写测 试;pio_page_paint_flag为手写画笔界面的标志,方便触摸驱动模块对连续触摸进行检测; 缩放IP核(alt_vip_cl_scl_0)用于放大和缩小图像的分辨率,以兼容不同分辨率的屏幕。 这里我们主要介绍下缩放IP核(alt_vip_cl_scl_0),其配置界面如图 27.4.3所示: 图 27.4.3 缩放IP核配置页面 Bits per symbol(symbol的位数)设置为8,Symbols in parallel(并行发送的symbol 个数)设置为3,Symbols in sequence(按顺序发送数据的个数)设置为1,则发送数据的位 宽为24(8*3)位。 由于本次实验需要根据LCD屏ID来调整缩放比,因此使能运行时控制帧输出大小。 缩放IP核固定输入分辨率为800x480,最大输出分辨率为1280x800(10.1寸RGB LCD 屏)。 输入视频在转换到Avalon-ST视频协议时不包含垂直消隐,因此勾选No Blanking invideo。 由于FPGA的逻辑资源有限,因此缩放算法这里选择对逻辑资源消耗最少的临近算法 (Nearest Neighbor),其余配置保持默认即可。 Nios II软件设计 在介绍完Qsys系统的搭建之后,最后我们再来介绍一下Nios II软件设计部分。 Nios II主要负责绘制上电自检界面、主界面以及14个应用功能子界面,除此之外,还需 要判断用户的触摸操作和部分外设的驱动。上电自检界面如图 27.4.4所示: 图 27.4.4 上电自检界面 在前面学**了uC/GUI相关的章节之后,相信对大家来说,绘制上图中的用户界面是比较 容易的。图中主要使用GUI_DispStringAt()函数绘制字符串,而对外设的测试方法,如 EEPROM、SD卡、AP3216C,则是向某个或某段地址写入固定值,然后读出数据,比较读出的值 和写入的值是否一致,如果一致则外设测试正确,否则外设测试出错。RTC实时时钟的测试方 法和其它外设有些区别,这里是通过读取RTC实时时钟的秒寄存器,如果在一秒时间内,秒寄 存器数值加1,则测试正确(如果数值为59,则加1后为0),否则测试错误。 在开发板上电自检完成后,接下来会进入主界面,主界面如图 27.4.5所示: 图 27.4.5 LCD显示主界面 这里需要强调的是,主界面的绘制并不是先绘制背景图片,再绘制应用图标和文字,而 是整个主界面是一幅图片,直接把图片绘制出来,就是上图中LCD显示的主界面。这里主要是 考虑到过多的字体和图片在最终固化程序时,会占用大量EPCS Flash的存储资源,而开发板 的片外存储资源是有限的,因此将主界面作为一副图片显示在主界面上。 接下来我们看下main函数的代码,了解下Nios II执行的过程,由于main函数的代码较 长,这里只贴上部分代码。 170 int main() 171 { 172 alt_u8 key,key_pre; 173 alt_u8 i; 174 175 alt_u8 led_button; 176 alt_u8 led_num; 177 178 alt_u8 grade=vol/8; //音频的音量级别 179 alt_u8 page_5640_done = 0; //ov5640子页面绘制完成页面 180 181 MY_LCD_Init(); //LCD初始化 182 183 IOWR_ALTERA_AVALON_PIO_DATA(PIO_OV5640_EN_BASE, 0); //显示GUI界面 184 GUI_Init(); //uC/GUI初始化 185 GUI_UC_SetEncodeUTF8(); //设置汉字编码格式 186 GUI_SetFont(&GUI_FontChinese_WRYH32); 187 188 lcdgui.width = lcddev.height; 189 lcdgui.height = lcddev.width; 190 height_ave32 = lcdgui.height/32; 191 width_ave8 = lcdgui.width/8; 192 193 switch(lcddev.id){ 194 case 0x9341:{ 195 IOWR(ALT_VIP_CL_SCL_0_BASE,3,320); //设置缩放后图像宽度 196 IOWR(ALT_VIP_CL_SCL_0_BASE,4,240); //设置缩放后图像高度 197 break; 198 } 199 case 0x5310:{ 200 IOWR(ALT_VIP_CL_SCL_0_BASE,3,480); //设置缩放后图像宽度 201 IOWR(ALT_VIP_CL_SCL_0_BASE,4,320); //设置缩放后图像高度 202 break; 203 } 204 case 0x5510:{ 205 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 206 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 207 break; 208 } 209 case 0x1963:{ 210 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 211 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 212 break; 213 } 214 case 0x4342:{ 215 IOWR(ALT_VIP_CL_SCL_0_BASE,3,480); //设置缩放后图像宽度 216 IOWR(ALT_VIP_CL_SCL_0_BASE,4,272); //设置缩放后图像高度 217 break; 218 } 219 case 0x7084:{ 220 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 221 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 222 break; 223 } 224 case 0x7016:{ 225 IOWR(ALT_VIP_CL_SCL_0_BASE,3,1024); //设置缩放后图像宽度 226 IOWR(ALT_VIP_CL_SCL_0_BASE,4,600); //设置缩放后图像高度 227 break; 228 } 229 case 0x1018:{ 230 IOWR(ALT_VIP_CL_SCL_0_BASE,3,1280); //设置缩放后图像宽度 231 IOWR(ALT_VIP_CL_SCL_0_BASE,4,800); //设置缩放后图像高度 232 break; 233 } 234 default: ; 235 } 236 237 IOWR(ALT_VIP_CL_SCL_0_BASE,0,1); //启动缩放模块 238 IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCD_INIT_DONE_BASE,1); //初始化完成 239 240 init_tp_interrupt(); //触摸屏中断初始化 241 init_touch_key_interrupt(); //触摸按键中断初始化 242 init_uart_interrupt(); //串口中断初始化 243 init_paint_interrupt(); //手写画笔中断初始化 244 disable_paint_interrupt(); //初始化关闭画笔结束中断 245 246 gui_draw_sys_test_page(); //画系统测试界面 247 gui_draw_home_page(); //画主界面 248 249 while(1) …… 在LCD屏初始化完成后,获取到LCD屏的ID,此时根据LCD屏的ID,来设置缩放IP核输出分 辨率,使能缩放IP核并拉高LCD初始化完成信号,如代码中第193至第238行所示。接下来绘制 开发板的上电自检界面,自检界面完成后,进入主界面,如代码中第246行和第247行代码所 示。进入主界面后,接下来开始根据用户的触摸操作,来切换显示各个应用子界面,这部分 内容由while循环来完成。 我们这里只简单介绍下main函数的程序,了解下Nios程序的执行过程,还需要注意的是 当触摸屏被按下后,触摸屏驱动模块有可能检测到单个触摸点坐标触发多次,此时程序会多 次进入触摸中断函数tp_interrupt(),导致功能错误的情况。为了避免这一情况,在触摸屏 驱动模块中加入了对触摸点坐标的判断,如果触摸屏一直被按下没有松开,并且当前触摸点 坐标和上一次触摸点坐标一致的话,则忽略当前触摸点的坐标。 除此之外,新起点开发板的GUI综合程序只是在开拓者开发板GUI综合程序做了简单的修 改,因为两块FPGA开发板上的外设有所区别,因此我们在draw_page.h文件中定义了开发板的 类型,如下所示: #define BOARD_TYPE 1 //0:新起点 1:开拓者 当BOARD_TYPE = 1时,表示执行开拓者的程序;当BOARD_TYPE = 0时,表示执行新起点 的程序。另外开拓者GUI程序改成适配新起点开发板,也不仅仅修改这一个参数,同时还需要 修改主界面的显示图片。 下载验证 接下来我们把程序下载至开拓者开发板上,验证我们所完成的GUI综合实验的功能。 要测试开拓者FPGA开发板综合实验的全部功能,大家得自备1张SD卡、1根网线、OV5640 摄像头。不过,就算没有外接这些模块,综合实验还是可以正常运行的,只是有些限制而 已。 针对LCD屏这里再补充一点,GUI综合实验必须连接LCD屏才能看到显示效果,该实验基于 图像缩放算法来适配不同分辨率的LCD屏幕,图像缩放之前的原始分辨率大小为800*480,而 2.8寸屏幕和3.5寸屏幕分辨率较低,所以缩放之后,字体的显示效果会比高分辨率屏幕的显 示效果差,为了获得更好的显示效果,建议大家连接4.3寸及以上的屏幕。 这里以4.3寸RGB LCD屏为例,大家拿出开发板,先接上12V1A电源适配器给开发板供 电,RGB LCD屏和开发板是通过40P的FPC排线相连接,如下图所示: 图 27.5.1开拓者FPGA开发板与4.3寸RGB屏连接示意图 最后,按下电源开关,给开发板上电,此时开发板右下角的蓝色电源灯会亮,同时开发 板会对EEPROM、SD卡、AP3216C和RTC做读写测试,如下图所示: 图 27.5.2 开拓者FPGA开发板开机自检界面 如果开发板在上电前连接了SD卡(SD卡槽在开发板背面),在测试成功后显示OK;如果 没有连接SD卡的话,会提示Error。 接下来进入到主界面之后,就可以通过点击屏幕的图标进行各项功能测试了。主界面如 下图所示: 图 27.5.3 RGB LCD液晶屏主界面 主界面有1个页面,总共是14个图标。每个图标代表一大功能,主界面顶部是状态栏, 用于显示“正点原子”四个字和当前时间。在任何界面下,都可以通过按下TPAD触摸按键返 回上一级,直至返回主界面。PS:TPAD就是开拓者FPGA开发板上的一个触摸按键,即右下角 的白色骷髅头。 如果大家的开发板连接了VGA显示器的话,在开发板上电之后,VGA显示器会显示出彩 条。需要说明的是,LCD屏处于任何GUI界面,VGA显示器都会一直显示彩条的,如下图所示。 图 27.5.4 开拓者开发板VGA显示画面 在介绍完主界面后,接下来我们开始介绍各个功能。 1、按键测试 点击主界面的按键测试图标,进入如图 27.5.5所示的界面: 图 27.5.5 按键测试界面 上图中,左侧的图片是我们点击按键测试后进入的子界面,可以看到,图中共四个按键 图标,分别对应开拓者开发板上的KEY0~KEY3按键。当我们按下开发板上其中的一个按键后, 界面上对应的按键图标会变成红色背景,如上图中右侧图片所示;松开按键后,按键图标又 会恢复成黄色背景。 当我们想退出按键测试界面时,只需要按下开发板上的TPAD触摸按钮即可。 2、LED测试 点击主界面的LED测试图标,进入如图图 27.5.6所示的界面: 图 27.5.6 LED测试界面 上图中,左侧的图片是我们点击LED测试后进入的子界面,图中从左往右共4个LED图标, 分别对应开发板上的DS0~DS3,图标下方的按钮用来控制开发板上的LED灯的亮灭。当我们点 击界面上的其中一个按钮后,界面上对应的LED图标会变成蓝色(如上图中右侧图片所示), 同时开发板上的LED灯会点亮;再次点击按钮后,界面上对应的LED图标恢复成白色,同时开 发板上的LED灯会熄灭。 3、蜂鸣器 点击主界面的蜂鸣器图标,进入如图 27.5.7所示的界面: 图 27.5.7 蜂鸣器测试界面 上图中,左侧的图片是我们点击蜂鸣器后进入的子界面,点击界面上的“打开”按钮, 此时可以听到开发板上的蜂鸣器在鸣叫,并且按钮会显示成“关闭”(如上图中右侧图片所 示);点击界面上的“关闭”按钮,蜂鸣器即可停止鸣叫。 4、数码管 点击主界面的数码管图标,进入如图 27.5.8所示的界面: 图 27.5.8 数码管测试界面 上图中,左侧的图片是我们点击数码管后进入的子界面,图中有三个按钮,分别是 “-”、“打开”和“+”按钮。我们点击界面上的“打开”按钮,此时可以看到开发板上的 数码管显示数字,并且界面上同样也会显示数码管显示的数字(如上图中右侧图片所示), 点击界面上的“+”和“-”按钮可以对数字进行加减,点击“关闭”按钮即可关闭数码管的 显示。 5、串口 我们开拓者FPGA开发板板载两个串口,一个是USB串口,另一个是RS232串口,我们这里 测试的是USB串口。在开始测试之前,我们需要将USB线一端连接电脑,另一端与开发板上的 USB_232口相连接,需要注意的是,大家在第一次做串口实验时,需要安装USB的串口驱动程 序,该程序位于资料盘的“6_软件资料\1_软件\CH340驱动(USB串口驱动)_XP_WIN7共用”文 件夹下。串口测试需要在电脑中打开串口调试助手才能完成通信,我们资料盘中提供了几种 调试助手,本次测试使用的是“XCOM”调试助手,该软件位于“6_软件资料\1_软件\串口调 试助手\XCOM(ALIENTEK官方推荐)”文件夹下。我们本次串口通信的波特率为115200,串口 打开和设置完成后的界面如图 27.5.9所示。 图 27.5.9 串口打开界面 不同电脑的不同USB口串口号可能会不一样,大家可以根据自己的电脑进行选择,我们这 里选择的是COM5:USB-SERIAL CH340。 点击主界面的串口图标,进入如图 27.5.10所示的界面: 图 27.5.10 串口测试界面 上图是我们点击串口后进入的子界面,我们点击界面上的“发送”按钮,串口调试助手 即可接收到开发板发送的数据,如下图所示: 图 27.5.11 串口助手接收到数据 这个时候,我们点击串口调试助手的“发送”按钮,开发板界面上会显示接收到的数 据,如下图所示: 图 27.5.12 串口测试界面 6、红外遥控 点击主界面的串口图标,进入如图 27.5.13所示的界面: 图 27.5.13 红外遥控测试界面 上图中,左侧的图片是我们点击红外遥控后进入的子界面,图中第一栏是遥控器的键 值,第二栏是遥控器的符号。此时按下遥控器的按键(使用遥控器之前需要先将遥控器后部 的塑料绝缘片拔出),界面上会显示出遥控器的键值和符号(如上图中右侧图片所示)。 7、EEPROM EEPROM是板载的电可擦除可编程只读存储器,是一种常用的非易失性存储器,点击主界 面的EEPROM图标,进入如图 27.5.14所示的界面: 图 27.5.14 EEPROM测试界面 上图中,左侧的图片是我们点击EEPROM后进入的子界面,点击“测试”按钮后,FPGA开 始向EEPROM的地址0写入数据0,数据写完后从地址0中读取数据,并将读取的数据显示在页面 中的读数据上;接着FPGA向EEPROM中的地址1中写入数据1,同样是写完后将数据读取出来, 并显示在界面上,直至写至EEPROM的地址99开始停止(如上图中右侧图片所示)。比较写入 的数据和读出的数据是相同的,说明本次EEPROM测试成功。 8、环境光 环境光传感器(AP3216C)是一个能够测量环境光强度和距离的整合型光感测距传感器。 点击主界面的环境光图标,进入如图 27.5.15所示的界面: 图 27.5.15 AP3216C测试界面 上图是我们点击环境光后进入的子界面,界面中第一栏是环境光的强度,第二栏是距离 值。环境光传感器(U7)位于开发板的左下角位置(靠近数码管),通过增加光照和接近环境 光传感器,可以在界面上看到光照值和距离值的实时变化。 9、时钟 点击主界面的时钟图标,进入如图 27.5.16所示的界面: 图 27.5.16 时钟测试界面 上图是我们点击时钟后进入的子界面,界面中显示了日期、时间、温度信息,并且在上 方区域,有一个指针式时钟显示。 同样,按下TPAD触摸按钮返回至主界面。 10、音乐播放 点击主界面的音乐播放图标,进入如图 27.5.17所示的界面: 图 27.5.17 音乐播放界面 上图是我们点击音乐播放后进入的子界面,界面中有三个按钮,分别是“-”、“打开” 和“-”按钮。首先点击“打开”按钮,启动音频播放的功能,然后使用音频线一端连接开发 板上的LINE_IN接口,另一端与播放设备相连接(电脑或者手机的耳机接口),此时开发板上 的喇叭会播放手机或者电脑播放的音乐,如果将耳机连接至开发板上的PHONE接口,在耳机中 同样可以听到音乐。 11、ADDA 点击主界面的ADDA(模数/数模转换)图标,进入如图 27.5.18所示的界面: 图 27.5.18 ADDA测试界面 上图中,左侧的图片是我们点击ADDA后进入的子界面,板载的ADDA芯片同时具有模数和 数模转换的功能,点击“测试”按钮后,DA输出的数字量从0累加至255(如上图中右侧图片 所示),此时AD采集到的模拟电压值从0累加至约3.3V说明测试成功。 12、手写画笔 点击主界面的手写画笔图标,进入手写画笔的界面。通过在白板界面滑动手指可以看到 留下的轨迹,如图 27.5.19所示。 图 27.5.19 手写画笔测试界面 同样,按下TPAD触摸按钮返回至主界面。 13、摄像头 此应用支持的摄像头模块为ALIENTEK OV5640-AF这款500W像素的CMOS摄像头模块,在进 入摄像头应用之前,需要先将OV5640插在开发板上的Camera扩展接口上(摄像头镜头方向朝 外),点击主界面的摄像头图标,进入图 27.5.20所示的界面: 图 27.5.20 摄像头采集画面 上图是我们点击摄像头后进入的子界面,接下来就可以从界面中看到摄像头采集到的画 面,按下TPAD触摸按钮返回至主界面。 14、网络通信 此应用可以读取开发板的网口是否连接网线,点击主界面的网络通信图标,进入图 27.5.21所示界面。 图 27.5.21 以太网测试界面 上图是我们点击网络通信后进入的子界面,如果此时未连接网线的话,界面中会提示 “请连接网线!”,如果已经连接了网线,界面中会提示“Check OK!”。
责任编辑:德勤钢铁网 标签:

热门搜索

相关文章

广告
德勤钢铁网 |市场分析

正点原子开拓者 原理图,正点原子touchgfx

chanong

|

1)实验平台:正点原子Pioneer FPGA开发板2)摘自《开拓者 Nios II开发指南》 更多信息请关注官方微信公众号:正点原子3)全套实验源码+手册+视频下载地址:http://www.openv.com com/docs/index.html

第27章:先锋FPGA开发板GUI综合实验

本章通过全面的示例来展示FPGA 强大的并行处理能力及其与Nios II 的交互。

您可以管理和测试开发板的大多数功能。本实验包括uC/GUI、图像缩放处理、

音频播放、OV5640摄像头图像显示、手写画笔等内容很多,大部分功能都是在前端实现的。

由于这是一个实验性的实现,因此本章中我们不会解释代码,而只会介绍程序的设计思想和实现的功能。

本章包含以下部分:

27.1 先锋开发板GUI综合实验概述

27.2 实验任务

27.3 硬件设计

27.4 软件设计

27.5 下载验证

先锋开发板GUI综合实验介绍

您收到的开发板默认内置了这个GUI综合测试实验的程序,并且必须连接到LCD。

在屏幕上显示UI界面并测试开发板的外设。本实验支持Puntatom推出的所有液晶屏。

除了上电自检外,Trailblazer FPGA开发板的综合实验还包括按键测试、LED测试等共计14个关键功能。

测试、蜂鸣器、数码管、串口、红外遥控、EEPROM、环境光、RTC实时时钟、音乐播放、ADDA、

手绘画笔、相机和网络通信。

按钮测试:按钮测试应用程序,可让您测试四个板载按钮的质量。

LED 测试:LED 测试应用程序可让您测试板上四个LED 的质量。

蜂鸣器:蜂鸣器测试应用程序,可让您测试蜂鸣器的质量。

数字真空管:数字真空管测试应用程序,可让您测试数字真空管的质量。

串口:串口通信数据环回应用。通过串口助手完成与开发板的串口通信功能。

红外遥控:红外遥控测试应用程序,可让您测试板载红外遥控的质量。

EEPROM:向EEPROM写入数据,写入完成后读取数据,并将写入的数据与读取的数据进行比较。

通过一致性检查可以判断EEPROM的读写是否正确。

环境光:环境光传感器测试应用程序,读取并显示环境光传感器的光强度和距离值。

RTC 实时时钟:RTC 实时时钟测试应用程序,读取并显示当前日期和时间。

音乐播放:音频信号从板载LINE_IN接口通过扬声器和PHONE接口(接耳机)输入。

您可以通过播放来测试板载音频芯片和扬声器的音质。

ADDA:ADDA测试应用程序,通过DA和AD转换来测试板载ADDA的质量。

手写笔:在液晶屏上留下触摸痕迹,可用于绘图和书写。

摄像头:通过连接OV5640摄像头实时查看视频图像。

网络通讯:以太网上的SMI接口(串行管理接口,串行管理接口),

读取当前网络端口和其他网络设备的连接状态。

以上是综合实验的14个功能的介绍,但大部分功能在之前的实验中已经实现了。

如果还有疑问,请参考之前的内容。简介部分仅介绍新的Qsys IP 核和接口。

接口,即缩放IP核(Scaler II Edge Adaptive)和SMI接口。

扩展IP 核(Scaler II 边缘自适应)

Scaling IP 核是Qsys 系统提供的用于视频图像处理的IP 核。该IP核支持高达200的输入视频流分辨率。

提高或降低输出视频流的分辨率。我们知道,不同尺寸的液晶屏有不同的分辨率。

即使是相同尺寸的液晶屏也可能有不同的分辨率,因此为了进行支持不同分辨率的液晶屏的综合实验,

在我们的综合实验中,我们添加了缩放IP核,以方便兼容不同分辨率的LCD屏幕。

用于扩展IP 核的可选算法包括邻近算法、双线性算法、双三次算法、多项式算法和边缘自适应。

算法。与其他算法相比,邻近算法的缩放效果较小,但消耗的逻辑资源最少。

其他算法扩展性很好,但消耗的逻辑资源相对较多。综合实验考虑

由于驱动外设数量较多、功能复杂,且Pioneer FPGA开发板上的逻辑资源有限,本次实验

采用的缩放算法是消耗逻辑资源最少的邻近算法,其显示效果也能满足要求。

Scaling IP核的配置界面如下图所示。

图27.1.1 Scale IP 核配置界面

每个符号的位数:选择符号的位数(通常为1 个字节)

并行符号:选择要并行发送的符号数量。

顺序符号:选择连续发送的数据个数(通常为1)

启用输出帧大小和边缘/模糊阈值的运行时控制:启用运行时控制

帧输出大小和边缘/模糊阈值。

最大输入帧宽度:选择输入最大帧宽度

输入框最大高度:选择输入框的最大高度。

最大输出帧宽度:选择最大输出帧宽度。

最大输出帧高度:选择最大输出帧高度。

4:2:2视频数据:选择帧格式是否为4:2:2格式

视频无消隐:如果转换为Avalon-ST 视频协议时输入视频不包含垂直消隐,

然后启用

缩放算法:选择缩放算法。最近邻,双线性

法)、Bicubic(双三次算法)、Polyphase(多项式算法)、Edge Adaptive(边缘自适应)

算法)。

其他不常用的参数可以保持默认,这里不再赘述。

下表描述了常用于扩展IP 核的寄存器。

表27.1.1 Scale IP 核寄存器说明

从上表可以看出,地址0控制是否使能缩放IP核,地址3和4控制输出视频分辨率(宽度)。

度和高度)。一旦你知道了你的液晶屏的ID,你也就知道了你的液晶屏的分辨率。现在您所要做的就是输入您的扩展IP 核。

只需将输出分辨率设置为LCD 屏幕的分辨率即可实现与不同分辨率LCD 屏幕的兼容性。

Qsys 系统提供许多VIP(视频和图像处理)IP 核,包括:

示例:图像缩放、图像灰度校正和其他IP核。这些IP核在发送和接收视频数据时必须遵循Avalon

采用ST视频标准进行传输,Avalon-ST视频标准定义了传输信号线如图27.1.2所示。

图27.1.2 Avalon-ST 视频格式信号线

该图显示了两个VIP IP 核通过Avalon-ST 视频标准传输数据的示意图。

Avalon-ST 视频标准端口信号接下来,我们将介绍这些端口信号的含义。

startofpacket:开始数据包。用于指示视频传输中一帧的开始,高电平有效。

endofpacket:结束数据包。用于指示一帧视频传输结束,高电平有效。

数据:视频流数据。

空:可选的空标志信号,如果单次传输超过1个像素,则添加空标志信号。

用于指示哪些数据无效的数字。

valid:有效信号,用于指示数据是否有效。

Ready:就绪信号当Ready信号变高时,发送器开始发送数据。

Avalon-ST视频包传输时序图如下:

PHYAD(PHY地址):由PHY芯片的引脚9、10、12、13和15确定的5位物理地址。

REGAD(寄存器地址):5位寄存器地址。

TA(Turnaround):2位TA读命令,此时MDIO从MAC驱动转变为PHY驱动并等待

一个时钟周期为数据传输做准备。写命令不需要改变MDIO方向,只需等待2个时钟

一个周期准备写数据。

DATA:16位数据对于读命令,PHY芯片将读寄存器数据写入数据;对于写命令,PHY芯片将读寄存器数据写入数据。

,MAC将要写入寄存器的值写入到Data中。

IDLE:空闲状态。此时MDIO处于高阻状态。

PHY芯片在MDC时钟的上升沿收集并输出MDIO数据。 FPGA保证数据可靠传输

在MDC下降沿更新并收集MDIO数据。

请注意,PHY 地址由PHY 芯片的引脚9、10、12、13 和15 确定。这些引脚是

虽然这代表了PHY 芯片的物理地址,但它也用于指示连接状态LED 灯。如果通过RJ45 接口连接,

即使硬件引脚接地,连接到其他网络设备也会导致高电平。先锋FPGA 开发板

连接其他网络设备后,PHY地址为9。

PHY芯片有多个寄存器,表27.1.4和表27.1.5显示了程序中使用的两个寄存器。

其他寄存器详细信息请参阅RTL8201CP 数据表。

表27.1.4 寄存器地址1 详细信息

这里主要读取寄存器地址1的bit[2]来获取当前PHY芯片是否与其他网络设备进行过交互。

线路连接。

表27.1.5 寄存器地址3 的详细信息

寄存器地址3可用于读取当前PHY芯片是否为RTL8201。

实验任务

本章在带液晶屏的Trailblazer FPGA开发板上完成了全面的测试实验,包括上电自检。

14个应用功能,应用功能有:按键测试、LED测试、蜂鸣器、数码管、串口、红外遥控

控制、EEPROM、氛围灯、RTC实时时钟、音乐播放、ADDA、手写笔、摄像头、网络通讯。

此测试允许您测试开发板的大部分功能。

硬件设计

首先,我们将综合实验的功能实现分为“外设驱动”和“用户界面绘制”两部分。

“制造”:用户界面绘制相对复杂,适合软件实现,即在嵌入式处理器Nios II上。

采用C语言设计。对于通信或处理速度要求较高的外设,驱动程序外设选择性相对灵活。

说需要使用OV5640的摄像头图像采集和LCD等硬件来实现,也就是说需要使用Verilog HDL来设计

屏幕显示;其他通信或处理速度要求较低的外设可以使用硬件来实现。

这也可以使用软件来实现。

使用硬件驱动外设会消耗更多的逻辑资源,而使用软件驱动外设只会消耗更多的资源。

只有程序固定的情况下,很少有逻辑资源被限制为EPCS闪存存储资源。 Qsys 系统构建Nios

II处理器和扩展的IP核消耗大量逻辑资源,并受到FPGA逻辑资源大小的限制。

一些速度较慢的外设由Nios II 处理器驱动,而其余外设驱动程序则在硬件中实现。

划分好软硬件后,我们来看一下系统整体实现方案,如图27.3.1所示。 OV5640相机

由于头部图像采集和液晶显示对处理速度要求较高,因此与图像显示相关的功能均由硬件实现。

OV5640摄像头数据首先写入FIFO,然后SDRAM桥控制模块通过Qsys系统生成的SDRAM控制器。

图27.3.10 ST转VIP格式的模块接口及定义

正如引言部分所介绍的,VIP视频协议在发送视频数据包之前需要进行控制。

创建数据包时,通过数据包ID来标识数据包的类型,数据包第一次传输时的D0[3:0]成为数据包类型,用于指示后续传输。

输入类型可以是视频包、控制包或用户包。

ST格式转VIP格式模块在发送视频包之前,首先发送一个控制包类型(ID),ID=4’hF,然后

发送控制包内容,即输入视频宽度为800,高度为480,图像扫描方式为逐行扫描。

发送视频包类型(ID),ID=4'h0,最后发送视频包,即为有效的图像数据。运输包装类型

(ID),数据包开始信号(dout_startofpacket)必须为高电平,并且发送控制和视频数据包的最后一位数据。

传输完成后,数据包结束信号(dout_endofpacket)上升。

请注意,Scaling IP 核配置接口(在软件设计部分中介绍)设置以下数据位宽度:

数据格式为24位,即RGB888,输入数据为RGB565格式,所以输出数据时,每种颜色都是

为了满足Scaling IP核的格式化要求,在颜色分量的低位上加1,最后将该模块输出的信号连接到Qsys系统的缩放。

插入IP核模块。

VIP数据流转Avalon-ST格式数据流

由于缩放IP核模块的输入数据为VIP数据流格式,因此输出分辨率调整后的数据也是

VIP数据流格式。 VIP数据流到ST数据流模块实际上是解压数据及其模块接口定义。

如下所示:

图27.3.11 VIP到ST数据流模块及定义

该模块可以看作是ST格式转换为VIP格式模块的逆过程,将输出的Avalon-ST格式数据连接到VIP格式模块。

下一级模块。

Avalon-ST 数据流FIFO 模块(fifo_2_st)

Avalon-ST 数据传输FIFO 模块主要根据FIFO 中的数据数量将传入的ST 数据流存储到FIFO 中。

控制ST数据流的读取速度。 FIFO读操作接口与LCD驱动模块连接。模块接口定义为:

展示:

图27.3.12 ST 数据流FIFO 模块接口和定义

LCD顶部驱动模块

LCD驱动模块负责驱动LCD屏,包括MCU屏和LCD屏,其模块接口定义如下图所示。

图27.3.13 LCD上驱动模块

该图显示了两组LCD 端口信号,一组连接到顶层模块端口信号,另一组连接到Qsys 模块端口信号。

端口信号中,Qsys模块的LCD端口信号主要用于读取液晶屏的ID,初始化MCU液晶屏。

改变。初始化MCU液晶屏比较复杂,所以需要设置的寄存器有:

非常多,所以这部分内容非常适合 软件来实现,而LCD屏的显示对处理速度要求较高,因此使用硬件来实现。 LCD顶层模块例化了以下四个模块,分别是LCD信号选择模块(lcd_signal_sel)、RGB LCD屏驱动模块(rlcd_driver)、MCU LCD屏驱动(mlcd_driver)和时钟分频模块 (clk_p)。如下图所示: 图 27.3.14 LCD顶层模块框图 LCD信号选择模块主要对顶层模块的LCD端口信号进行连接的选择,当LCD初始化未完成 时,将顶层模块的LCD端口信号连接至Qsys模块;当LCD初始化完成,并且读到的ID为RGB LCD 屏的ID时,将顶层模块的LCD端口信号连接至RGB LCD屏驱动模块;否则连接至MCU LCD屏驱动 模块。 时钟分频模块根据输入的LCD屏的ID,选择输出不同的时钟频率,这是由于不同分辨率的 RGB LCD屏和MCU LCD屏,对应LCD的时钟频率不同。 RGB LCD驱动模块负责驱动RGB LCD屏,同时根据输入的RGB LCD屏的ID,来选择使用不同 的参数,如行同步像素数、行同步后沿像素数等。 MCU LCD驱动模块负责驱动MCU LCD屏,同样也需要根据输入的MCU LCD屏的ID,来选择使 用不同的寄存器地址与寄存器参数。 触摸屏驱动模块 触摸屏驱动模块完成对触摸屏按键的检测与触摸点坐标的获取,其模块接口定义如下图 所示: 图 27.3.15 触摸屏驱动模块接口及定义 触摸屏驱动模块支持正点原子推出的所有电阻屏和电容屏,该模块根据输入的LCD屏的 ID,来对触摸屏执行不同的配置和获取触摸点坐标。当检测到屏幕被按下后,会拉高 touch_done信号,如果touch_valid一直为高电平,则表示触摸屏一直被按下,Nios II通过 Avalon-MM接口来获取坐标值。图中page_paint_flag为Nios II输出的手写画笔界面的标志, 便于电阻屏连续检测触摸点坐标。 触摸屏驱动模块例化了三个子模块,如图 27.3.16所示。其中GT系列芯片配置模块 (touch_gt_cfg)用于初始化触摸屏(GT系列芯片包括4.3寸屏幕和10.1寸屏幕芯片),即通 过IIC接口对GT芯片进行配置,并在配置完成后拉高配置完成信号(cfg_done)。而电容触摸 驱动模块(touch_ctrl)负责控制所有电容触摸屏驱动的整个流程,包括控制触摸屏初始化 的开始、检测触摸屏是否被按下以及读取触摸点的坐标。电阻触摸驱动模块(xpt2046)负责 驱动电阻触摸屏,需要注意的是,电容触摸屏的驱动采用的是IIC协议,而电阻触摸屏采用的 是SPI协议。 图 27.3.16 触摸屏模块框图 GT系列芯片配置模块例化了以下三个模块,分别是信号切换模块(signal_switch)、 IIC驱动模块(i2c_dri_m)和i2c参数配置模块(i2c_reg_cfg),如图 27.3.17所示。 图 27.3.17 GT系列芯片配置模块框图 这里的IIC驱动模块和“EEPROM读写实验”中所使用的IIC驱动模块有些区别,在 “EEPROM读写实验”中,IIC驱动模块只支持单次读写,并不支持连续的读写。由于触摸屏的 初始化参数比较多,并且在读取触摸点坐标时也会对IIC接口进行连续的读操作,因此本次实 验在此基础上,增加了对IIC接口连续读写的功能,单次操作连续读写的次数由reg_num进行 设置,这样将会大大提高IIC读写的速度。当IIC单个地址读写完成后,IIC驱动模块会输出一 个单次完成的脉冲信号(once_done);当IIC单次操作完成后(连续地址读写完成),会输 出一个IIC操作完成的脉冲信号(i2c_done)。 IIC参数配置模块寄存了触摸屏初始化参数,由于本次试验FPGA的逻辑资源消耗很多,而 RAM资源消耗的较少,因此本次试验将GT系列的配置参数全部放在mif文件里,即存储在ROM 中。 由于电容屏驱动模块的读写操作和IIC参数配置模块的初始化操作都会用到IIC接口,因此这两个模块输出的端口信号需要先做一个选择,再连接到IIC的驱动模块中,信号选择的功 能是由信号切换模块实现的。这个模块实现的方法也比较简单,根据输入的cfg_switch信号 的高低电平进行选择。当cfg_switch为高电平时,将IIC参数配置模块的IIC操作端口信号连 接至IIC驱动模块;当cfg_switch为低电平时,将电容屏驱动模块的IIC操作端口信号连接至 IIC驱动模块。 在硬件设计部分中,主要向大家介绍了SDRAM桥控制模块的读写、缩放IP核输入数据的格 式转换与输出数据的格式转换、LCD屏幕显示驱动以及触摸驱动,而其它外设的驱动模块在前 面的实验中都有详细的讲解,这里不再重复赘述。需要说明的是,Nios II处理器通过 Avalon-MM端口来写入和读出模块中的数据,比如红外接收到的数据、数码管显示的数值等。 在介绍完各功能模块后,接下来我们在软件设计部分介绍一下如何实现UI界面的绘制, 以及如何利用触摸屏来实现与用户的交互。 软件设计 综合实验的UI界面比较复杂,包括上电自检界面、主界面以及14个应用功能子界面。为 了提高UI界面的开发效率,UI界面的绘制我们将在Nios II中采用uC/GUI来实现。Nios II除 了负责完成用户界面的绘制外,还根据触摸屏输入的触摸点坐标来实现相应的功能,为了做 到触摸点坐标的实时响应,本次实验触摸屏的驱动是在硬件中使用Verilog语言实现,Nios II通过Avalon-MM端口来获取触摸驱动模块输出的触摸点的坐标。由于FPGA的逻辑资源有限, Nios II处理器也负责驱动部分外设。 Qsys系统搭建 在介绍完触摸驱动模块和SDRAM桥控制模块之后,接下来我们来介绍下Qsys系统环境的搭 建,如图 27.4.1所示: 图 27.4.1 Qsys系统的搭建 Qsys系统使用的IP核,绝大多数在我们前面的实验中都有涉及,其中avalon_mm_bridge 为自定义的IP核,Nios II处理器通过Avalon-MM端口来写入和读出硬件模块中的数据; sdram_bridge为Avalon-MM Pipeline Bridge IP核,通过SDRAM控制器来突发读写SDRAM; pio_mdc和pio_mdio为以太网的MDC/MDIO管理接口,用于读取以太网的和其它网络设备的连接 状态;pio_cs、pio_clk、pio_mosi、pio_miso为SD卡的端口信号,用于对SD卡进行读写测 试;pio_page_paint_flag为手写画笔界面的标志,方便触摸驱动模块对连续触摸进行检测; 缩放IP核(alt_vip_cl_scl_0)用于放大和缩小图像的分辨率,以兼容不同分辨率的屏幕。 这里我们主要介绍下缩放IP核(alt_vip_cl_scl_0),其配置界面如图 27.4.3所示: 图 27.4.3 缩放IP核配置页面 Bits per symbol(symbol的位数)设置为8,Symbols in parallel(并行发送的symbol 个数)设置为3,Symbols in sequence(按顺序发送数据的个数)设置为1,则发送数据的位 宽为24(8*3)位。 由于本次实验需要根据LCD屏ID来调整缩放比,因此使能运行时控制帧输出大小。 缩放IP核固定输入分辨率为800x480,最大输出分辨率为1280x800(10.1寸RGB LCD 屏)。 输入视频在转换到Avalon-ST视频协议时不包含垂直消隐,因此勾选No Blanking invideo。 由于FPGA的逻辑资源有限,因此缩放算法这里选择对逻辑资源消耗最少的临近算法 (Nearest Neighbor),其余配置保持默认即可。 Nios II软件设计 在介绍完Qsys系统的搭建之后,最后我们再来介绍一下Nios II软件设计部分。 Nios II主要负责绘制上电自检界面、主界面以及14个应用功能子界面,除此之外,还需 要判断用户的触摸操作和部分外设的驱动。上电自检界面如图 27.4.4所示: 图 27.4.4 上电自检界面 在前面学**了uC/GUI相关的章节之后,相信对大家来说,绘制上图中的用户界面是比较 容易的。图中主要使用GUI_DispStringAt()函数绘制字符串,而对外设的测试方法,如 EEPROM、SD卡、AP3216C,则是向某个或某段地址写入固定值,然后读出数据,比较读出的值 和写入的值是否一致,如果一致则外设测试正确,否则外设测试出错。RTC实时时钟的测试方 法和其它外设有些区别,这里是通过读取RTC实时时钟的秒寄存器,如果在一秒时间内,秒寄 存器数值加1,则测试正确(如果数值为59,则加1后为0),否则测试错误。 在开发板上电自检完成后,接下来会进入主界面,主界面如图 27.4.5所示: 图 27.4.5 LCD显示主界面 这里需要强调的是,主界面的绘制并不是先绘制背景图片,再绘制应用图标和文字,而 是整个主界面是一幅图片,直接把图片绘制出来,就是上图中LCD显示的主界面。这里主要是 考虑到过多的字体和图片在最终固化程序时,会占用大量EPCS Flash的存储资源,而开发板 的片外存储资源是有限的,因此将主界面作为一副图片显示在主界面上。 接下来我们看下main函数的代码,了解下Nios II执行的过程,由于main函数的代码较 长,这里只贴上部分代码。 170 int main() 171 { 172 alt_u8 key,key_pre; 173 alt_u8 i; 174 175 alt_u8 led_button; 176 alt_u8 led_num; 177 178 alt_u8 grade=vol/8; //音频的音量级别 179 alt_u8 page_5640_done = 0; //ov5640子页面绘制完成页面 180 181 MY_LCD_Init(); //LCD初始化 182 183 IOWR_ALTERA_AVALON_PIO_DATA(PIO_OV5640_EN_BASE, 0); //显示GUI界面 184 GUI_Init(); //uC/GUI初始化 185 GUI_UC_SetEncodeUTF8(); //设置汉字编码格式 186 GUI_SetFont(&GUI_FontChinese_WRYH32); 187 188 lcdgui.width = lcddev.height; 189 lcdgui.height = lcddev.width; 190 height_ave32 = lcdgui.height/32; 191 width_ave8 = lcdgui.width/8; 192 193 switch(lcddev.id){ 194 case 0x9341:{ 195 IOWR(ALT_VIP_CL_SCL_0_BASE,3,320); //设置缩放后图像宽度 196 IOWR(ALT_VIP_CL_SCL_0_BASE,4,240); //设置缩放后图像高度 197 break; 198 } 199 case 0x5310:{ 200 IOWR(ALT_VIP_CL_SCL_0_BASE,3,480); //设置缩放后图像宽度 201 IOWR(ALT_VIP_CL_SCL_0_BASE,4,320); //设置缩放后图像高度 202 break; 203 } 204 case 0x5510:{ 205 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 206 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 207 break; 208 } 209 case 0x1963:{ 210 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 211 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 212 break; 213 } 214 case 0x4342:{ 215 IOWR(ALT_VIP_CL_SCL_0_BASE,3,480); //设置缩放后图像宽度 216 IOWR(ALT_VIP_CL_SCL_0_BASE,4,272); //设置缩放后图像高度 217 break; 218 } 219 case 0x7084:{ 220 IOWR(ALT_VIP_CL_SCL_0_BASE,3,800); //设置缩放后图像宽度 221 IOWR(ALT_VIP_CL_SCL_0_BASE,4,480); //设置缩放后图像高度 222 break; 223 } 224 case 0x7016:{ 225 IOWR(ALT_VIP_CL_SCL_0_BASE,3,1024); //设置缩放后图像宽度 226 IOWR(ALT_VIP_CL_SCL_0_BASE,4,600); //设置缩放后图像高度 227 break; 228 } 229 case 0x1018:{ 230 IOWR(ALT_VIP_CL_SCL_0_BASE,3,1280); //设置缩放后图像宽度 231 IOWR(ALT_VIP_CL_SCL_0_BASE,4,800); //设置缩放后图像高度 232 break; 233 } 234 default: ; 235 } 236 237 IOWR(ALT_VIP_CL_SCL_0_BASE,0,1); //启动缩放模块 238 IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCD_INIT_DONE_BASE,1); //初始化完成 239 240 init_tp_interrupt(); //触摸屏中断初始化 241 init_touch_key_interrupt(); //触摸按键中断初始化 242 init_uart_interrupt(); //串口中断初始化 243 init_paint_interrupt(); //手写画笔中断初始化 244 disable_paint_interrupt(); //初始化关闭画笔结束中断 245 246 gui_draw_sys_test_page(); //画系统测试界面 247 gui_draw_home_page(); //画主界面 248 249 while(1) …… 在LCD屏初始化完成后,获取到LCD屏的ID,此时根据LCD屏的ID,来设置缩放IP核输出分 辨率,使能缩放IP核并拉高LCD初始化完成信号,如代码中第193至第238行所示。接下来绘制 开发板的上电自检界面,自检界面完成后,进入主界面,如代码中第246行和第247行代码所 示。进入主界面后,接下来开始根据用户的触摸操作,来切换显示各个应用子界面,这部分 内容由while循环来完成。 我们这里只简单介绍下main函数的程序,了解下Nios程序的执行过程,还需要注意的是 当触摸屏被按下后,触摸屏驱动模块有可能检测到单个触摸点坐标触发多次,此时程序会多 次进入触摸中断函数tp_interrupt(),导致功能错误的情况。为了避免这一情况,在触摸屏 驱动模块中加入了对触摸点坐标的判断,如果触摸屏一直被按下没有松开,并且当前触摸点 坐标和上一次触摸点坐标一致的话,则忽略当前触摸点的坐标。 除此之外,新起点开发板的GUI综合程序只是在开拓者开发板GUI综合程序做了简单的修 改,因为两块FPGA开发板上的外设有所区别,因此我们在draw_page.h文件中定义了开发板的 类型,如下所示: #define BOARD_TYPE 1 //0:新起点 1:开拓者 当BOARD_TYPE = 1时,表示执行开拓者的程序;当BOARD_TYPE = 0时,表示执行新起点 的程序。另外开拓者GUI程序改成适配新起点开发板,也不仅仅修改这一个参数,同时还需要 修改主界面的显示图片。 下载验证 接下来我们把程序下载至开拓者开发板上,验证我们所完成的GUI综合实验的功能。 要测试开拓者FPGA开发板综合实验的全部功能,大家得自备1张SD卡、1根网线、OV5640 摄像头。不过,就算没有外接这些模块,综合实验还是可以正常运行的,只是有些限制而 已。 针对LCD屏这里再补充一点,GUI综合实验必须连接LCD屏才能看到显示效果,该实验基于 图像缩放算法来适配不同分辨率的LCD屏幕,图像缩放之前的原始分辨率大小为800*480,而 2.8寸屏幕和3.5寸屏幕分辨率较低,所以缩放之后,字体的显示效果会比高分辨率屏幕的显 示效果差,为了获得更好的显示效果,建议大家连接4.3寸及以上的屏幕。 这里以4.3寸RGB LCD屏为例,大家拿出开发板,先接上12V1A电源适配器给开发板供 电,RGB LCD屏和开发板是通过40P的FPC排线相连接,如下图所示: 图 27.5.1开拓者FPGA开发板与4.3寸RGB屏连接示意图 最后,按下电源开关,给开发板上电,此时开发板右下角的蓝色电源灯会亮,同时开发 板会对EEPROM、SD卡、AP3216C和RTC做读写测试,如下图所示: 图 27.5.2 开拓者FPGA开发板开机自检界面 如果开发板在上电前连接了SD卡(SD卡槽在开发板背面),在测试成功后显示OK;如果 没有连接SD卡的话,会提示Error。 接下来进入到主界面之后,就可以通过点击屏幕的图标进行各项功能测试了。主界面如 下图所示: 图 27.5.3 RGB LCD液晶屏主界面 主界面有1个页面,总共是14个图标。每个图标代表一大功能,主界面顶部是状态栏, 用于显示“正点原子”四个字和当前时间。在任何界面下,都可以通过按下TPAD触摸按键返 回上一级,直至返回主界面。PS:TPAD就是开拓者FPGA开发板上的一个触摸按键,即右下角 的白色骷髅头。 如果大家的开发板连接了VGA显示器的话,在开发板上电之后,VGA显示器会显示出彩 条。需要说明的是,LCD屏处于任何GUI界面,VGA显示器都会一直显示彩条的,如下图所示。 图 27.5.4 开拓者开发板VGA显示画面 在介绍完主界面后,接下来我们开始介绍各个功能。 1、按键测试 点击主界面的按键测试图标,进入如图 27.5.5所示的界面: 图 27.5.5 按键测试界面 上图中,左侧的图片是我们点击按键测试后进入的子界面,可以看到,图中共四个按键 图标,分别对应开拓者开发板上的KEY0~KEY3按键。当我们按下开发板上其中的一个按键后, 界面上对应的按键图标会变成红色背景,如上图中右侧图片所示;松开按键后,按键图标又 会恢复成黄色背景。 当我们想退出按键测试界面时,只需要按下开发板上的TPAD触摸按钮即可。 2、LED测试 点击主界面的LED测试图标,进入如图图 27.5.6所示的界面: 图 27.5.6 LED测试界面 上图中,左侧的图片是我们点击LED测试后进入的子界面,图中从左往右共4个LED图标, 分别对应开发板上的DS0~DS3,图标下方的按钮用来控制开发板上的LED灯的亮灭。当我们点 击界面上的其中一个按钮后,界面上对应的LED图标会变成蓝色(如上图中右侧图片所示), 同时开发板上的LED灯会点亮;再次点击按钮后,界面上对应的LED图标恢复成白色,同时开 发板上的LED灯会熄灭。 3、蜂鸣器 点击主界面的蜂鸣器图标,进入如图 27.5.7所示的界面: 图 27.5.7 蜂鸣器测试界面 上图中,左侧的图片是我们点击蜂鸣器后进入的子界面,点击界面上的“打开”按钮, 此时可以听到开发板上的蜂鸣器在鸣叫,并且按钮会显示成“关闭”(如上图中右侧图片所 示);点击界面上的“关闭”按钮,蜂鸣器即可停止鸣叫。 4、数码管 点击主界面的数码管图标,进入如图 27.5.8所示的界面: 图 27.5.8 数码管测试界面 上图中,左侧的图片是我们点击数码管后进入的子界面,图中有三个按钮,分别是 “-”、“打开”和“+”按钮。我们点击界面上的“打开”按钮,此时可以看到开发板上的 数码管显示数字,并且界面上同样也会显示数码管显示的数字(如上图中右侧图片所示), 点击界面上的“+”和“-”按钮可以对数字进行加减,点击“关闭”按钮即可关闭数码管的 显示。 5、串口 我们开拓者FPGA开发板板载两个串口,一个是USB串口,另一个是RS232串口,我们这里 测试的是USB串口。在开始测试之前,我们需要将USB线一端连接电脑,另一端与开发板上的 USB_232口相连接,需要注意的是,大家在第一次做串口实验时,需要安装USB的串口驱动程 序,该程序位于资料盘的“6_软件资料\1_软件\CH340驱动(USB串口驱动)_XP_WIN7共用”文 件夹下。串口测试需要在电脑中打开串口调试助手才能完成通信,我们资料盘中提供了几种 调试助手,本次测试使用的是“XCOM”调试助手,该软件位于“6_软件资料\1_软件\串口调 试助手\XCOM(ALIENTEK官方推荐)”文件夹下。我们本次串口通信的波特率为115200,串口 打开和设置完成后的界面如图 27.5.9所示。 图 27.5.9 串口打开界面 不同电脑的不同USB口串口号可能会不一样,大家可以根据自己的电脑进行选择,我们这 里选择的是COM5:USB-SERIAL CH340。 点击主界面的串口图标,进入如图 27.5.10所示的界面: 图 27.5.10 串口测试界面 上图是我们点击串口后进入的子界面,我们点击界面上的“发送”按钮,串口调试助手 即可接收到开发板发送的数据,如下图所示: 图 27.5.11 串口助手接收到数据 这个时候,我们点击串口调试助手的“发送”按钮,开发板界面上会显示接收到的数 据,如下图所示: 图 27.5.12 串口测试界面 6、红外遥控 点击主界面的串口图标,进入如图 27.5.13所示的界面: 图 27.5.13 红外遥控测试界面 上图中,左侧的图片是我们点击红外遥控后进入的子界面,图中第一栏是遥控器的键 值,第二栏是遥控器的符号。此时按下遥控器的按键(使用遥控器之前需要先将遥控器后部 的塑料绝缘片拔出),界面上会显示出遥控器的键值和符号(如上图中右侧图片所示)。 7、EEPROM EEPROM是板载的电可擦除可编程只读存储器,是一种常用的非易失性存储器,点击主界 面的EEPROM图标,进入如图 27.5.14所示的界面: 图 27.5.14 EEPROM测试界面 上图中,左侧的图片是我们点击EEPROM后进入的子界面,点击“测试”按钮后,FPGA开 始向EEPROM的地址0写入数据0,数据写完后从地址0中读取数据,并将读取的数据显示在页面 中的读数据上;接着FPGA向EEPROM中的地址1中写入数据1,同样是写完后将数据读取出来, 并显示在界面上,直至写至EEPROM的地址99开始停止(如上图中右侧图片所示)。比较写入 的数据和读出的数据是相同的,说明本次EEPROM测试成功。 8、环境光 环境光传感器(AP3216C)是一个能够测量环境光强度和距离的整合型光感测距传感器。 点击主界面的环境光图标,进入如图 27.5.15所示的界面: 图 27.5.15 AP3216C测试界面 上图是我们点击环境光后进入的子界面,界面中第一栏是环境光的强度,第二栏是距离 值。环境光传感器(U7)位于开发板的左下角位置(靠近数码管),通过增加光照和接近环境 光传感器,可以在界面上看到光照值和距离值的实时变化。 9、时钟 点击主界面的时钟图标,进入如图 27.5.16所示的界面: 图 27.5.16 时钟测试界面 上图是我们点击时钟后进入的子界面,界面中显示了日期、时间、温度信息,并且在上 方区域,有一个指针式时钟显示。 同样,按下TPAD触摸按钮返回至主界面。 10、音乐播放 点击主界面的音乐播放图标,进入如图 27.5.17所示的界面: 图 27.5.17 音乐播放界面 上图是我们点击音乐播放后进入的子界面,界面中有三个按钮,分别是“-”、“打开” 和“-”按钮。首先点击“打开”按钮,启动音频播放的功能,然后使用音频线一端连接开发 板上的LINE_IN接口,另一端与播放设备相连接(电脑或者手机的耳机接口),此时开发板上 的喇叭会播放手机或者电脑播放的音乐,如果将耳机连接至开发板上的PHONE接口,在耳机中 同样可以听到音乐。 11、ADDA 点击主界面的ADDA(模数/数模转换)图标,进入如图 27.5.18所示的界面: 图 27.5.18 ADDA测试界面 上图中,左侧的图片是我们点击ADDA后进入的子界面,板载的ADDA芯片同时具有模数和 数模转换的功能,点击“测试”按钮后,DA输出的数字量从0累加至255(如上图中右侧图片 所示),此时AD采集到的模拟电压值从0累加至约3.3V说明测试成功。 12、手写画笔 点击主界面的手写画笔图标,进入手写画笔的界面。通过在白板界面滑动手指可以看到 留下的轨迹,如图 27.5.19所示。 图 27.5.19 手写画笔测试界面 同样,按下TPAD触摸按钮返回至主界面。 13、摄像头 此应用支持的摄像头模块为ALIENTEK OV5640-AF这款500W像素的CMOS摄像头模块,在进 入摄像头应用之前,需要先将OV5640插在开发板上的Camera扩展接口上(摄像头镜头方向朝 外),点击主界面的摄像头图标,进入图 27.5.20所示的界面: 图 27.5.20 摄像头采集画面 上图是我们点击摄像头后进入的子界面,接下来就可以从界面中看到摄像头采集到的画 面,按下TPAD触摸按钮返回至主界面。 14、网络通信 此应用可以读取开发板的网口是否连接网线,点击主界面的网络通信图标,进入图 27.5.21所示界面。 图 27.5.21 以太网测试界面 上图是我们点击网络通信后进入的子界面,如果此时未连接网线的话,界面中会提示 “请连接网线!”,如果已经连接了网线,界面中会提示“Check OK!”。

市场分析