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. JavaWeb创建的文件夹默认在tomcat/bin中

    系统项目中需要设置缓存目录,原本项目中的目录设置为D:/cache目录,这怎么成?于是手动改成了cache目录,原本想使用了相对路径,web项目能够把缓存路径设置到tomcat的webapp的具体项目 ...

  2. 【题解】Luogu UVA12345 Dynamic len(set(a[L:R]))

    原题传送门 这题要用动态莫队,我博客里有介绍 这道题和luogu P1903 [国家集训队]数颜色 / 维护队列差不多,解法就在上面那篇博客里qaq 主要的问题是如何排序? 排序有三个关键字: 1.左 ...

  3. NLTK 知识整理

    NLTK 知识整理 nltk.corpus模块自带语料 NLTK comes with many corpora, toy grammars, trained models, etc. A compl ...

  4. win7 powershell配色方案

    首先我是参考微软的word的, look~ Windows PowerShell 配置文件 要配置powershell很简单, 就几步 1.显示 Windows PowerShell 配置文件的路径 ...

  5. markdownpad2-注册码-2017-02-23

    MarkdownPad2.5/2 注册码   User: Soar360@live.com 授权: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImD ...

  6. STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  7. 回归Android之Android基础和小常识

    Activity ,Service,Content Provider,BroadcastReceiver, Intent SQLite,Http,Fragement,Handle 1,Activity ...

  8. java利用poi生成excel文件后下载本地

    1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...

  9. Windows使用(类)Unix环境那些事

    之前的博文中有不少涉及到win下使用unix环境的一些东西,但都是为了做别的事情,还是写一个专门讲这个主题的文章吧. 主角:Cygwin.mingw-W64.MSYS2. 注:mingw已经停止更新很 ...

  10. SP6779 GSS7

    GSS7解题报告 前言 唔,有点恶心哪,废了两个多小时debug 思路 很容易看出傻子都知道,这个是树链剖分+线段树的裸题,只不过是恶心了点,这里重点讲一下细节问题 线段树 做过GSS系列的都应该很熟 ...