LiteOS GPIO中断处理

在LiteOS系统里主要使用IoTGpioRegisterIsrFunc函数注册GPIO的中断:

函数原型:
unsigned int IoTGpioRegisterIsrFunc(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity, GpioIsrCallbackFunc func, char *arg)

参数功能:
id参数指定IO口, intType指定中断触发方式(LEVEL高/低电平时中断,EDGE上升/下降边沿时中断)
intPolarity指定IO口什么电平状态时触发中断, 双边沿:IOT_GPIO_EDGE_FALL_LEVEL_LOW|IOT_GPIO_EDGE_RISE_LEVEL_HIGH
func参数指定中断处理函数, arg参数指定中断处理函数执行传递的参数


按键1GPIO的中断处理:


#include <stdio.h>
#include <ohos_init.h> 
#include <hi_io.h>
#include <iot_gpio.h>
#include <iot_errno.h>
#include <unistd.h>
#include <cmsis_os2.h>

#define KEY_IO    HI_IO_NAME_GPIO_11
#define KEY_FUNC  HI_IO_FUNC_GPIO_11_GPIO

void key_isr(void *arg)
{
    //获取按键IO口的电平来判断是按下还是松手
    int v;
    IoTGpioGetInputVal(KEY_IO, &v);
    if (v)
        printf("key up\n");
    else
        printf("key down\n");
}

void myhello_test()
{
    IoTGpioInit(KEY_IO);
    hi_io_set_func(KEY_IO, KEY_FUNC);
    hi_io_set_pull(KEY_IO, HI_IO_PULL_UP);
    hi_io_set_schmitt(KEY_IO, HI_TRUE);//打开硬件消抖功能
    IoTGpioSetDir(KEY_IO, IOT_GPIO_DIR_IN);

    IoTGpioRegisterIsrFunc(KEY_IO, IOT_INT_TYPE_EDGE, 
            IOT_GPIO_EDGE_FALL_LEVEL_LOW|IOT_GPIO_EDGE_RISE_LEVEL_HIGH, key_isr, NULL);

}

SYS_RUN(myhello_test);

只能获取按下时的下降沿中断或松手时的上升沿中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值