单片机
返回首页

[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_exti] GPIOE配置和使用

2022-09-06 来源:csdn

GPIO Task Event blocks (GPIOTE)

A GPIOTE block enables GPIOs on Port 0 to generate events on pin state change which can be used to carry out tasks through the PPI system. A GPIO can also be driven to change state on system events using the PPI system. Low power detection of pin state changes on Port 0 is possible when in System ON or System OFF.


GPIOTE块使端口0上的GPIOs能够在引脚状态变化上产生事件,这些事件可以用于通过PPI系统执行任务。 还可以使用PPI系统驱动GPIO来改变系统事件的状态。 当系统开启或系统关闭时,端口0上的引脚状态变化的低功耗检测是可能的。

image.png

GPIOTE提供了四个通道,四个通道通过GONFIG[0]——CONFIG[3]来配置,这四个通道可通过单独设置,分别和普通的GPIO绑定。当需要使用GPIOTE中断功能时可以设置相关寄存器的相应位让某个通道做为event,同时配置event触发动作。比如绑定的GPIO有上升沿或者下降沿触发event,然后配置中断使能寄存器,配置让其event时触发中断。


官方手册下载:

https://infocenter.nordicsemi.com/pdf/nRF51802_PS_v1.2.pdf

https://infocenter.nordicsemi.com/pdf/nRF51822_PS_v3.4.pdf

https://infocenter.nordicsemi.com/pdf/nRF51422_PS_v3.3.pdf


/********************************************************************************

* @file    bsp_exti.c

* @author  jianqiang.xue

* @version V1.0.0

* @date    2021-04-09

* @brief   NULL

********************************************************************************/

/* Includes ------------------------------------------------------------------*/

#include

#include


#include 'RTE_Components.h'

#include CMSIS_device_header

#include 'nrf_drv_gpiote.h'

/* Private Includes ----------------------------------------------------------*/

/* Private Define ------------------------------------------------------------*/

/* Private Variables ---------------------------------------------------------*/

bool bsp_exti_init = false;


typedef void(*bsp_gpio_exti_callback)(void *gpiox, uint16_t gpio_pin);

static bsp_gpio_exti_callback g_irq_callback;

/* Public Function Prototypes ------------------------------------------------*/

/**

 * @brief  设置外部中断NVIC

 * @note   NULL

 * @param  irqn: 中断号(在typedef enum IRQn中,例如:USART1_IRQn)

 * @param  priority: 中断优先级

 * @retval None

 */

void bsp_exit_set(uint8_t irqn, uint32_t priority)

{

    bsp_exti_init = true;

    nrf_drv_gpiote_in_event_enable(irqn, true);

}


/**

 * @brief  清除外部中断设置

 * @note   NULL

 * @param  irqn: 中断号(在typedef enum IRQn中,例如:USART1_IRQn)

 * @retval None

 */

void bsp_exit_clear_set(uint8_t irqn)

{

    nrf_drv_gpiote_in_event_enable(irqn, false);

}


/**

 * @brief  清除外部中断标志位

 * @note   NULL

 * @param  *gpiox: 预留

 * @param  pin: 引脚号

 * @retval None

 */

void bsp_exit_clear_flag(void *gpiox, uint8_t pin)

{

}


/**

 * @brief  注册外部中事件回调函数

 * @note   NULL

 * @param  *event: 事件函数

 * @retval None

 */

bool bsp_gpio_exit_irq_register_callback(void *event)

{

    if (g_irq_callback != NULL)

    {

        return false;

    }

    else

    {

        g_irq_callback = (bsp_gpio_exti_callback)event;

    }

    return true;

}


void gpiote_event_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)

{

    if (g_irq_callback)

    {

        g_irq_callback(NULL, pin);

    }

}


/********************************************************************************

* @file    bsp_exti.h

* @author  jianqiang.xue

* @version V1.0.0

* @date    2021-04-09

* @brief   NULL

********************************************************************************/


#ifndef __BSP_EXTI_H

#define __BSP_EXTI_H


/* Includes ------------------------------------------------------------------*/

#include

#include


/* Public Function Prototypes ------------------------------------------------*/


void bsp_exit_set(uint8_t irqn, uint32_t priority);

void bsp_exit_clear_set(uint8_t irqn);

void bsp_exit_clear_flag(void *gpiox, uint8_t pin);


// 引脚外部中断回调


bool bsp_gpio_exit_irq_register_callback(void *event);


#endif


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章