赞
踩
#什么是 GPIOTE
其实 GPIOTE中断和其它的单片机也差不多它对应的有 任务模式(task),事件模式(event)所谓事件 就是IO口检测到发生了变化 比如由 0变1 这就是一个时间 任务就是自己IO口主动去改变自己的状态 比如由1 变 0
任务模式(task):
每个 GPIOTE 通道最多可以使用三个任务来执行对引脚的写操作。两个任
务是固定的输出高电平(SET)和输出低电平(CLR),一个输出任务(OUT)可配置为执行以下
操作:
• 置位(Set)
• 清零(Clear)
• 切换(Toggle)
事件模式(event):
可以从以下输入条件之一在每个 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.如上代码 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灯翻转 } }
这种中断函数是固定的 这几个通道都是公用这个中断函数然后通过if 去判断是不是这个中断发生了,和51 串口接收和发送中断都是公用一个中断函数一样.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。