ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点
ESP8266 Non-OS SDK 和 RTOS SDK 实现GPIO的方法稍有不同:
对于 Non-OS SDK,比如需要把 MTDO 配置成输入,同时下降沿触发中断:
gpio_init(void)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15);
GPIO_DIS_OUTPUT(GPIO_ID_PIN()); //Configure it in input mode.
ETS_GPIO_INTR_DISABLE(); //Close the GPIO interrupt//Register the interrupt function
ETS_GPIO_INTR_ATTACH(GPIO_INTERRUPT,NULL);
gpio_pin_intr_state_set(GPIO_ID_PIN(),GPIO_PIN_INTR_NEGEDGE); //Falling edge trigger
ETS_GPIO_INTR_ENABLE() ; //Enable the GPIO interrupt
}
对于 RTOS SDK,实现相同的功能:
{
GPIO_ConfigTypeDef gpio_in_cfg; //Define GPIO Init Structure
gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_NEGEDGE; //
gpio_in_cfg.GPIO_Mode = GPIO_Mode_Input; //Input mode
gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_EN;
gpio_in_cfg.GPIO_Pin = keygpio; // Enable GPIO
gpio_config(&gpio_in_cfg); //Initialization function
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, TRUE);
gpio_intr_handler_register(keyinterrupt_cb, NULL); // Register the interrupt function
_xt_isr_unmask( << ETS_GPIO_INUM); //Enable the GPIO interrupt
}
特别留意:
在中断回调函数中,
{
_xt_isr_mask(<<ETS_GPIO_INUM); //disable interrupt
....
GPIO_REG_WRITE( GPIO_STATUS_W1TC_ADDRESS, TRUE ); //clear interrupt mask
_xt_isr_unmask( << ETS_GPIO_INUM); //Enable the GPIO interrupt
}
在disable interrupt之后,如果有中断信号触发中断引脚,即使还未使能中断,但interrupt mask仍然会被置为中断标志,因此,为避免Enable the GPIO interrupt之后,由于受之前中断位的影响而马上再次中断,故在_xt_isr_unmask(1 << ETS_GPIO_INUM); //Enable the GPIO interrupt之前务必加上GPIO_REG_WRITE( GPIO_STATUS_W1TC_ADDRESS, TRUE ); //clear interrupt mask
ESP8266 NON-OS SDK 和 RTOS SDK实现GPIO中断不同点的更多相关文章
- ESP8266 RTOS SDK开发
ESP8266 RTOS SDK开发 目录 ESP8266 RTOS SDK开发 一.源码RTOS SDK包的下载和编译 二.固件烧录 1.管脚定义 三.程序例程 ## 1.PWM设置 连接MQTT ...
- 关于STM32F103+ESP8266+阿里云过程之修改SDK支持UART和SmartConfig(四)
设备上报状态到阿里云成功之后,还要接受来至云端下发的命令,如APP.在ESP8266接受到数据之后可将数据先进行解析,再通过自定义协议与STM32进行串口通讯,也可以将接收到的数据中的信息直接传输到U ...
- 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系
几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...
- ESP8266文档阅读2A-SDK-Espressif IoT SDK 使用手册v1.0.1.pdf
2A-SDK-Espressif IoT SDK 使用手册v1.0.1.pdf 1.前言 本⽂文主要介绍基于ESP8266物联⺴⽹网模块的SDK相关使⽤用⽅方法,包括开发⼯工具使⽤用以及SDK软件包架 ...
- SDK接入(U8SDK)——SDK抽象层的设计
上一篇文章,我们总体地分析并设计了一套高效的SDK接入方案,也罗列出这套方案,我们需要完成的工作.这里再罗列并回顾下: 1.统一抽象的SDK接入框架 2.各个SDK接入实现 3.一键打包工具 4.统一 ...
- Platform SDK、Windows SDK简介
Platform SDK及Windows SDK是由微软公司出品的一个软件开发包,向在微软的Windows操作系统和.NET框架上开发软件和网站的程序员提供头文件.库文件.示例代码.开发文档和开发工具 ...
- 修改Intellij IDEA中工程对应的Java SDK、Scala SDK
如果编译Scala工程时,遇到如下异常: can't expand macros compiled by previous versions of Scala 很可能是工程的scala版本,和依赖的包 ...
- Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系
1. sdk platform 简单理解为系统版本 最新级别: 28:Android 9 27:Android 8.1 26:Android 8.0 25:Android 7.1 24:Android ...
- 关于DirectShow SDK 和Windows SDK,及DirectX SDK
关于DirectShow SDK 和Windows SDK,及DirectX SDK 本文描述了DirectShow SDK ,Windows SDK,DirectX SDK ,VS200?之间的 ...
随机推荐
- 用ReentrantLock和Condition实现线程间通信
在Java多线程中,除了使用synchronize关键字来实现线程之间的同步互斥,还可以使用JDK1.5中新增的RetrantLock类来实现同样的效果.RetrantLock类的扩展功能也更加强大, ...
- sys,os加glob加os.path用法
1 sys.path是python的搜索模块的路径集,是一个list 打印下大概长这样 C:\Python27\Lib\idlelib C:\Windows\system32\python27.z ...
- jquery全选 反选
//全选 反选 $('#chkAll').on('click',function(){ $('input.chkbox').prop('checked',$(this).prop('checked') ...
- JDK(三)JDK1.8源码分析【排序】mergeSort
归并排序是JDK对象数组的排序算法之一,接下来开始分析JDK的归并排序算法. /** * 将指定范围的对象数组按自然顺序升序排序 * * Src is the source array that st ...
- Content Editor Webpart(三)使用JSOM
JSOM是SharePoint 提供的一种clientAPI.开发者仅仅须要使用Javescript.就能够实现和SharePoint的交互.很方便. 首先依照 (Content Editor Web ...
- 10JavaScript作用域
(作用域可访问变量的集合) 1.JavaScript 作用域 在 JavaScript 中, 对象和函数同样也是变量. 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合. Java ...
- 偏前端-vue.js学习之路初级(一)概念
首先--不推荐新手直接使用 vue-cli,尤其是在你还不熟悉基于 Node.js 的构建工具时. 新建一个html,引入一下js: <!-- 开发环境版本,包含了有帮助的命令行警告 -- ...
- 用DBCC CHECK修复SQL2000的数据库一致性问题
) set @databasename='需要修复的数据库实体的名称' exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户 ...
- zookeeper无法启动"Unable to load database on disk
QuorumPeerMain,ResourceManager都没有起来 resourcemanager.log如下 2018-09-28 23:17:02,787 FATAL org.apache.h ...
- 简单记录一下ruby 循环
今天整理一下ruby中的循环用法: 备注:“do~end”部分也可以写做{~} 1.break:直接跳出整个循环 i= 0 ["perl","python",& ...