nRF52832-GPIOTE部分
GPIOTE部分学习思维导图

GPIOTE原理
1.1nRF52832寄存器类型
Task:任务寄存器,可以由程序或事件触发
Event:事件寄存器,事件可以产生中断和触发任务
Register:普通寄存器,和一般单片机的寄存器一样
1.2GPIOTE功能
GPIOTE每个通道可以使用的Task有三个
置位,清除,翻转
GPIOTE每个同奥的事件可以由以下的输入状态产生
上升沿,下降沿,任意电平跳变
1.3引脚Tasks和Events
1.4PORT事件
1.5相关寄存器
GPIOTE驱动库的使用
2.1任务/事件通道的分配
用于驱动引脚输出的GPIOTE任务或者用于在输入引脚电平变换时产生事件的
任务/事件通道数量时受限制的,驱动程序会管理这些通道,用户是决定不了哪个通道的,
也就是说通道分配由驱动程序完成,用户不能指定使用哪一个具体的通道。
2.2重要的API函数
函数功能:初始化GPIOTE通道
ret_code_t nrf_drv_gpiote_init ( void )
函数功能:初始化GPIOTE输出引脚
ret_code_t nrf_drv_gpiote_out_init (
nrf_drv_gpiote_pin_t pin, //初始化引脚
nrf_drv_gpiote_out_config_t const * p_config //初始化结构体
)
nrf_drv_gpiote_out_config_t要包含以下三项内容
1)引脚的初始状态:高电平还是低电平
2)引脚动作:任务触发后引脚执行的动作,包括置位,清除和翻转
3)是否为GPIOTE引脚
函数功能:使能任务触发
void nrf_drv_gpiote_out_task_enable ( nrf_drv_gpiote_pin_t pin )
2.3应用步骤
2.3.1GPIOTE输出应用步骤
注意:GPIOTE一般和PPI一起用,否则体现不了GPIOTE的优势
(1)初始化GPIOTE模块(在一个程序中GPIOTE只能初始化一次)
(2)初始化GPIOTE输出引脚
(3)是否使能任务触发,虽然使用的GPIOTE模块,但是仍可设置是任务
触发还是写GPIO寄存器,若使能了任务触发,则触发任务驱动引脚,否则写GPIO寄存器驱动引脚
(4)使能任务触发
2.3.2GPIOTE输入应用步骤
(1)初始化GPIOTE模块
(2)配置引脚为GPIO输入
ret_code_t nrf_drv_gpiote_in_init (
nrf_drv_gpiote_pin_t pin, //初始化的引脚
nrf_drv_gpiote_in_config_t const * p_config, //GPIOTE输入初始化结构体
nrf_drv_gpiote_evt_handler_t evt_handler //User function to be called when the configured transition occurs.
)
GPIOTE初始化结构体包括4项内容
1)Sense 配置引脚的Sense功能
高电平到低电平的变化产生事件
低电平到高电平的变化产生事件
任意电平变化产生事件
2)is_watcher 是否连接输入缓冲器
3)pull 是否开启上拉电阻
4)hi_accuracy 是否为高精度模式
(3)使能该引脚所在GPIOTE通道的事件模式
void nrf_drv_gpiote_in_event_enable (
nrf_drv_gpiote_pin_t pin,
bool int_enable //True to enable the interrupt. Always valid for a high-accuracy pin
)
DEMO
包括PPI和GPIOTE两部分的应用
#include <stdint.h>
#include "nrf_drv_gpiote.h"
#include "app_error.h"
#include "nrf_drv_ppi.h"
//定义引脚
#define LED_2 18
#define BUTTON_0 16
//定义nrf_ppi_channel_t变量,用来保存PPI的信息
nrf_ppi_channel_t my_ppi_channel;
//初始化PPI
void PPI_Config()
{
uint32_t err_code = NRF_SUCCESS;
//1 初始化PPI
err_code=nrf_drv_ppi_init();
APP_ERROR_CHECK(err_code);
//2 分配PPI通道
err_code=nrf_drv_ppi_channel_alloc(&my_ppi_channel);
APP_ERROR_CHECK(err_code);
//3 配置PPI通道的EEP和TEP
err_code=nrf_drv_ppi_channel_assign(my_ppi_channel,
nrf_drv_gpiote_in_event_addr_get(BUTTON_0),
nrf_drv_gpiote_out_task_addr_get(LED_2));
APP_ERROR_CHECK(err_code);
//4 使能PPI通道
err_code=nrf_drv_ppi_channel_enable(my_ppi_channel);
APP_ERROR_CHECK(err_code);
}
//初始化GPIOTE
void GPIOTE_Config()
{
ret_code_t err_code;
//LED初始化为输出引脚
err_code=nrf_drv_gpiote_init();
APP_ERROR_CHECK(err_code);
//配置结构体
nrf_drv_gpiote_out_config_t led_config=GPIOTE_CONFIG_OUT_TASK_TOGGLE(true);
err_code=nrf_drv_gpiote_out_init(LED_2,&led_config);
APP_ERROR_CHECK(err_code);
//使能任务触发
nrf_drv_gpiote_out_task_enable(LED_2);
//BUTTON初始化为输入引脚
nrf_drv_gpiote_in_config_t button_config=GPIOTE_CONFIG_IN_SENSE_HITOLO(true);
button_config.pull=NRF_GPIO_PIN_PULLUP; //开启上拉电阻
err_code=nrf_drv_gpiote_in_init(BUTTON_0,&button_config,NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(BUTTON_0,true);
}
/**********************************************************************************************
* 描 述 : main函数
* 入 参 : 无
* 返回值 : 无
***********************************************************************************************/
int main(void)
{
//初始化GPIOTE
GPIOTE_Config();
//初始化PPI
PPI_Config(); //一定要先初始化GPIOTE,然后进行PPI的初始化
while (true)
{
}
}
参考资料
1 艾克姆科技 《nRF52832开发教程》
nRF52832-GPIOTE部分的更多相关文章
- 蓝牙nrf52832的架构和开发(转载)
相比TI的CC254X.DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架构和开发商都有自己独特的地方.这几颗产品都是蓝牙低功耗芯片.DA1458X使用OTP硬件架 ...
- 青风nrf52832跑zephyr——点亮LED
zephyr版本:1.10 硬件:采用青风nrf52832开发板 开发环境:虚拟机Ubuntu16.04编译+Windows7 64bit烧录 使用的是 zephyr-zephyr-v1.10.0 ...
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...
- Nordic Semiconductor nRF52832 蓝牙智能多协议单芯片解决方案荣获《中国电子商情》编辑选择奖
挪威奥斯陆 – 2016年4月11日 – Nordic Semiconductor ASA (OSE: NOD) 赢得<中国电子商情>颁发的"2015年编辑选择奖",其 ...
- NRF51822之GPIOTE使用
---恢复内容开始--- 在上篇介绍nrf51822的GPIOTE http://www.cnblogs.com/libra13179/p/5336580.html 我们现在开始下水游泳. /** @ ...
- NRF51822之GPIOTE介绍
Note This library is obsolete and should not be used in new designs. Instead, you should use GPIOTE ...
- nrf51822裸机教程-GPIOTE
GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...
- nRF52系列——nRF52832来袭
nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...
- 废旧鼠标先别丢,用来学习nRF52832 的QDEC
刚发现nRF52832有一个 QDEC,SDK13.0中还有驱动,但是不太友好. 如果大家有废旧鼠标,建议拆一个编码器下来“学习”.鼠标的一般原理如下: 图一 图中那个SW4 ALPS EC10E ...
- NRF52832与W25Q80通信
1 NRF52832SPI主机的功能描述 nRF52832SPIM的主要特征 3个SPI实例 支持SPI的模式0到模式3 支持DMA Individual selection of IO pin fo ...
随机推荐
- Linux学习笔记之yum安装和卸载软件
# yum -y install 包名(支持*) :自动选择y,全自动 # yum install 包名(支持*) :手动选择y or n # yum remove 包名(不支持*) # rpm -i ...
- Centos6下给PHP安装Qconf扩展
一.下载Qconf的zip包 1.进入github地址:https://github.com/Qihoo360/QConf,下载zip包文件,并上传至服务器二.安装QConf unzip ...
- layui使用iconfont
layui的图标取自于阿里巴巴的矢量图标库 Iconfont,同样的,这篇教程也是基于Iconfont进行扩展. 第一步,通过浏览器打开 http://iconfont.cn/ ,访问阿里巴巴矢量图标 ...
- bzoj2716/2648 / P4169 [Violet]天使玩偶/SJY摆棋子
P4169 [Violet]天使玩偶/SJY摆棋子 k-d tree 模板 找了好几天才发现输出优化错了....真是zz...... 当子树非常不平衡时,就用替罪羊树的思想,拍扁重建. luogu有个 ...
- tomcat部署solr4.10
1.创建solrHome mkdir /opt/solrHome 2.拷贝solr基础数据 /example/solr/* /opt/solrHome 将contrib和dist两个目录拷贝到/opt ...
- host元素的属性autoDeploy和reloadable的区别
web.xml文件的修改会触发AutoDeploy,受host节的autoDeploy配置值的影响. class类文件修改会触发Reload操作,受reloadable配置值的影响. 而autoDep ...
- IIS W3C日志记录字段和HTTP状态代码的说明
像新网的部分服务器ftp目录有这个文件,但是就是提示没权限查看也没有权限下载,还得必须给他们打电话才能要到. 做为网站拥有者,我们应该关注IIS日志,从里面我们不仅仅可以看到网站的访问记录和搜索引擎的 ...
- win7 powershell配色方案
首先我是参考微软的word的, look~ Windows PowerShell 配置文件 要配置powershell很简单, 就几步 1.显示 Windows PowerShell 配置文件的路径 ...
- Java类型信息
一.引言 最近在阅读<Java编程思想>,学习一下java类型信息,现在做一下总结.Java如何让我们在运行时识别对象和类的信息的.主要有两种方式:一种是传统的“RTTI”,它假定我们在编 ...
- Vue父子组件生命周期
转载自:https://blog.csdn.net/a8725585/article/details/79092505 vue父子组件钩子函数触发顺序 beforeMount后mounted前构造子组 ...