当前位置:   article > 正文

nrf52x 二 GPIOTE_nrf52 gpiote

nrf52 gpiote

#什么是 GPIOTE

其实 GPIOTE中断和其它的单片机也差不多它对应的有 任务模式(task),事件模式(event)所谓事件 就是IO口检测到发生了变化 比如由 0变1 这就是一个时间 任务就是自己IO口主动去改变自己的状态 比如由1 变 0

任务模式(task):
每个 GPIOTE 通道最多可以使用三个任务来执行对引脚的写操作。两个任
务是固定的输出高电平(SET)和输出低电平(CLR),一个输出任务(OUT)可配置为执行以下
操作:
• 置位(Set)
• 清零(Clear)
• 切换(Toggle)
事件模式(event):
可以从以下输入条件之一在每个 GPIOTE 通道中生成事件:
• 上升的边缘
• 下降的边缘
• 任何改变

如何配置 GPIOTE

关键就是设置GPIOTE的CONFIG[n]n=0~7寄存器 一共八个通道

void EXIT_KEY_Init(void)
{
	 nrf_gpio_cfg_input(13,NRF_GPIO_PIN_PULLUP);//设置管脚位上拉输入	   
    NVIC_EnableIRQ(GPIOTE_IRQn);//中断嵌套设置
	//一共有8个对应的通道 这里是设置 具体哪个通道对应哪个IO
    NRF_GPIOTE->CONFIG[0] =  (GPIOTE_CONFIG_POLARITY_HiToLo << GPIOTE_CONFIG_POLARITY_Pos)
                           | (13 << GPIOTE_CONFIG_PSEL_Pos)  
                           | (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos);//事件还是任务(Event)	 
    NRF_GPIOTE->INTENSET  = GPIOTE_INTENSET_IN0_Set << GPIOTE_INTENSET_IN0_Pos;// 使能中断类型:
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

1.如上代码 nrf_gpio_cfg_input(13,NRF_GPIO_PIN_PULLUP);//这里要对Io口进行初始化设置 这很好理解(就和STM32F103一样 ,只是具体的实现方式有点不一样)
2.开启中断
3 配置模式 NRF_GPIOTE->CONFIG[0] (主要就是对它进行配置稍后会详解)
4.使能中断

在这里插入图片描述
这里一共20bit 比如我要配置成事件模式Event 就将它的低两位配置成 01(它这里 一般都是过10进制来写的 宏定义基本也都是10进制) 然后打开它的宏定义
在这里插入图片描述
它设置寄存的方式基本都是这样的.

中断配置

学过51和32的应该都知道,完成了上面的配置后还要进行中断的配置

void GPIOTE_IRQHandler(void)
{

    if ((NRF_GPIOTE->EVENTS_IN[0] == 1) && 
        (NRF_GPIOTE->INTENSET & GPIOTE_INTENSET_IN0_Msk))
    {
        NRF_GPIOTE->EVENTS_IN[0] = 0; //中断事件清零.
			  Delay(10000);	
			 if(nrf_gpio_pin_read(KEY_0)== 0)
			 {
			  LED1_Toggle();//led灯翻转
			 }
			
    }

    if ((NRF_GPIOTE->EVENTS_IN[1] == 1) && 
        (NRF_GPIOTE->INTENSET & GPIOTE_INTENSET_IN1_Msk))
    {
        NRF_GPIOTE->EVENTS_IN[1] = 0; //中断事件清零.
			  LED2_Toggle();//led灯翻转
			
    }

 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这种中断函数是固定的 这几个通道都是公用这个中断函数然后通过if 去判断是不是这个中断发生了,和51 串口接收和发送中断都是公用一个中断函数一样.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/223555?site
推荐阅读
相关标签
  

闽ICP备14008679号