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
    ");
            }
        }
    }

     

  • 相关阅读:
    自我学习——javascript——基本技巧
    Edge Code CC卡死原因
    Django中ORM介绍和字段及字段参数
    Web框架本质及第一个Django实例
    Python连接MySQL数据库之pymysql模块使用
    Bootstrap框架
    jQuery快速入门
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12305933.html
Copyright © 2011-2022 走看看