功能特性

  • 输入功能

    • 消抖功能:

      输入引脚支持消抖功能,可有效防止因抖动产生的错误信号。

    • 中断支持:

      • 电平触发

      • 边沿触发

      • 双边沿触发

  • 输出功能

    • 单个引脚输出设置:

      支持单独设置特定引脚的输出状态。

    • 多个引脚同时设置:

      同一端口的多个引脚可以同时进行输出设置。

消抖功能

消抖时钟

  • 消抖时钟源为 dbclk_src,其输出的消抖时钟 dbclk 为: dbclk = dbclk_src / (div + 1)

    其中, div 为可调的分频系数。

    芯片的消抖时钟源如下:

    • 32.768KHz;

    • OSC4MHz。

滤波能力

  • 持续时间小于 1 个消抖时钟周期的 Glitch 信号可滤除。

  • 持续时间在 1 至 2 个消抖时钟周期的 Glitch 信号不确定。

  • 持续时间大于 2 个消抖时钟周期的 Glitch 信号无法滤除。

端口滤波一致性

  • 在同一个端口上的不同引脚, div 是共用的,即消抖时钟一致。

注意

采用消抖功能时,输入信号的处理会有一定的延迟。这可能导致系统响应变慢,尤其是在中断和唤醒操作需要快速响应的情况下。

中断类型

  • 电平触发:支持通过电平状态(高电平或低电平)触发中断。

  • 边沿触发:支持检测信号的上升沿或下降沿引发中断。

  • 双边沿触发:支持同时检测上升沿和下降沿以触发中断。

备注

在切换电平触发类型时,为避免误触发中断,需延迟两拍消抖时钟后再使能中断。

输出竞态保护

GPIO 输出以端口(PORT)为单位,单独控制某个 GPIO 引脚的电平状态在汇编中表现为 读、改、写 三步操作。如果同一组端口被多个线程控制输出,可能会引发竞态条件。

为应对此风险,系统提供了软件和硬件两种方式来保护输出操作。

具体方式根据所使用的芯片进行选择:

软件保护

  • 使用 GPIO_WriteBit_Critical() API 替代 GPIO_WriteBit() 操作。

  • 通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。

应用示例

SDK 提供了两类功能示例,帮助开发者了解和使用 GPIO 功能:

  • mbed 示例

    • 路径:{SDK}\component\example\peripheral\mbed\GPIO\{demo}

    • 展示如何在 mbed 环境中实现 GPIO 控制。

  • raw 示例

    • 路径:{SDK}\component\example\peripheral\raw\GPIO\{demo}

    • 展示如何在无抽象层的情况下直接控制 GPIO。

以下是对 raw 示例功能的简要说明:

备注

要了解示例支持的芯片,请查看示例路径下的 README.md 文件。

API 参考

要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_gpio.h