zoukankan      html  css  js  c++  java
  • ESP8266 SDK开发: 外设篇-GPIO中断检测

    NONOS(2.2.0)

    NONOS(2.2.0)

    NONOS(2.2.0)

     1.直接上菜

    void gpio0_intr_handler()
    {
        uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//读取GPIO状态寄存器,获取中断信息
        GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断信息
        if(gpio_status & (BIT(0)))//GPIO0产生的中断
        {
            if(!GPIO_INPUT_GET(0))//GPIO0是低电平    GPIO0确实是下降沿产生了中断
            {
                os_printf("GpioDown
    ");
            }
        }
    }
    
    /******************************************************************************
     * FunctionName : user_init
     * Description  : entry of user application, init user function here
     * Parameters   : none
     * Returns      : none
    *******************************************************************************/
    void ICACHE_FLASH_ATTR
    user_init(void)
    {
        uart_init_2(BIT_RATE_115200,BIT_RATE_115200);
        os_printf("SDK version:%s
    ", system_get_sdk_version());
        os_printf("hello_ai
    ");
    
        /*配置中断引脚**********************************************/
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);
        GPIO_DIS_OUTPUT(0);//如果以前设置过GPIO为输出,则调用此函数关闭GPIO输出
        PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//上拉输入
        //全局关闭GPIO中断
        ETS_GPIO_INTR_DISABLE();
        //设置中断函数
        ETS_GPIO_INTR_ATTACH(gpio0_intr_handler, NULL);
        //设置中断触发方式
        gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//下降沿触发
        ETS_GPIO_INTR_ENABLE();
    }

    测试

    按下按钮

    RTOS(2.2.0)

    RTOS(2.2.0)

    RTOS(2.2.0)

     1.直接上菜

    #include "gpio.h"

    //设置GPIO0下降沿中断

        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0做为普通IO使用
        GPIO_DIS_OUTPUT(0);//0:GPIO0    如果以前设置过GPIO为输出,则调用此函数关闭GPIO0输出
        PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//GPIO0上拉输入
    
        _xt_isr_mask(1<<ETS_GPIO_INUM);    //关闭GPIO中断
        gpio_intr_handler_register(gpio0_intr_handler, NULL);//设置中断函数
        gpio_pin_intr_state_set(0, GPIO_PIN_INTR_NEGEDGE);//0:GPIO0        GPIO_PIN_INTR_NEGEDGE:下降沿触发
        _xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中断

    //GPIO0中断回调函数

    void gpio0_intr_handler()
    {
        uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//读取GPIO状态寄存器,获取中断信息
        GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断信息
        if(gpio_status & (BIT(0)))//GPIO0产生的中断
        {
            if(!GPIO_INPUT_GET(0))//GPIO0是低电平    GPIO0确实是下降沿产生了中断
            {
                printf("GpioDown
    ");
            }
        }
    }

    如果使用的NONOS版本请查看文章最后的区别

    测试

    按下按钮

     

    扩展:配置GPIO4

    //设置GPIO4下降沿中断

        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U , FUNC_GPIO4);//GPIO4做为普通IO使用
        GPIO_DIS_OUTPUT(4);//4:GPIO4    如果以前设置过GPI4为输出,则调用此函数关闭GPIO4输出
        PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO4_U);//GPIO4上拉输入
    
        _xt_isr_mask(1<<ETS_GPIO_INUM);    //关闭GPIO中断
        gpio_intr_handler_register(gpio4_intr_handler, NULL);//设置中断函数
        gpio_pin_intr_state_set(4, GPIO_PIN_INTR_NEGEDGE);//4:GPIO4        GPIO_PIN_INTR_NEGEDGE:下降沿触发
        _xt_isr_unmask(1 << ETS_GPIO_INUM); //使能GPIO中断

    //GPIO4中断回调函数

    void gpio4_intr_handler()
    {
        uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);//读取GPIO状态寄存器,获取中断信息
        GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);//清除中断信息
        if(gpio_status & (BIT(4)))//GPIO4产生的中断
        {
            if(!GPIO_INPUT_GET(4))//GPIO4是低电平    GPIO4确实是下降沿产生了中断
            {
                printf("GpioDown
    ");
            }
        }
    }

     

  • 相关阅读:
    Golang的跨平台编译程序
    PySide教程:Clo“.NET研究”se 狼人:
    PyS“.NET研究”ide QtCore.Signal帮助手册 狼人:
    PySide教程:“.NET研究”第一个PySide应用 狼人:
    关“.NET研究”于Android的一些设计 狼人:
    资深设计师Tony Ventrice解析手机游戏开“.NET研究”发的四个层次 狼人:
    移动开发多平台代码共享“.NET研究” 狼人:
    关于做Andr“.NET研究”oid+J2ee系统集成开发的一点心得 狼人:
    “.NET研究”【Android开发教程】一、基础概念 狼人:
    “.NET研究”如何发布你的Android应用程序 狼人:
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12305933.html
Copyright © 2011-2022 走看看