【已解决】gpio 中断问题

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
xlhome
Posts: 52

Tuyaos 3.5.3 使用wbr3 模组, 设置GPIO a12 为下降沿中断,实际测试发现,为何上升沿也会触发? a12 外部接了10k 的上拉电阻。

hearge
Posts: 39

Re: gpio 中断问题

可以帮确认一下外部触发信号是怎么实现的么?

一个网友
Posts: 5
Location: ⭐星星⭐

Re: gpio 中断问题

您好,
实际测试并未发现存在上升沿触发中断现象,测试代码如下:

Code: Select all

STATIC TKL_THREAD_HANDLE ty_test_thread = NULL;
static uint32_t cnt = 0;
static void gpio_cb(void *arg)
{
    cnt++;
    printf("irq count: %d\r\n", cnt);
}

static void tuya_test_thread(void *arg)
{
    TUYA_GPIO_NUM_E pin_id = 12;
    TUYA_GPIO_IRQ_T cfg;

    cfg.mode = TUYA_GPIO_IRQ_FALL;
    cfg.cb   = gpio_cb;
    cfg.arg  = NULL;
    tkl_gpio_irq_init(pin_id, &cfg);

    do {
        // wait
        tal_system_sleep(100);
    } while (1);

    PR_DEBUG("------- exit %s ---------\r\n", __func__);
    tkl_thread_release(ty_test_thread);
    ty_test_thread = NULL;
    return;
}

void tuya_app_main(void)
{
    tkl_thread_create(&ty_app_thread, "tuya_app_main", 4096, 4, tuya_app_thread, NULL);
    tkl_thread_create(&ty_test_thread, "test", 4096, 4, tuya_test_thread, NULL);
}

IO中断中添加时间log:

Code: Select all

static void pin_dev_irq_handler(uint32_t id, gpio_irq_event event)
{
    printf("irq event: %d\r\n", event);
    if (pinmap[id].cb) {
        pinmap[id].cb(pinmap[id].args);
    }
}

测试log如下:
Image

irq event 值始终为 2,即下降沿触发

1、是否可以添加一下代码,我们测试一下?
2、或者还有一种情况,GPIO中断是否做了防抖操作?

努力写bug……

xlhome
Posts: 52

Re: gpio 中断问题

我加日志再调试看看 。

xlhome
Posts: 52

Re: gpio 中断问题

GPIO A12 连了一个触点开关, 当GPIO A12中断设置为 下降沿触发, 按下触点开关 ,中断触发一次, 放掉触点开关,中断再次触发一次。

xlhome
Posts: 52

Re: gpio 中断问题

另外 高低或电平时中断触发 需要如何配置?

一个网友
Posts: 5
Location: ⭐星星⭐

Re: gpio 中断问题

xlhome 2023年 Apr 4日 20:38

GPIO A12 连了一个触点开关, 当GPIO A12中断设置为 下降沿触发, 按下触点开关 ,中断触发一次, 放掉触点开关,中断再次触发一次。

看起来是没有做按键防抖操作导致,我测试外接的按键,日志里面,irq count 3/4跟5/6实际上我只按了一次按键,但是没有做防抖,触发了2次计数,
甚至如果我按键不那么用力的话,有触发3次的情况出现,如7/8/9计数

努力写bug……

一个网友
Posts: 5
Location: ⭐星星⭐

Re: gpio 中断问题

xlhome 2023年 Apr 6日 09:55

另外 高低或电平时中断触发 需要如何配置?

配置IO中断时候选择相应的中断方式,如下:
Image

努力写bug……

xlhome
Posts: 52

Re: gpio 中断问题

有没有低电平和高电平 都中断的选项? 高电平触发,低电平也触发。

xlhome
Posts: 52

Re: gpio 中断问题

一个网友 2023年 Apr 6日 10:14
xlhome 2023年 Apr 4日 20:38

GPIO A12 连了一个触点开关, 当GPIO A12中断设置为 下降沿触发, 按下触点开关 ,中断触发一次, 放掉触点开关,中断再次触发一次。

看起来是没有做按键防抖操作导致,我测试外接的按键,日志里面,irq count 3/4跟5/6实际上我只按了一次按键,但是没有做防抖,触发了2次计数,
甚至如果我按键不那么用力的话,有触发3次的情况出现,如7/8/9计数

谢谢,

触发后通过判断当前电平值解决了这个问题 。

有没有低电平和高电平 都中断的选项? 也就是 高电平触发,低电平也触发中断。

Post Reply