Tuyaos 3.5.3 使用wbr3 模组, 设置GPIO a12 为下降沿中断,实际测试发现,为何上升沿也会触发? a12 外部接了10k 的上拉电阻。
【已解决】gpio 中断问题
Re: gpio 中断问题
可以帮确认一下外部触发信号是怎么实现的么?
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如下:
irq event 值始终为 2,即下降沿触发
1、是否可以添加一下代码,我们测试一下?
2、或者还有一种情况,GPIO中断是否做了防抖操作?
努力写bug……
Re: gpio 中断问题
我加日志再调试看看 。
Re: gpio 中断问题
GPIO A12 连了一个触点开关, 当GPIO A12中断设置为 下降沿触发, 按下触点开关 ,中断触发一次, 放掉触点开关,中断再次触发一次。
Re: gpio 中断问题
另外 高低或电平时中断触发 需要如何配置?
Re: gpio 中断问题
看起来是没有做按键防抖操作导致,我测试外接的按键,日志里面,irq count 3/4跟5/6实际上我只按了一次按键,但是没有做防抖,触发了2次计数,
甚至如果我按键不那么用力的话,有触发3次的情况出现,如7/8/9计数
努力写bug……
Re: gpio 中断问题
有没有低电平和高电平 都中断的选项? 高电平触发,低电平也触发。