Nordic nRF52832/nRF51822 GPIOTE

1、GPIOTE 简单介绍

Nordic 的GPIO中断是通过 GPIOTE这个外设模块来实现的。

GPIOTE 使用task 和event的方式来控制GPIO,GPIO做为输出可以通过 GPIOTE task 来控制IO输出高电平、低电平、或者翻转电平,GPIO做为输入在IO发生变化(Rising edge、 Falling edge、Any change)产生GPIOTE event事件,可以触发GPIOTE中断,或着将event连接到PPI上触发task。PPI这个外设功能非常好,可以减少CPU工作。

 

2、GPIOTE 通道

nRF52832 GPIOTE 有8 个通道,最多可以配置8个GPIO(Pin events and tasks)

 

3、如果超过8个怎么办?

可以使用Port event

Port event是所有GPIO DETECT信号的组合事件,每个GPIO都可以触发GPIOTE Port event。

 

4、程序代码如何配置使用pin event还是port event ?

 

nrf_drv_gpiote_in_init 初始化函数中参数p_config->hi_accuracy = true 为 pin event,否则为port event

 

5、下面说说使用GPIOTE遇到的问题

无论是pin event还是port event的方式都有些问题,要根据自己的使用场景和要求来选择配置

 

5.1  GPIOTE pin event 功耗高

GPIOTE pin event 需要使用16MHz HFCLK,所以功耗比较高

image

5.2  GPIOTE port event 不能多个GPIO同时触发

因为GPIOTE port event是检测DETECT 上升沿信号,GPIO的SENSE条件为真就将DETECT设置为1,DETECT是所有GPIO的组合信号,如果一个GPIO 已经触发DETECT信号,并且IO状态未改变,SENSE条件还是为真,DETECT将还是1,这里另一个GPIO再次Sense条件满足,也不会触发port event中断,因为DETECT没有改变(没有检测到上升沿)

image

 

5.3  解决方法

5.3.1 如果不在乎功耗,那么很简单,配置p_config->hi_accuracy = true使用pin event

5.3.2 如果功耗非常重要,并且没有多个GPIO同时中断的场景,那么配置p_config->hi_accuracy = false使用port event

5.3.3 如果功耗非常重要 , 并且需要多个GPIO同时中断,那么配置p_config->hi_accuracy = false使用port event,并且p_config->sense配置为NRF_GPIOTE_POLARITY_TOGGLE, 这样配置如果按键按下触发port event 中断后改变按键GPIO sense设置就不会持续触发DETECT信号,这时有其他GPIO中断就可以触发Port Event中断


6、参考

https://devzone.nordicsemi.com/f/nordic-q-a/18052/gpiote-handler-module-or-gpiote-driver-for-port-interrupt
https://devzone.nordicsemi.com/f/nordic-q-a/14825/gpiote-interrupt-issue/56595#56595
https://devzone.nordicsemi.com/f/nordic-q-a/40386/question-about-current-in-low-power-mode/157035#157035
https://devzone.nordicsemi.com/f/nordic-q-a/5016/how-to-use-the-port-event/17685#17685
https://devzone.nordicsemi.com/f/nordic-q-a/37063/what-s-difference-between-hi_accuracy-and-port-event-interruption/142491#142491
https://devzone.nordicsemi.com/f/nordic-q-a/25428/gpio-in_event-to-gpio-port-event/100221#100221

https://devzone.nordicsemi.com/f/nordic-q-a/577/current-consumption-when-using-rtc-ppi-and-gpiote#post-id-18533

posted @ 2018-12-22 12:37  天道酬勤DW  阅读(2582)  评论(0编辑  收藏  举报