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++;
	/* 注意: 中断处理函数中不能出现阻塞及打印等耗时调用 */
}