65.9K
CodeProject 正在变化。 阅读更多。
Home

探索 GPIO 示例应用程序

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2017年8月18日

CPOL

8分钟阅读

viewsIcon

9186

在本示例应用程序中,您将学习如何与 Terasic DE10-Nano 板的数字 I/O 进行交互

描述

在本示例应用程序中,您将学习如何与 Terasic* DE10-Nano 板的数字 I/O 进行交互

  • 8 个绿色用户 LED
  • 4 个滑动开关
  • 用户按钮

用于驱动 LED 和读取开关设置的外围设备在 FPGA 中实现为“软”GPIO 外围设备。这个简单的 FPGA 设计说明了如何使用可编程逻辑来扩展处理器可用的外围设备集。在这种情况下,我们添加了更多的 GPIO,但也可以添加更多的 UART、SPI 控制器、以太网端口,或它们的任意组合。

在 CPU 上运行的软件使用 Linux* 通用输入/输出 (GPIO) 框架与这些外围设备进行交互。本文将引导您完成使用 Linux GPIO 框架读取和写入这些外围设备的过程。

级别:初学者。

所需材料

  • Terasic DE10-Nano 套件

    Terasic DE10-Nano 开发板基于 Intel® Cyclone® V SoC FPGA,为创客、物联网开发者和教育工作者提供了一个可重构的硬件设计平台。您可以在 此处购买套件。

  • 虚拟网络计算 (VNC) 客户端软件

    运行在您的主机 PC 上的 VNC 客户端应用程序用于远程控制 DE10-Nano 板(该板正在运行 VNC 服务器应用程序)。如果您还没有,可以在 下载页面的软件实用程序部分找到免费下载链接。

访问 GitHub* 获取此项目的代码示例。

如果您已经访问过该板所服务的网站的“Play”页面,那么您可能已经与 8 个用户 LED 互动过。该页面上的“Blink the LEDs”示例提供了一个简单的 Web 界面来打开、关闭或闪烁 LED。您可能想了解演示应用程序幕后发生的事情,我们将在本示例应用程序教程中进行探讨。

设置步骤

请按照以下步骤准备您的开发板,以构建和运行示例应用程序。

  1. 打开 VNC Viewer
    • 使用 VNC* Viewer 启动会话,并输入 DE10-Nano 板的 IP 地址:192.168.7.1

    注意:如果您尝试连接后出现黑屏,请为开发板断电重启。

  2. 导航到 examples 文件夹。

    a. 在桌面上双击 File System 图标。

    b. 找到 examples 文件夹并双击打开。

    c. 打开 GPIO 示例文件夹,其中包含一个 sandbox 文件夹(您可以随意修改的代码),以及一个 sandbox 文件夹的 tar 包版本,以备您需要恢复原始版本。

    注意:有三个文件夹包含 DE10-Nano 板的示例设计软件;一个用于 GPIO,一个用于 FFT,一个用于加速度计 (adxl)。

  3. Sandbox 子文件夹。
    • 打开 sandbox 文件夹,其中包含三个子文件夹

  4. README 文本文件(可选)。

    这些文件夹中的每一个都包含示例应用程序、脚本以及一个 README 文本文件,该文件描述了示例如何利用 Linux GPIO 框架与开发板硬件进行交互。

    查看 README_first.txt 文件

    a. 右键单击 README_first.txt。

    b. 选择 Open With。

    c. 选择两个编辑器之一 - Vim 或 gedit。

    READMEfirst.txt 文件描述了每个子文件夹的内容,并描述了其中包含的示例。如果您使用 gedit 打开文件,您将看到以下内容:

    关闭文件。

  5. 打开终端模拟器。

    为了与开发板硬件交互,我们将使用终端模拟器。如下所示打开 Linux 桌面上的终端模拟器:

    a. 点击桌面顶部的 Applications 按钮。

    b. 选择 Terminal Emulator

gpio-leds

让我们开始玩开发板上的 8 个用户 LED。

通过在终端窗口中输入以下命令,导航到 gpio-leds 文件夹:

cd /examples/gpio/sandbox/gpio-leds/

此目录包含一些示例代码,用于切换 DE10-Nano 板上的 LED。提供了两个版本:一个 shell 脚本 (toggle_fpga_leds.sh) 和一个 C 程序 (toggle_fpga_leds.c)。两者执行相同的功能。

构建 'toggle_fpga_leds' 应用程序

要构建 'toggle_fpga_leds' 应用程序,请在终端窗口中输入以下命令:

./build_toggle_fpga_leds.sh

该脚本编译 'toggle_fpga_leds.c' 源文件并生成可执行的 'toggle_fpga_leds' 应用程序。如果您想了解脚本和 C 程序如何工作,请使用文本编辑器打开它们。

运行应用程序

构建应用程序后,您可以通过在终端窗口中输入以下命令来运行脚本或编译后的应用程序:

  • 要运行脚本,请键入:./toggle_fpga_leds.sh
  • 要运行编译后的应用程序,请键入:./toggle_fpga_leds

请注意开发板上的 LED!观察它们如何依次亮起和熄灭。C 程序应用程序和脚本在每个 LED 亮起然后熄灭后都会自动退出。

如果您想了解脚本和 c 程序的工作原理,请参阅 shell 脚本源文件和 C 程序源文件。要了解 Linux gpio-led 框架的工作原理,请使用文本编辑器打开 README_gpio-leds.txt 文件。

更多乐趣:控制 LED

您还可以通过向 gpio_led 框架生成的“brightness”文件写入内容来从终端窗口控制 LED。

  • 要将 LED (0) 设置为“开启”,请在终端窗口中输入以下命令:
    echo 1 > /sys/class/leds/fpga_led0/brightness
  • 要将 LED (0) 设置为“关闭”,请在终端窗口中输入以下命令:
    echo 0 > /sys/class/leds/fpga_led0/brightness
  • 尝试输入一系列命令来点亮隔一个的 LED。
  • 查询 LED (0) 的状态,在终端窗口中输入以下命令:
    cat /sys/class/leds/fpga_led0/brightness

gpio-keys

接下来,我们将玩连接到滑动开关的 gpio 外围设备。

使用终端模拟器,通过在终端窗口中输入以下命令,导航到 gpio-keys 文件夹:

cd /examples/gpio/sandbox/gpio-keys/

此目录包含一个示例应用程序,该应用程序读取滑动开关并报告它们的状态(0 或 1)。与 LED 示例一样,有一个脚本 ('watch_switch_events.sh') 和一个 C 源文件 ('watch_switch_events.c'),它们完成相同的任务。

构建 'watch_switch_events' 应用程序

要构建 'watch_switch_events' 应用程序,请在终端窗口中输入以下命令:

./build_watch_switch_events.sh

该脚本编译 'watch_switch_events.c' 源文件并生成可执行的 'watch_switch_events' 应用程序。

运行应用程序

构建应用程序后,您可以通过在终端窗口中输入以下命令来运行脚本或编译后的应用程序:

  • 要运行脚本,请键入:./watch_switch_events.sh
  • 要运行编译后的应用程序,请键入:./watch_switch_events

在程序运行时,滑动 DE10-Nano 板上的 SW0、SW1、SW2 和 SW3 开关,并注意终端窗口中的输出。

程序(和脚本)监视系统中注册的 gpio-keys 设备,并打印出它们从系统中接收到的输入事件。要终止脚本或程序,只需在启动它们的控制台中键入 CTRL-C。

如果您想了解脚本和 c 程序的工作原理,请参阅 shell 脚本源文件和 C 程序源文件。要了解 Linux gpio-led 框架的工作原理,请使用文本编辑器打开 README_gpio-keys.txt 文件。

更多乐趣:读取开关状态

程序的 ioctl 版本将在每次输入事件时额外打印出所有开关的当前状态。通过输入以下命令构建 'watch_switch_events_ioctl.c' 应用程序:

./build_watch_switch_events_ioctl.sh

通过输入以下命令运行应用程序:

./watch_switch_events_ioctl

当您来回滑动开关时,请注意输出。通过键入 CTRL-C 终止脚本。有关其工作原理的更多详细信息,请参阅 C 程序源文件。

raw-gpio

最后,我们将玩连接到用户按钮 0 的 gpio 外围设备。

使用终端模拟器,通过输入以下命令导航到 raw-gpio 文件夹:

cd /examples/gpio/sandbox/raw-gpio/

此目录包含一个示例应用程序,该应用程序读取按钮 0 的状态并报告其状态(0 或 1)。与之前的示例一样,有一个脚本 ('show_KEY0_pb_state.sh') 和一个 C 源文件 ('show_KEY0_pb_state.c'),它们完成相同的任务。

构建 'show_KEY0_pb_state' 应用程序

要构建 'watch_switch_events' 应用程序,请在终端窗口中输入以下命令:

./build_show_KEY0_pb_state.sh

该脚本编译 'show_KEY0_pb_state.c' 源文件并生成可执行的 'show_KEY0_pb_state' 应用程序。

运行应用程序

构建应用程序后,您可以通过在终端窗口中输入以下命令来运行脚本或编译后的应用程序:

  1. 要运行脚本,请键入:./show_KEY0_pb_state.sh
  2. 要运行编译后的应用程序,请键入:./show_KEY0_pb_state

多次运行程序,按下和释放按钮,并注意终端窗口中的输出。

程序和脚本读取与按钮 0 关联的文件并报告状态。

如果您想了解脚本和 c 程序的工作原理,请参阅 shell 脚本源文件和 C 程序源文件。要了解 Linux gpio-led 框架的工作原理,请使用文本编辑器打开 README_gpio.txt 文件。

更多乐趣:检测按钮

名为 'poll_KEY0_pb_state.c' 的 C 程序在 'show_KEY0_pb_state.sh' 程序中添加了一个 poll() 调用,以演示 gpio 框架提供的中断功能,通过硬件中断检测按钮按下。

通过输入以下命令构建 'poll_KEY0_pb_state.c' 应用程序:

./poll_KEY0_pb_state.sh

通过输入以下命令运行应用程序:

./poll_KEY0_pb_state

请注意,启用中断的版本在报告操作并终止之前会等待按钮被按下。

有关其工作原理的更多详细信息,请参阅 C 程序源文件。要了解 Linux gpio-led 框架的工作原理,请使用文本编辑器打开 README_gpio.txt 文件。

© . All rights reserved.