功能特性
输入功能
消抖功能:
输入引脚支持消抖功能,可有效防止因抖动产生的错误信号。
中断支持:
电平触发
边沿触发
双边沿触发
输出功能
单个引脚输出设置:
支持单独设置特定引脚的输出状态。
多个引脚同时设置:
同一端口的多个引脚可以同时进行输出设置。
消抖功能
消抖时钟
消抖时钟源为 dbclk_src,其输出的消抖时钟 dbclk 为:
dbclk = dbclk_src / (div + 1)
。其中, div 为可调的分频系数。
芯片的消抖时钟源如下:
32.768KHz;
OSC4MHz。
32.768 KHz。
32.768 KHz。
32.768 KHz。
32.768 KHz。
32.768KHz;
OSC4MHz。
滤波能力
持续时间小于 1 个消抖时钟周期的 Glitch 信号可滤除。
持续时间在 1 至 2 个消抖时钟周期的 Glitch 信号不确定。
持续时间大于 2 个消抖时钟周期的 Glitch 信号无法滤除。
端口滤波一致性
在同一个端口上的不同引脚, div 是共用的,即消抖时钟一致。
注意
采用消抖功能时,输入信号的处理会有一定的延迟。这可能导致系统响应变慢,尤其是在中断和唤醒操作需要快速响应的情况下。
中断类型
电平触发:支持通过电平状态(高电平或低电平)触发中断。
边沿触发:支持检测信号的上升沿或下降沿引发中断。
双边沿触发:支持同时检测上升沿和下降沿以触发中断。
备注
在切换电平触发类型时,为避免误触发中断,需延迟两拍消抖时钟后再使能中断。
输出竞态保护
GPIO 输出以端口(PORT)为单位,单独控制某个 GPIO 引脚的电平状态在汇编中表现为 读、改、写
三步操作。如果同一组端口被多个线程控制输出,可能会引发竞态条件。
为应对此风险,系统提供了软件和硬件两种方式来保护输出操作。
具体方式根据所使用的芯片进行选择:
软件保护
使用
GPIO_WriteBit_Critical()
API 替代GPIO_WriteBit()
操作。通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。
软件保护
使用
GPIO_WriteBit_Critical()
API 替代GPIO_WriteBit()
操作。通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。
软件保护
使用
GPIO_WriteBit_Critical()
API 替代GPIO_WriteBit()
操作。通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。
软件保护
使用
GPIO_WriteBit_Critical()
API 替代GPIO_WriteBit()
操作。通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。
软件保护
使用
GPIO_WriteBit_Critical()
API 替代GPIO_WriteBit()
操作。通过软件层面锁定资源,规避多线程或中断上下文的竞态问题。
硬件保护
硬件内置保护机制允许直接调用
GPIO_WriteBit()
。依赖芯片内部硬件设计,无需额外的软件介入。
应用示例
SDK 提供了两类功能示例,帮助开发者了解和使用 GPIO 功能:
mbed 示例
路径:
{SDK}\component\example\peripheral\mbed\GPIO\{demo}
展示如何在 mbed 环境中实现 GPIO 控制。
raw 示例
路径:
{SDK}\component\example\peripheral\raw\GPIO\{demo}
展示如何在无抽象层的情况下直接控制 GPIO。
以下是对 raw 示例功能的简要说明:
raw_gpio_rw 演示如何使用 GPIO 读写 API;
raw_gpio_port 演示如何使用 GPIO Port 读写 API;
raw_gpio_edge_irq 演示如何配置 GPIO, 以触发边沿中断;
raw_gpio_level_irq 演示如何配置 GPIO, 以触发电平中断。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md
文件。
API 参考
要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_gpio.h
。