当前文档版本为 v0.9.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Basic: Button

1 功能概述

Button 是一个演示 EVB 按钮功能的简单例程,通过将 EVB 按钮连接的 SoC 引脚配置为 GPIO 检测中断输入的模式,实时检测按键的状态, 并在状态变化时向串口 Console 打印消息的同时,通过 GPIO 输出控制 LED0 的亮灭。

2 环境要求

  • Board: pan108xxa1_evb / pan108xxb1_evb / pan108xxb5_evb

    • UART: 将 P00 与 TX0 引脚接在一起,P01 与 RX0 引脚接在一起,在 PC 上打开终端工具(如 SecureCRT),波特率设置为 921600

    • LED: 将 P16 引脚与 RGB 灯的蓝色通道(RGB-B)引脚相连

    • KEY:例程代码使用的 sw0 对应 EVB 开发板的 KEY1 按钮,其硬件上直接与 SoC 的 P04 引脚相连,无需跳线

3 编译和烧录

例程位置:zephyr\samples_panchip\basic\button

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

根据环境要求一节的介绍,正确连接 EVB 开发板的跳线,编译下载代码后:

  1. 按下 EVB 上的 KEY1 按钮,可以看到串口输出当前的时间戳信息,同时观察到 LED 灯亮

  2. 松开 EVB 上的 KEY1 按钮,可以看到串口无信息,但观察到 LED 灯灭

*** Booting Zephyr OS build zephyr-v2.7.0  ***
Set up button at GPIO_P0 pin 4
Set up LED at GPIO_P1 pin 6
Press the button
Button pressed at 846177858
Button pressed at 969987765
Button pressed at 1071347400
Button pressed at 1200270758

5 开发说明

  1. 通过阅读板级 Devicetree 配置文件(pan108xxb1_evb.dts/pan108xxb5_evb.dts)可以获取到 KEY 对应的 GPIO 引脚信息

  2. 通过调用 GPIO Driver 的 gpio_pin_configure_dt()gpio_pin_interrupt_configure_dt 接口可以直接从 DTS 中配置 GPIO 的输出模式和中断触发方式

    gpio_pin_configure_dt(&button, GPIO_INPUT);
    gpio_pin_interrupt_configure_dt(&button, GPIO_INT_EDGE_TO_ACTIVE);
    
  3. 通过调用 GPIO Driver 的 gpio_pin_get_dt()gpio_pin_set_dt() 接口可以获取或配置 DTS 中指定的 GPIO 状态

    while (1) {
    		int val = gpio_pin_get_dt(&button);
    
    		if (val >= 0) {
    			gpio_pin_set_dt(&led, val);
    		}
    		k_msleep(SLEEP_TIME_MS);
    	}
    

6 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:       19848 B       256 KB      7.57%
SRAM:        4184 B        64 KB      6.38%