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部分的更多相关文章

  1. 蓝牙nrf52832的架构和开发(转载)

    相比TI的CC254X.DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架构和开发商都有自己独特的地方.这几颗产品都是蓝牙低功耗芯片.DA1458X使用OTP硬件架 ...

  2. 青风nrf52832跑zephyr——点亮LED

    zephyr版本:1.10 硬件:采用青风nrf52832开发板 开发环境:虚拟机Ubuntu16.04编译+Windows7 64bit烧录   使用的是 zephyr-zephyr-v1.10.0 ...

  3. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

  4. Nordic Semiconductor nRF52832 蓝牙智能多协议单芯片解决方案荣获《中国电子商情》编辑选择奖

    挪威奥斯陆 – 2016年4月11日 – Nordic Semiconductor ASA (OSE: NOD) 赢得<中国电子商情>颁发的"2015年编辑选择奖",其 ...

  5. NRF51822之GPIOTE使用

    ---恢复内容开始--- 在上篇介绍nrf51822的GPIOTE http://www.cnblogs.com/libra13179/p/5336580.html 我们现在开始下水游泳. /** @ ...

  6. NRF51822之GPIOTE介绍

    Note This library is obsolete and should not be used in new designs. Instead, you should use GPIOTE ...

  7. nrf51822裸机教程-GPIOTE

    GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...

  8. nRF52系列——nRF52832来袭

    nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...

  9. 废旧鼠标先别丢,用来学习nRF52832 的QDEC

    刚发现nRF52832有一个 QDEC,SDK13.0中还有驱动,但是不太友好.  如果大家有废旧鼠标,建议拆一个编码器下来“学习”.鼠标的一般原理如下: 图一 图中那个SW4 ALPS EC10E  ...

  10. NRF52832与W25Q80通信

    1 NRF52832SPI主机的功能描述 nRF52832SPIM的主要特征 3个SPI实例 支持SPI的模式0到模式3 支持DMA Individual selection of IO pin fo ...

随机推荐

  1. Linux共享内存的管理

    在进程通信应用中会用到共享内存,这就涉及到了IPC,与IPC相关的命令包括:ipcs.ipcrm(释放IPC).IPCS命令是Linux下显示进程间通信设施状态的工具.我们知道,系统进行进程间通信(I ...

  2. oracle 11g亿级复杂SQL优化一例(数量级性能提升)

    自从16年之后,因为工作原因,项目中就没有再使用oracle了,最近最近支持一个项目,又要开始负责这块事情了.最近在跑性能测试,配置全部调好之后,不少sql还存在性能低下的问题,主要涉及执行计划的不合 ...

  3. 阿里云端口失效导致tomcat无法对外提供服务

    下午,我们一个环境启动成功,但是却无法访问,经查看启动日志,如下: Mar 23, 2017 2:15:09 PM org.apache.coyote.http11.AbstractHttp11Pro ...

  4. SqlServer字符串拼接

    ID    Name 2 小红 2 小明 2 小青 3 大红 3 大明 3 大青 有一张这样的表,现在要达到 把ID为2的Name合拼成一行显示出来: step1:建函数 CREATE  FUNCTI ...

  5. linux 中部署 rsync 实现文件远程备份及 同步

    客户端:数据源:服务端:数据接收方 rsync官方文档:https://www.samba.org/ftp/rsync/rsync.html 手动测试用“通过远程外壳访问"里的语法: 参考1 ...

  6. topcoder srm 709 div1

    1 给定一个长度为n的整数数组A,重排列数组A使得下面计算出的X最大:(n不大于15,A中的大于等于0小于等于50) int X=0; for(int i=0;i<n;++i) X=X+(X^A ...

  7. CentOS7学习记录(工具使用篇)

    一.   远程连接终端中文乱码:如xShell 检查当前系统语言:echo $LANG 查看系统安装语言包:locale ,如果包含zh_CN.UTF-8表示已经安装中文语言.如果没有中文包,使用命令 ...

  8. eMMC应用教程:关于RPMB的应用【转】

    本文转载自:https://blog.csdn.net/youdianhai/article/details/51246379 RPMB的意思是Replay Protected Memory Bloc ...

  9. Manjaro 安装与配置

    1.系统安装 Win下使用usbWriter制作安装盘,Manjaro下使用自带的SUSE Studio Imangewriter. 2.初始化配置 2.1.换源,装aurman yaourt虽然已经 ...

  10. 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

    在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...