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 ...
随机推荐
- Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战
基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...
- nginx 动态跨域配置
方法一: server { ..... set $cors_origin ""; if ($http_origin ~* "a.xxxx.com") { set ...
- centos7.3安装Nginx
首先,如果是阿里云的centos的话,去阿里云管理端为80端口设置一组访问规则,因为阿里云默认是不开的 1. 添加Nginx yum 资源库 rpm -Uvh http://nginx.org/pac ...
- fjwc2019 D2T1 直径 (构造)
#181. 「2019冬令营提高组」直径 (这题构造题是我考场上唯一一A的题........) 先看这个特殊的Subtask4 Subtask 4(20pts):$\sqrt{1+8k}$ 为整 ...
- python之字符编码(二)
一.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以 ...
- 盒子总结,文本属性操作,reset操作,高级选择器,高级选择器优先级,边界圆角(了解),a标签的四大伪类,背景图片操作,背景图片之精灵图
盒子总结 ''' block: 设置宽高 1.没有设置宽,宽自适应父级的宽(子级的border+padding+width=父级的width) 2.没有设置高,高由内容撑开 设置了宽高 一定采用设置的 ...
- JUnit Parametrized Tests
Junit allows us to create parametrized tests. Parametrized test class has to be annotated with the @ ...
- 【Spring Security】五、自定义过滤器
在之前的几篇security教程中,资源和所对应的权限都是在xml中进行配置的,也就在http标签中配置intercept-url,试想要是配置的对象不多,那还好,但是平常实际开发中都往往是非常多的资 ...
- python运维小技巧
以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2: #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ...
- function CONVERSION_EXIT ****INPUT/OUTPUT说明
CONVERSION_EXIT_ALPHA_INPUT和CONVERSION_EXIT_ALPHA_OUTPUT 函数说明 CONVERSION_EXIT_MATN1_INPUT 物料号码转换函数 C ...