Page 1 of 1

【已解决】gpio 中断问题

Posted: 2023年 Mar 31日 22:50
by xlhome

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


Re: gpio 中断问题

Posted: 2023年 Apr 3日 18:26
by hearge

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


Re: gpio 中断问题

Posted: 2023年 Apr 4日 10:57
by 一个网友

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

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中断是否做了防抖操作?


Re: gpio 中断问题

Posted: 2023年 Apr 4日 14:05
by xlhome

我加日志再调试看看 。


Re: gpio 中断问题

Posted: 2023年 Apr 4日 20:38
by xlhome

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


Re: gpio 中断问题

Posted: 2023年 Apr 6日 09:55
by xlhome

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


Re: gpio 中断问题

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

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

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


Re: gpio 中断问题

Posted: 2023年 Apr 6日 10:21
by 一个网友
xlhome 2023年 Apr 6日 09:55

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

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


Re: gpio 中断问题

Posted: 2023年 Apr 6日 15:17
by xlhome

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


Re: gpio 中断问题

Posted: 2023年 Apr 6日 15:21
by xlhome
一个网友 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计数

谢谢,

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

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