Code: Select all
#include "tal_gpio.h"
#include "tal_log.h"
UINT32_T gIrqCnt = 0;
VOID_T gpio_demo(VOID_T)
{
OPERATE_RET ret;
/* GPIO配置为推挽低电平输出 */
TUYA_GPIO_BASE_CFG_T gpioCfg = {
.mode = TUYA_GPIO_PUSH_PULL,
.direct = TUYA_GPIO_OUTPUT,
.level = TUYA_GPIO_LEVEL_LOW,
};
/* 初始化GPIO10 */
ret = tal_gpio_init(10, &gpioCfg);
if (OPRT_OK != ret) {
TAL_PR_ERR("gpio10 init failed: %d", ret);
return;
}
/* 控制GPIO10输出高电平 */
tal_gpio_write(10, TUYA_GPIO_LEVEL_HIGH);
/* GPIO配置为中断输入,上升沿触发 */
TUYA_GPIO_IRQ_T gpioIrqCfg = {
.mode = TUYA_GPIO_IRQ_RISE,
.cb = gpio_irq_cb, /* 中断处理函数 */
.arg = NULL,
};
ret = tal_gpio_irq_init(11, &gpioIrqCfg);
if (OPRT_OK != ret) {
TAL_PR_ERR("gpio11 irq init failed: %d", ret);
return;
}
while(1) {
TAL_PR_INFO("irq count: %d", gIrqCnt);
tal_system_sleep(1000); /* 延时1秒 */
}
}
VOID_T gpio_irq_cb(VOID_T* args)
{
gIrqCnt++;
/* 注意: 中断处理函数中不能出现阻塞及打印等耗时调用 */
}