Debounce ======== 概述 ----- beetle 芯片中有 8 个 deb 通道 按 GPIO 区别分类: - TK 和 AON GPIO 仅可以使用 4-7 通道 - 其他 GPIO 8 个通道均可使用 按功能区别分类: - debounce 复位仅可以使用 6-7 通道 - 支持 1 个通道 pattern 功能,数据源可选择 4-7 通道 - 其他功能 8 个通道均可使用 功能特性 --------- - 支持 4 路独立的 gpi 的 debounce 的控制,可产生 4 个中断,4 个复位信号 - 支持对 gpi 的输入输出的极性进行配置 - 支持按键的中断检测,选中的 gpi 作为按键,检测其高电平(或低电平)持续时间并产生相应中断 - 按键中断检测包括两种中断类型:在按键过程中的中断,以及按键弹起的中断,软件根据需要配置相应的中断类型 - 支持按键复位,选中的 gpi 在高电平持续时间超过某个阈值时,对于芯片产生复位信号 - 同一个 channel 既可以支持按键中断,也可以支持按键复位,它们有不通的阈值 - 支持异步按键 pattern 检测,检测到的 pattern 可以用来产生唤醒中断,也可以用于产生芯片的复位,对应的 pattern 值可配置 工作模式 --------- Debounce 支持按键中断功能,按键复位功能,Pattern 中断和复位功能 按键中断功能 ^^^^^^^^^^^^ Key debounce IO 模块设置按键对应的 GPIO,以及 debounce 模块的中断方向和防抖的时间 Driver 会根据设定,触发相应的中断(按下或释放) 实现此功能步骤如下: 1. 判断防抖时长不可为 0,否则直接返回 WQ_RET_INVAL 2. 根据指定的 GPIO 申请一个 channel 3. 配置指定的按键 GPIO,指定的防抖时长 4. 关闭 debounce 复位使能 5. 使能指定的中断类型 6. 设置 debounce 为双沿采,配置 debounce 模式,计数时间 counter 清零 7. 使能某 channel 的 debounce 按键中断共有 2 种中断: 1. 按键过程中,持续时间等于指定的按键时间阈值,则立刻会产生 WQ_DEBOUNCE_INT_PRESS_MID 中断 2. 在按键释放的过程中,如果持续时间超过了(大于等于)指定的按键时间阈值,同样会产生 WQ_DEBOUNCE_INT_PRESS 中断 按键复位功能 ^^^^^^^^^^^^ Key debounce IO 模块设置按键对应的 GPIO 和防抖的时间 Driver 会根据设定,触发复位(按下达到指定时长) 实现此功能步骤如下: 1. 判断防抖时长不可为 0,否则直接返回 WQ_RET_INVAL 2. 根据指定的 GPIO 申请一个 channel 3. 配置指定的按键 GPIO,指定的防抖时长 4. 设置 debounce 为双沿采,配置 debounce 模式,计数时间 counter 清零 5. 使能 debounce 复位 6. 使能某 channel 的 debounce 注意事项:按键复位检测和按键中断检测,复用的是同一个 24bit 的 counter Pattern 中断和复位功能 ^^^^^^^^^^^^^^^^^^^^^^ Key debounce IO 模块设置按键对应的 GPIO,指定的波特率,指定的 header,reset,interrupt 控制字 Driver 会根据设定,触发相应的复位或中断(对应 GPIO 收到指定控制字) 实现此功能步骤如下: 1. 判断指定波特率不可为 0,指定的 GPIO 必须是 PMM GPIO,否则直接返回 WQ_RET_INVAL 2. 判断没有设置过 pattern 功能,否则直接返回 WQ_RET_EXIST 3. 根据指定的 GPIO 申请一个 channel 4. 清除 interrupt,reset 的标志位 5. 配置指定的按键 GPIO,波特率 6. 配置指定的 header,reset,intterupt 控制字 7. 根据指定的 header 控制字配置 debounce 模式 8. 使能 debounce pattern 9. 使能某 channel 的 debounce 注意事项:header 默认是"10101010"这 8bit 序列,可以配置为其他值,但一般要求有比较均匀的 0/1 资源依赖 --------------- - GPIO 用法流程 ------------- - 初始化 :cpp:func:`wq_debounce_init` - 配置中断 :cpp:func:`wq_debounce_gpio_open` - 配置复位 :cpp:func:`wq_debounce_gpio_reset_open` - 配置 PATTERN:cpp:func:`wq_debounce_pattern_dect` - 关闭 :cpp:func:`wq_debounce_gpio_close` - 注销 :cpp:func:`wq_debounce_deinit` 参考示例 ----------- :: examples/debounce_demo API 介绍 ----------- .. doxygenfile:: wq_debounce.h