ESP8266 GPIO中断学习
来源:互联网 发布:浙江网络作家协会 编辑:程序博客网 时间:2024/06/06 01:00
前言
GPIO中断在进行脉宽测量、脉冲计数时能起到极为重要的作用,本文主要介绍GPIO中断的用法,使用一个开关打开或关闭一个LED灯。
GPIO寄存器介绍
一、GPIO输入寄存器
二、GPIO输出寄存器
注:GPIO16不支持触发IO中断。
相关API介绍
一、引脚复用功能切换函数
二、输入模式配置
三、上拉模式配置
四、获取输入引脚状态
五、GPIO中断状态配置
六、配置中断处理函数
示例
void GPIO_ISR_Handler( void ){ /** GPIO中断处理函数 */}void GPIO_ISR_Handler_Config( void ){ ETS_GPIO_INTR_ATTACH(&GPIO_ISR_Handler,NULL);}
七、配置GPIO中断触发方式
示例
#include "ets_sys.h"#include "osapi.h"#include "user_interface.h"#include "eagle_soc.h"#include "gpio.h"#include "gpio16.h"/** 开关输入相关 宏定义 */#define SWITCH_Pin_NUM 5#define SWITCH_Pin_FUNC FUNC_GPIO5#define SWITCH_Pin_MUX PERIPHS_IO_MUX_GPIO5_U#define SWITCH_Pin_Rd_Init() GPIO_DIS_OUTPUT(SWITCH_Pin_NUM)#define SWITCH_Pin_Wr_Init() GPIO_OUTPUT_SET(SWITCH_Pin_NUM,0)#define SWITCH_Pin_Set_High() GPIO_OUTPUT_SET(SWITCH_Pin_NUM,1)#define SWITCH_Pin_Set_Low() GPIO_OUTPUT_SET(SWITCH_Pin_NUM,0)#define SWITCH_Pin_State ( GPIO_INPUT_GET(SWITCH_Pin_NUM) != 0 )/********************************************************************************* * @brief GPIO中断处理函数 * @param [in/out] void * @return void * @note None********************************************************************************/static void GPIO_ISR_Handler( void ){ /** 读取GPIO中断状态 */ u32 pin_status = GPIO_REG_READ( GPIO_STATUS_ADDRESS ); /** 关闭GPIO中断 */ ETS_GPIO_INTR_DISABLE(); /** 清除GPIO中断标志 */ GPIO_REG_WRITE( GPIO_STATUS_W1TC_ADDRESS, pin_status ); /** 检测是否已开关输入引脚中断 */ if ( pin_status & BIT( SWITCH_Pin_NUM ) ) { if( SWITCH_Pin_State ) { gpio16_output_set(0); } else { gpio16_output_set(1); } } /** 开启GPIO中断 */ ETS_GPIO_INTR_ENABLE();}/********************************************************************************* * @brief 输入初始化函数 * @param [in/out] void * @return void * @note None ******************************************************************************* */static void drv_Input_Init( void ){ PIN_FUNC_SELECT( SWITCH_Pin_MUX, SWITCH_Pin_FUNC ); SWITCH_Pin_Rd_Init(); ETS_GPIO_INTR_DISABLE(); ETS_GPIO_INTR_ATTACH( &GPIO_ISR_Handler, NULL ); gpio_pin_intr_state_set( GPIO_ID_PIN( SWITCH_Pin_NUM ), GPIO_PIN_INTR_ANYEDGE ); /** 清除该引脚的GPIO中断标志 */ GPIO_REG_WRITE( GPIO_STATUS_W1TC_ADDRESS, BIT(SWITCH_Pin_NUM) ); ETS_GPIO_INTR_ENABLE();}/********************************************************************************* * @brief 用户初始化程序 * @param [in/out] void * @return void * @note None********************************************************************************/void user_init( void ){ drv_Input_Init(); gpio16_output_conf();}
参考资料
[1]. ESP8266技术参考
[2]. ESP8266Non-OS SDK API参考
[3]. ESP8266 管脚清单
0 0
- ESP8266 GPIO中断学习
- ESP8266--学习笔记(八)中断(一)GPIO中断
- 关于ESP8266 GPIO中断使用的总结
- 关于ESP8266 GPIO中断使用的总结
- ESP8266 RTOS SDK使用GPIO中断的方法
- ADSP-BF533 GPIO中断学习
- Linux gpio 按键中断学习
- ESP8266 GPIO入门篇
- ESP8266 PWM&GPIO
- ESP8266 GPIO入门(转)
- esp8266 GPIO模拟串口
- ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点
- TM4C123GXL GPIO 中断 配置(学习笔记)
- 原理图学习笔记 GPIO 门电路 中断
- GPIO中断
- 中断gpio
- GPIO中断
- SAMA5D3X芯片学习之---GPIO边缘中断注意事项
- 后缀数组
- HNOI2010 bounce 弹飞绵羊 (BZOJ2002)
- Java线程和多线程(四)——主线程中的异常
- RSA加密算法的简单案例
- 使用Android系统调用裁剪图片并保存
- ESP8266 GPIO中断学习
- 几个重要的java数据库访问类和接口
- chmod 777 修改权限
- [精]Oracle EBS 12.1.3 克隆教程(Rapid Cloning)
- 关于DS报错:Delimiter for field "TURNOVER_VOLUE" not found; input: {1 8 3 5 1 9 6 8 6 6}, at offset: 65的问
- 树结构练习——排序二叉树的中序遍历
- JQuery技术详解(一)
- volatile关键字
- centOS7上安装scrape